summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarja Sundqvist <tarja.sundqvist@qt.io>2022-08-16 20:37:09 +0300
committerTarja Sundqvist <tarja.sundqvist@qt.io>2022-08-16 20:37:09 +0300
commitb7d91087099e4b69d70c0271fbeae19368d485d4 (patch)
treef46b62227cfeccf32b72f6aeb45c17cc7a933505
parent231d3670981a33ec42b91ad1cb33c1fc50551066 (diff)
parentbbfbb18df18658e8ceec4bc04bd2cdf59f6a35ed (diff)
Merge remote-tracking branch 'origin/tqtc/lts-5.15.6' into tqtc/lts-5.15-opensource
-rw-r--r--.qmake.conf2
-rw-r--r--doc/global/externalsites/external-resources.qdoc9
-rw-r--r--examples/widgets/tools/plugandpaint/app/app.pro6
-rw-r--r--mkspecs/features/qt.prf27
-rw-r--r--mkspecs/macx-xcode/WorkspaceSettings.xcsettings2
-rw-r--r--mkspecs/wasm-emscripten/qmake.conf2
-rw-r--r--qmake/generators/unix/unixmake2.cpp28
-rw-r--r--src/3rdparty/freetype/README31
-rw-r--r--src/3rdparty/freetype/builds/unix/ftconfig.h504
-rw-r--r--src/3rdparty/freetype/builds/unix/ftsystem.c15
-rw-r--r--src/3rdparty/freetype/docs/CHANGES105
-rw-r--r--src/3rdparty/freetype/docs/CUSTOMIZE2
-rw-r--r--src/3rdparty/freetype/docs/DEBUG135
-rw-r--r--src/3rdparty/freetype/docs/TODO2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftconfig.h532
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftheader.h64
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftmodule.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftoption.h32
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftstdlib.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/integer-types.h245
-rw-r--r--src/3rdparty/freetype/include/freetype/config/mac-support.h49
-rw-r--r--src/3rdparty/freetype/include/freetype/config/public-macros.h120
-rw-r--r--src/3rdparty/freetype/include/freetype/freetype.h82
-rw-r--r--src/3rdparty/freetype/include/freetype/ftadvanc.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/ftautoh.h450
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbbox.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbdf.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbitmap.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbzip2.h24
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcache.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcffdrv.h262
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcid.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcolor.h20
-rw-r--r--src/3rdparty/freetype/include/freetype/ftdriver.h11
-rw-r--r--src/3rdparty/freetype/include/freetype/fterrdef.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/fterrors.h23
-rw-r--r--src/3rdparty/freetype/include/freetype/ftfntfmt.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgasp.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftglyph.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgxval.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgzip.h24
-rw-r--r--src/3rdparty/freetype/include/freetype/ftimage.h41
-rw-r--r--src/3rdparty/freetype/include/freetype/ftincrem.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlcdfil.h34
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlist.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlzw.h24
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmac.h3
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmm.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmodapi.h9
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmoderr.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/ftotval.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftoutln.h21
-rw-r--r--src/3rdparty/freetype/include/freetype/ftparams.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftpfr.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftrender.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsizes.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsnames.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/ftstroke.h43
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsynth.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsystem.h3
-rw-r--r--src/3rdparty/freetype/include/freetype/fttrigon.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/ftttdrv.h310
-rw-r--r--src/3rdparty/freetype/include/freetype/fttypes.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/ftwinfnt.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/autohint.h8
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/cffotypes.h13
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/cfftypes.h15
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/compiler-macros.h307
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftcalc.h9
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftdebug.h8
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftdriver.h409
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftdrv.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftgloadr.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/fthash.h3
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftmemory.h23
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftobjs.h33
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftpic.h71
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftpsprop.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftrfork.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftserv.h30
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftstream.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/fttrace.h3
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftvalid.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/internal.h67
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/psaux.h17
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/pshints.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svbdf.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svcid.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svgldict.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svgxval.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svkern.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svmetric.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svmm.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svotval.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpfr.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svprop.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svtteng.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/sfnt.h9
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/t1types.h13
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/tttypes.h11
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/wofftypes.h208
-rw-r--r--src/3rdparty/freetype/include/freetype/t1tables.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/ttnameid.h3
-rw-r--r--src/3rdparty/freetype/include/freetype/tttables.h5
-rw-r--r--src/3rdparty/freetype/include/freetype/tttags.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/ttunpat.h60
-rw-r--r--src/3rdparty/freetype/include/ft2build.h10
-rw-r--r--src/3rdparty/freetype/qt_attribution.json4
-rw-r--r--src/3rdparty/freetype/src/Jamfile19
-rw-r--r--src/3rdparty/freetype/src/autofit/Jamfile53
-rw-r--r--src/3rdparty/freetype/src/autofit/afangles.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.c65
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.cin2
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.dat79
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.h164
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.hin2
-rw-r--r--src/3rdparty/freetype/src/autofit/afcjk.c25
-rw-r--r--src/3rdparty/freetype/src/autofit/afcjk.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afcover.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afdummy.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afdummy.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/aferrors.h6
-rw-r--r--src/3rdparty/freetype/src/autofit/afglobal.c6
-rw-r--r--src/3rdparty/freetype/src/autofit/afglobal.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afhints.c6
-rw-r--r--src/3rdparty/freetype/src/autofit/afhints.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afindic.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afindic.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin.c61
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin2.c4
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin2.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afloader.c4
-rw-r--r--src/3rdparty/freetype/src/autofit/afloader.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afmodule.c16
-rw-r--r--src/3rdparty/freetype/src/autofit/afmodule.h8
-rw-r--r--src/3rdparty/freetype/src/autofit/afpic.c152
-rw-r--r--src/3rdparty/freetype/src/autofit/afpic.h105
-rw-r--r--src/3rdparty/freetype/src/autofit/afranges.c26
-rw-r--r--src/3rdparty/freetype/src/autofit/afranges.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afscript.h14
-rw-r--r--src/3rdparty/freetype/src/autofit/afshaper.c7
-rw-r--r--src/3rdparty/freetype/src/autofit/afshaper.h5
-rw-r--r--src/3rdparty/freetype/src/autofit/afstyles.h16
-rw-r--r--src/3rdparty/freetype/src/autofit/aftypes.h11
-rw-r--r--src/3rdparty/freetype/src/autofit/afwarp.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afwarp.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afwrtsys.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/autofit.c3
-rw-r--r--src/3rdparty/freetype/src/autofit/hbshim.c546
-rw-r--r--src/3rdparty/freetype/src/autofit/hbshim.h56
-rw-r--r--src/3rdparty/freetype/src/autofit/module.mk2
-rw-r--r--src/3rdparty/freetype/src/autofit/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/base/Jamfile90
-rw-r--r--src/3rdparty/freetype/src/base/basepic.c108
-rw-r--r--src/3rdparty/freetype/src/base/basepic.h91
-rw-r--r--src/3rdparty/freetype/src/base/ftadvanc.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftapi.c121
-rw-r--r--src/3rdparty/freetype/src/base/ftbase.c3
-rw-r--r--src/3rdparty/freetype/src/base/ftbase.h9
-rw-r--r--src/3rdparty/freetype/src/base/ftbbox.c23
-rw-r--r--src/3rdparty/freetype/src/base/ftbdf.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftbitmap.c17
-rw-r--r--src/3rdparty/freetype/src/base/ftcalc.c13
-rw-r--r--src/3rdparty/freetype/src/base/ftcid.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftcolor.c11
-rw-r--r--src/3rdparty/freetype/src/base/ftdbgmem.c18
-rw-r--r--src/3rdparty/freetype/src/base/ftdebug.c9
-rw-r--r--src/3rdparty/freetype/src/base/fterrors.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftfntfmt.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftfstype.c11
-rw-r--r--src/3rdparty/freetype/src/base/ftgasp.c7
-rw-r--r--src/3rdparty/freetype/src/base/ftgloadr.c32
-rw-r--r--src/3rdparty/freetype/src/base/ftglyph.c15
-rw-r--r--src/3rdparty/freetype/src/base/ftgxval.c9
-rw-r--r--src/3rdparty/freetype/src/base/fthash.c5
-rw-r--r--src/3rdparty/freetype/src/base/ftinit.c8
-rw-r--r--src/3rdparty/freetype/src/base/ftlcdfil.c11
-rw-r--r--src/3rdparty/freetype/src/base/ftmac.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftmm.c13
-rw-r--r--src/3rdparty/freetype/src/base/ftobjs.c114
-rw-r--r--src/3rdparty/freetype/src/base/ftotval.c11
-rw-r--r--src/3rdparty/freetype/src/base/ftoutln.c22
-rw-r--r--src/3rdparty/freetype/src/base/ftpatent.c15
-rw-r--r--src/3rdparty/freetype/src/base/ftpfr.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftpic.c55
-rw-r--r--src/3rdparty/freetype/src/base/ftpsprop.c17
-rw-r--r--src/3rdparty/freetype/src/base/ftrfork.c15
-rw-r--r--src/3rdparty/freetype/src/base/ftsnames.c11
-rw-r--r--src/3rdparty/freetype/src/base/ftstream.c9
-rw-r--r--src/3rdparty/freetype/src/base/ftstroke.c228
-rw-r--r--src/3rdparty/freetype/src/base/ftsynth.c15
-rw-r--r--src/3rdparty/freetype/src/base/ftsystem.c12
-rw-r--r--src/3rdparty/freetype/src/base/fttrigon.c9
-rw-r--r--src/3rdparty/freetype/src/base/fttype1.c11
-rw-r--r--src/3rdparty/freetype/src/base/ftutil.c11
-rw-r--r--src/3rdparty/freetype/src/base/ftver.rc8
-rw-r--r--src/3rdparty/freetype/src/base/ftwinfnt.c11
-rw-r--r--src/3rdparty/freetype/src/base/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/bdf/Jamfile31
-rw-r--r--src/3rdparty/freetype/src/bdf/bdf.c1
-rw-r--r--src/3rdparty/freetype/src/bdf/bdf.h7
-rw-r--r--src/3rdparty/freetype/src/bdf/bdfdrivr.c44
-rw-r--r--src/3rdparty/freetype/src/bdf/bdfdrivr.h3
-rw-r--r--src/3rdparty/freetype/src/bdf/bdferror.h4
-rw-r--r--src/3rdparty/freetype/src/bdf/bdflib.c9
-rw-r--r--src/3rdparty/freetype/src/bzip2/Jamfile18
-rw-r--r--src/3rdparty/freetype/src/bzip2/ftbzip2.c15
-rw-r--r--src/3rdparty/freetype/src/bzip2/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cache/Jamfile37
-rw-r--r--src/3rdparty/freetype/src/cache/ftcache.c3
-rw-r--r--src/3rdparty/freetype/src/cache/ftcbasic.c17
-rw-r--r--src/3rdparty/freetype/src/cache/ftccache.c7
-rw-r--r--src/3rdparty/freetype/src/cache/ftccache.h4
-rw-r--r--src/3rdparty/freetype/src/cache/ftccback.h7
-rw-r--r--src/3rdparty/freetype/src/cache/ftccmap.c13
-rw-r--r--src/3rdparty/freetype/src/cache/ftcerror.h6
-rw-r--r--src/3rdparty/freetype/src/cache/ftcglyph.c9
-rw-r--r--src/3rdparty/freetype/src/cache/ftcglyph.h3
-rw-r--r--src/3rdparty/freetype/src/cache/ftcimage.c9
-rw-r--r--src/3rdparty/freetype/src/cache/ftcimage.h5
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmanag.c11
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmanag.h5
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmru.c9
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmru.h6
-rw-r--r--src/3rdparty/freetype/src/cache/ftcsbits.c11
-rw-r--r--src/3rdparty/freetype/src/cache/ftcsbits.h5
-rw-r--r--src/3rdparty/freetype/src/cache/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cff/Jamfile36
-rw-r--r--src/3rdparty/freetype/src/cff/cf2arrst.c241
-rw-r--r--src/3rdparty/freetype/src/cff/cf2arrst.h100
-rw-r--r--src/3rdparty/freetype/src/cff/cf2blues.c579
-rw-r--r--src/3rdparty/freetype/src/cff/cf2blues.h185
-rw-r--r--src/3rdparty/freetype/src/cff/cf2error.c52
-rw-r--r--src/3rdparty/freetype/src/cff/cf2error.h119
-rw-r--r--src/3rdparty/freetype/src/cff/cf2fixed.h95
-rw-r--r--src/3rdparty/freetype/src/cff/cf2font.c512
-rw-r--r--src/3rdparty/freetype/src/cff/cf2font.h121
-rw-r--r--src/3rdparty/freetype/src/cff/cf2ft.c700
-rw-r--r--src/3rdparty/freetype/src/cff/cf2ft.h147
-rw-r--r--src/3rdparty/freetype/src/cff/cf2glue.h144
-rw-r--r--src/3rdparty/freetype/src/cff/cf2hints.c1847
-rw-r--r--src/3rdparty/freetype/src/cff/cf2hints.h289
-rw-r--r--src/3rdparty/freetype/src/cff/cf2intrp.c1571
-rw-r--r--src/3rdparty/freetype/src/cff/cf2intrp.h83
-rw-r--r--src/3rdparty/freetype/src/cff/cf2read.c112
-rw-r--r--src/3rdparty/freetype/src/cff/cf2read.h68
-rw-r--r--src/3rdparty/freetype/src/cff/cf2stack.c205
-rw-r--r--src/3rdparty/freetype/src/cff/cf2stack.h106
-rw-r--r--src/3rdparty/freetype/src/cff/cf2types.h78
-rw-r--r--src/3rdparty/freetype/src/cff/cff.c3
-rw-r--r--src/3rdparty/freetype/src/cff/cffcmap.c5
-rw-r--r--src/3rdparty/freetype/src/cff/cffcmap.h8
-rw-r--r--src/3rdparty/freetype/src/cff/cffdrivr.c39
-rw-r--r--src/3rdparty/freetype/src/cff/cffdrivr.h5
-rw-r--r--src/3rdparty/freetype/src/cff/cfferrs.h6
-rw-r--r--src/3rdparty/freetype/src/cff/cffgload.c27
-rw-r--r--src/3rdparty/freetype/src/cff/cffgload.h7
-rw-r--r--src/3rdparty/freetype/src/cff/cffload.c62
-rw-r--r--src/3rdparty/freetype/src/cff/cffload.h7
-rw-r--r--src/3rdparty/freetype/src/cff/cffobjs.c101
-rw-r--r--src/3rdparty/freetype/src/cff/cffobjs.h3
-rw-r--r--src/3rdparty/freetype/src/cff/cffparse.c31
-rw-r--r--src/3rdparty/freetype/src/cff/cffparse.h7
-rw-r--r--src/3rdparty/freetype/src/cff/cffpic.c138
-rw-r--r--src/3rdparty/freetype/src/cff/cffpic.h121
-rw-r--r--src/3rdparty/freetype/src/cff/cfftoken.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cfftypes.h284
-rw-r--r--src/3rdparty/freetype/src/cff/module.mk2
-rw-r--r--src/3rdparty/freetype/src/cff/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cid/Jamfile34
-rw-r--r--src/3rdparty/freetype/src/cid/ciderrs.h6
-rw-r--r--src/3rdparty/freetype/src/cid/cidgload.c19
-rw-r--r--src/3rdparty/freetype/src/cid/cidgload.h3
-rw-r--r--src/3rdparty/freetype/src/cid/cidload.c20
-rw-r--r--src/3rdparty/freetype/src/cid/cidload.h5
-rw-r--r--src/3rdparty/freetype/src/cid/cidobjs.c18
-rw-r--r--src/3rdparty/freetype/src/cid/cidobjs.h6
-rw-r--r--src/3rdparty/freetype/src/cid/cidparse.c9
-rw-r--r--src/3rdparty/freetype/src/cid/cidparse.h9
-rw-r--r--src/3rdparty/freetype/src/cid/cidriver.c21
-rw-r--r--src/3rdparty/freetype/src/cid/cidriver.h5
-rw-r--r--src/3rdparty/freetype/src/cid/cidtoken.h2
-rw-r--r--src/3rdparty/freetype/src/cid/module.mk2
-rw-r--r--src/3rdparty/freetype/src/cid/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cid/type1cid.c3
-rw-r--r--src/3rdparty/freetype/src/gxvalid/Jamfile52
-rw-r--r--src/3rdparty/freetype/src/gxvalid/README2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvalid.c3
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvalid.h11
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvbsln.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvcommn.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvcommn.h7
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxverror.h6
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfeat.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfeat.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfgen.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvjust.c4
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvkern.c6
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvlcar.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmod.c13
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmod.h5
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort.h9
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort0.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort1.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort2.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort4.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort5.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx.h9
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx0.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx1.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx2.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx4.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx5.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvopbd.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvprop.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvtrak.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/module.mk2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/gzip/Jamfile16
-rw-r--r--src/3rdparty/freetype/src/gzip/ftgzip.c25
-rw-r--r--src/3rdparty/freetype/src/gzip/infutil.h2
-rw-r--r--src/3rdparty/freetype/src/gzip/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/gzip/zconf.h284
-rw-r--r--src/3rdparty/freetype/src/lzw/Jamfile16
-rw-r--r--src/3rdparty/freetype/src/lzw/ftlzw.c15
-rw-r--r--src/3rdparty/freetype/src/lzw/ftzopen.c8
-rw-r--r--src/3rdparty/freetype/src/lzw/ftzopen.h8
-rw-r--r--src/3rdparty/freetype/src/lzw/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/otvalid/Jamfile37
-rw-r--r--src/3rdparty/freetype/src/otvalid/module.mk2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvalid.c3
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvalid.h11
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvbase.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvcommn.c5
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvcommn.h5
-rw-r--r--src/3rdparty/freetype/src/otvalid/otverror.h6
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgdef.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgpos.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgpos.h2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgsub.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvjstf.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmath.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmod.c13
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmod.h5
-rw-r--r--src/3rdparty/freetype/src/otvalid/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/pcf/Jamfile32
-rw-r--r--src/3rdparty/freetype/src/pcf/pcf.c1
-rw-r--r--src/3rdparty/freetype/src/pcf/pcf.h5
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfdrivr.c36
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfdrivr.h3
-rw-r--r--src/3rdparty/freetype/src/pcf/pcferror.h4
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfread.c27
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfread.h1
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfutil.c1
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfutil.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/Jamfile35
-rw-r--r--src/3rdparty/freetype/src/pfr/module.mk2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfr.c3
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrcmap.c5
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrcmap.h5
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrdrivr.c11
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrdrivr.h5
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrerror.h6
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrgload.c8
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrgload.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrload.c6
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrload.h4
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrobjs.c10
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrobjs.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrsbit.c8
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrsbit.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrtypes.h5
-rw-r--r--src/3rdparty/freetype/src/pfr/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/psaux/Jamfile45
-rw-r--r--src/3rdparty/freetype/src/psaux/afmparse.c9
-rw-r--r--src/3rdparty/freetype/src/psaux/afmparse.h5
-rw-r--r--src/3rdparty/freetype/src/psaux/cffdecode.c16
-rw-r--r--src/3rdparty/freetype/src/psaux/cffdecode.h5
-rw-r--r--src/3rdparty/freetype/src/psaux/module.mk2
-rw-r--r--src/3rdparty/freetype/src/psaux/psarrst.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/psaux.c3
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxerr.h6
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxmod.c11
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxmod.h21
-rw-r--r--src/3rdparty/freetype/src/psaux/psblues.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/psconv.c7
-rw-r--r--src/3rdparty/freetype/src/psaux/psconv.h5
-rw-r--r--src/3rdparty/freetype/src/psaux/pserror.h5
-rw-r--r--src/3rdparty/freetype/src/psaux/psfont.c3
-rw-r--r--src/3rdparty/freetype/src/psaux/psfont.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/psft.c16
-rw-r--r--src/3rdparty/freetype/src/psaux/psft.h6
-rw-r--r--src/3rdparty/freetype/src/psaux/pshints.c4
-rw-r--r--src/3rdparty/freetype/src/psaux/psintrp.c26
-rw-r--r--src/3rdparty/freetype/src/psaux/psobjs.c19
-rw-r--r--src/3rdparty/freetype/src/psaux/psobjs.h7
-rw-r--r--src/3rdparty/freetype/src/psaux/psread.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/psstack.c14
-rw-r--r--src/3rdparty/freetype/src/psaux/psstack.h1
-rw-r--r--src/3rdparty/freetype/src/psaux/pstypes.h3
-rw-r--r--src/3rdparty/freetype/src/psaux/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/psaux/t1cmap.c4
-rw-r--r--src/3rdparty/freetype/src/psaux/t1cmap.h7
-rw-r--r--src/3rdparty/freetype/src/psaux/t1decode.c215
-rw-r--r--src/3rdparty/freetype/src/psaux/t1decode.h7
-rw-r--r--src/3rdparty/freetype/src/pshinter/Jamfile34
-rw-r--r--src/3rdparty/freetype/src/pshinter/module.mk2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshalgo.c9
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshalgo.h2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshglob.c9
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshglob.h6
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshinter.c3
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshmod.c6
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshmod.h5
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshnterr.h6
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshpic.c76
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshpic.h63
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshrec.c13
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshrec.h5
-rw-r--r--src/3rdparty/freetype/src/pshinter/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/psnames/Jamfile31
-rw-r--r--src/3rdparty/freetype/src/psnames/module.mk2
-rw-r--r--src/3rdparty/freetype/src/psnames/psmodule.c9
-rw-r--r--src/3rdparty/freetype/src/psnames/psmodule.h5
-rw-r--r--src/3rdparty/freetype/src/psnames/psnamerr.h6
-rw-r--r--src/3rdparty/freetype/src/psnames/psnames.c3
-rw-r--r--src/3rdparty/freetype/src/psnames/pspic.c97
-rw-r--r--src/3rdparty/freetype/src/psnames/pspic.h68
-rw-r--r--src/3rdparty/freetype/src/psnames/pstables.h2
-rw-r--r--src/3rdparty/freetype/src/psnames/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/raster/Jamfile32
-rw-r--r--src/3rdparty/freetype/src/raster/ftmisc.h2
-rw-r--r--src/3rdparty/freetype/src/raster/ftraster.c121
-rw-r--r--src/3rdparty/freetype/src/raster/ftraster.h5
-rw-r--r--src/3rdparty/freetype/src/raster/ftrend1.c9
-rw-r--r--src/3rdparty/freetype/src/raster/ftrend1.h5
-rw-r--r--src/3rdparty/freetype/src/raster/module.mk2
-rw-r--r--src/3rdparty/freetype/src/raster/raster.c3
-rw-r--r--src/3rdparty/freetype/src/raster/rasterrs.h6
-rw-r--r--src/3rdparty/freetype/src/raster/rastpic.c89
-rw-r--r--src/3rdparty/freetype/src/raster/rastpic.h63
-rw-r--r--src/3rdparty/freetype/src/raster/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/sfnt/Jamfile42
-rw-r--r--src/3rdparty/freetype/src/sfnt/module.mk2
-rw-r--r--src/3rdparty/freetype/src/sfnt/pngshim.c17
-rw-r--r--src/3rdparty/freetype/src/sfnt/pngshim.h3
-rw-r--r--src/3rdparty/freetype/src/sfnt/rules.mk30
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfdriver.c27
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfdriver.h5
-rw-r--r--src/3rdparty/freetype/src/sfnt/sferrors.h6
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfnt.c5
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfntpic.c143
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfntpic.h112
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfobjs.c61
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfobjs.h7
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff.c21
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff.h7
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff2.c2337
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff2.h75
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttbdf.c9
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttbdf.h5
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmap.c42
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmap.h14
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmapc.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcolr.c17
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcolr.h3
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcpal.c23
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcpal.h3
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttkern.c9
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttkern.h7
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttload.c27
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttload.h7
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttmtx.c11
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttmtx.h7
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttpost.c13
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttpost.h4
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsbit.c13
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsbit.h3
-rw-r--r--src/3rdparty/freetype/src/sfnt/woff2tags.c109
-rw-r--r--src/3rdparty/freetype/src/sfnt/woff2tags.h39
-rw-r--r--src/3rdparty/freetype/src/smooth/Jamfile32
-rw-r--r--src/3rdparty/freetype/src/smooth/ftgrays.c13
-rw-r--r--src/3rdparty/freetype/src/smooth/ftgrays.h4
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmerrs.h6
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmooth.c702
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmooth.h9
-rw-r--r--src/3rdparty/freetype/src/smooth/ftspic.c118
-rw-r--r--src/3rdparty/freetype/src/smooth/ftspic.h75
-rw-r--r--src/3rdparty/freetype/src/smooth/module.mk6
-rw-r--r--src/3rdparty/freetype/src/smooth/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/smooth/smooth.c3
-rw-r--r--src/3rdparty/freetype/src/tools/Jamfile5
-rw-r--r--src/3rdparty/freetype/src/tools/afblue.pl2
-rwxr-xr-x[-rw-r--r--]src/3rdparty/freetype/src/tools/chktrcmp.py0
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/content.py672
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/docbeauty.py111
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/docmaker.py115
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/formatter.py228
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/sources.py410
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/tohtml.py725
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/utils.py127
-rw-r--r--src/3rdparty/freetype/src/tools/ftfuzzer/README81
-rw-r--r--src/3rdparty/freetype/src/tools/ftfuzzer/ftfuzzer.cc428
-rw-r--r--src/3rdparty/freetype/src/tools/ftfuzzer/ftmutator.cc314
-rw-r--r--src/3rdparty/freetype/src/tools/ftfuzzer/rasterfuzzer.cc129
-rw-r--r--src/3rdparty/freetype/src/tools/ftfuzzer/runinput.cc58
-rw-r--r--src/3rdparty/freetype/src/tools/ftrandom/Makefile45
-rw-r--r--src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c4
-rw-r--r--src/3rdparty/freetype/src/tools/glnames.py2
-rwxr-xr-xsrc/3rdparty/freetype/src/tools/make_distribution_archives.py208
-rw-r--r--src/3rdparty/freetype/src/tools/test_afm.c7
-rw-r--r--src/3rdparty/freetype/src/tools/test_bbox.c5
-rw-r--r--src/3rdparty/freetype/src/tools/test_trig.c5
-rwxr-xr-x[-rw-r--r--]src/3rdparty/freetype/src/tools/update-copyright0
-rwxr-xr-x[-rw-r--r--]src/3rdparty/freetype/src/tools/update-copyright-year2
-rw-r--r--src/3rdparty/freetype/src/truetype/Jamfile37
-rw-r--r--src/3rdparty/freetype/src/truetype/module.mk2
-rw-r--r--src/3rdparty/freetype/src/truetype/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/truetype/truetype.c3
-rw-r--r--src/3rdparty/freetype/src/truetype/ttdriver.c25
-rw-r--r--src/3rdparty/freetype/src/truetype/ttdriver.h5
-rw-r--r--src/3rdparty/freetype/src/truetype/tterrors.h6
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgload.c83
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgload.h3
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgxvar.c149
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgxvar.h3
-rw-r--r--src/3rdparty/freetype/src/truetype/ttinterp.c519
-rw-r--r--src/3rdparty/freetype/src/truetype/ttinterp.h5
-rw-r--r--src/3rdparty/freetype/src/truetype/ttobjs.c21
-rw-r--r--src/3rdparty/freetype/src/truetype/ttobjs.h7
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpic.c101
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpic.h88
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpload.c29
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpload.h5
-rw-r--r--src/3rdparty/freetype/src/truetype/ttsubpix.c17
-rw-r--r--src/3rdparty/freetype/src/truetype/ttsubpix.h3
-rw-r--r--src/3rdparty/freetype/src/type1/Jamfile35
-rw-r--r--src/3rdparty/freetype/src/type1/module.mk2
-rw-r--r--src/3rdparty/freetype/src/type1/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/type1/t1afm.c9
-rw-r--r--src/3rdparty/freetype/src/type1/t1afm.h5
-rw-r--r--src/3rdparty/freetype/src/type1/t1driver.c31
-rw-r--r--src/3rdparty/freetype/src/type1/t1driver.h5
-rw-r--r--src/3rdparty/freetype/src/type1/t1errors.h6
-rw-r--r--src/3rdparty/freetype/src/type1/t1gload.c19
-rw-r--r--src/3rdparty/freetype/src/type1/t1gload.h3
-rw-r--r--src/3rdparty/freetype/src/type1/t1load.c60
-rw-r--r--src/3rdparty/freetype/src/type1/t1load.h9
-rw-r--r--src/3rdparty/freetype/src/type1/t1objs.c21
-rw-r--r--src/3rdparty/freetype/src/type1/t1objs.h6
-rw-r--r--src/3rdparty/freetype/src/type1/t1parse.c9
-rw-r--r--src/3rdparty/freetype/src/type1/t1parse.h7
-rw-r--r--src/3rdparty/freetype/src/type1/t1tokens.h2
-rw-r--r--src/3rdparty/freetype/src/type1/type1.c3
-rw-r--r--src/3rdparty/freetype/src/type42/Jamfile32
-rw-r--r--src/3rdparty/freetype/src/type42/module.mk2
-rw-r--r--src/3rdparty/freetype/src/type42/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/type42/t42drivr.c12
-rw-r--r--src/3rdparty/freetype/src/type42/t42drivr.h5
-rw-r--r--src/3rdparty/freetype/src/type42/t42error.h6
-rw-r--r--src/3rdparty/freetype/src/type42/t42objs.c8
-rw-r--r--src/3rdparty/freetype/src/type42/t42objs.h17
-rw-r--r--src/3rdparty/freetype/src/type42/t42parse.c10
-rw-r--r--src/3rdparty/freetype/src/type42/t42parse.h4
-rw-r--r--src/3rdparty/freetype/src/type42/t42types.h11
-rw-r--r--src/3rdparty/freetype/src/type42/type42.c3
-rw-r--r--src/3rdparty/freetype/src/winfonts/Jamfile16
-rw-r--r--src/3rdparty/freetype/src/winfonts/fnterrs.h6
-rw-r--r--src/3rdparty/freetype/src/winfonts/module.mk2
-rw-r--r--src/3rdparty/freetype/src/winfonts/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/winfonts/winfnt.c23
-rw-r--r--src/3rdparty/freetype/src/winfonts/winfnt.h7
-rw-r--r--src/3rdparty/libpng/pngrutil.c6
-rw-r--r--src/3rdparty/libpng/qtpatches.diff17
-rw-r--r--src/3rdparty/md4c/md4c.c91
-rw-r--r--src/3rdparty/md4c/qt_attribution.json4
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java2330
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java8
-rw-r--r--src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java4
-rw-r--r--src/android/templates/AndroidManifest.xml2
-rw-r--r--src/concurrent/qtconcurrentfilter.h32
-rw-r--r--src/concurrent/qtconcurrentmap.h34
-rw-r--r--src/concurrent/qtconcurrentthreadengine.cpp33
-rw-r--r--src/concurrent/qtconcurrentthreadengine.h23
-rw-r--r--src/corelib/Qt5AndroidSupport.cmake40
-rw-r--r--src/corelib/configure.json1
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_global_qrandom.cpp2
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp2
-rw-r--r--src/corelib/doc/src/includes/qfile-copy.qdocinc11
-rw-r--r--src/corelib/global/qglobal.cpp8
-rw-r--r--src/corelib/global/qglobalstatic.h4
-rw-r--r--src/corelib/global/qnamespace.qdoc9
-rw-r--r--src/corelib/io/qfile.cpp14
-rw-r--r--src/corelib/io/qsettings_mac.cpp10
-rw-r--r--src/corelib/io/qt_attribution.json2
-rw-r--r--src/corelib/io/qurl.cpp4
-rw-r--r--src/corelib/io/qurltlds_p.h28726
-rw-r--r--src/corelib/kernel/qcfsocketnotifier.cpp14
-rw-r--r--src/corelib/kernel/qcore_mac.mm4
-rw-r--r--src/corelib/kernel/qobject.cpp71
-rw-r--r--src/corelib/kernel/qobject_p.h28
-rw-r--r--src/corelib/text/qchar.cpp24
-rw-r--r--src/corelib/text/qcollator.cpp10
-rw-r--r--src/corelib/text/qlocale.cpp25
-rw-r--r--src/corelib/text/qlocale_p.h1
-rw-r--r--src/corelib/text/qstring.cpp18
-rw-r--r--src/corelib/text/qt_attribution.json2
-rw-r--r--src/corelib/text/qtextboundaryfinder.cpp12
-rw-r--r--src/corelib/thread/qfutureinterface.h2
-rw-r--r--src/corelib/thread/qorderedmutexlocker_p.h41
-rw-r--r--src/corelib/thread/qresultstore.cpp1
-rw-r--r--src/corelib/thread/qresultstore.h7
-rw-r--r--src/corelib/time/qdatetimeparser.cpp39
-rw-r--r--src/corelib/tools/qduplicatetracker_p.h13
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h6
-rw-r--r--src/corelib/tools/qvarlengtharray.h2
-rw-r--r--src/gui/doc/snippets/code/src_gui_painting_qtransform.cpp8
-rw-r--r--src/gui/doc/snippets/transform/main.cpp19
-rw-r--r--src/gui/image/qpnghandler.cpp4
-rw-r--r--src/gui/image/qxpmhandler.cpp33
-rw-r--r--src/gui/kernel/qguiapplication.cpp7
-rw-r--r--src/gui/kernel/qopenglcontext.cpp3
-rw-r--r--src/gui/math3d/qquaternion.cpp6
-rw-r--r--src/gui/opengl/qopenglpaintdevice.cpp2
-rw-r--r--src/gui/painting/qcolorspace.cpp14
-rw-r--r--src/gui/painting/qicc.cpp2
-rw-r--r--src/gui/painting/qpagesize.h2
-rw-r--r--src/gui/painting/qpaintengineex.cpp6
-rw-r--r--src/gui/painting/qtransform.cpp21
-rw-r--r--src/gui/text/qfontdatabase.cpp29
-rw-r--r--src/gui/text/qtextdocumentfragment.cpp3
-rw-r--r--src/gui/text/qtextdocumentlayout.cpp12
-rw-r--r--src/gui/text/qtextengine.cpp13
-rw-r--r--src/gui/text/qtextlayout.cpp18
-rw-r--r--src/gui/util/qvalidator.cpp4
-rw-r--r--src/network/access/http2/http2protocol_p.h3
-rw-r--r--src/network/access/qhttp2protocolhandler.cpp10
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp57
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp4
-rw-r--r--src/network/access/qnetworkdiskcache.cpp4
-rw-r--r--src/network/access/qnetworkreplywasmimpl.cpp84
-rw-r--r--src/network/access/qnetworkreplywasmimpl_p.h2
-rw-r--r--src/network/doc/src/qtnetwork.qdoc4
-rw-r--r--src/network/doc/src/ssl.qdoc4
-rw-r--r--src/network/socket/qhttpsocketengine.cpp2
-rw-r--r--src/network/ssl/qsslkey_openssl.cpp5
-rw-r--r--src/opengl/qgl.cpp3
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp5
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h1
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp6
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp6
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp3
-rw-r--r--src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp14
-rw-r--r--src/plugins/platforms/android/extract-dummy.cpp5
-rw-r--r--src/plugins/platforms/android/extract.cpp15
-rw-r--r--src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp17
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm23
-rw-r--r--src/plugins/platforms/cocoa/qcocoascreen.h5
-rw-r--r--src/plugins/platforms/cocoa/qcocoascreen.mm115
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm27
-rw-r--r--src/plugins/platforms/cocoa/qnswindow.mm2
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.mm4
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp17
-rw-r--r--src/plugins/platforms/xcb/qxcbclipboard.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.cpp45
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp115
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.h16
-rw-r--r--src/plugins/sqldrivers/mysql/qsql_mysql.cpp17
-rw-r--r--src/plugins/sqldrivers/oci/qsql_oci.cpp30
-rw-r--r--src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp2
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac.mm14
-rw-r--r--src/plugins/styles/windowsvista/qwindowsxpstyle.cpp4
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_win.cpp31
-rw-r--r--src/printsupport/dialogs/qprintdialog_unix.cpp2
-rw-r--r--src/testlib/doc/src/qttestlib-manual.qdoc6
-rw-r--r--src/tools/moc/moc.cpp3
-rw-r--r--src/widgets/dialogs/qfilesystemmodel.cpp3
-rw-r--r--src/widgets/doc/src/guibooks.qdoc13
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp4
-rw-r--r--src/widgets/itemviews/qabstractitemview.cpp7
-rw-r--r--src/widgets/itemviews/qabstractitemview_p.h1
-rw-r--r--src/widgets/itemviews/qlistview.cpp4
-rw-r--r--src/widgets/itemviews/qtreeview.cpp15
-rw-r--r--src/widgets/kernel/qaction.cpp6
-rw-r--r--src/widgets/kernel/qwidget.cpp5
-rw-r--r--src/widgets/styles/qstylesheetstyle.cpp21
-rw-r--r--src/widgets/widgets/qdatetimeedit_p.h2
-rw-r--r--src/widgets/widgets/qdockwidget.cpp5
-rw-r--r--src/widgets/widgets/qlineedit.cpp6
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp19
-rw-r--r--src/widgets/widgets/qlineedit_p.h7
-rw-r--r--src/widgets/widgets/qmaccocoaviewcontainer_mac.mm1
-rw-r--r--src/widgets/widgets/qmacnativewidget_mac.mm1
-rw-r--r--src/widgets/widgets/qtabbar.cpp13
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp5
-rw-r--r--tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp22
-rw-r--r--tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp122
-rw-r--r--tests/auto/corelib/io/qsettings/tst_qsettings.cpp4
-rw-r--r--tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp65
-rw-r--r--tests/auto/corelib/text/qchar/tst_qchar.cpp19
-rw-r--r--tests/auto/corelib/text/qlocale/tst_qlocale.cpp30
-rw-r--r--tests/auto/corelib/text/qstring/tst_qstring.cpp32
-rw-r--r--tests/auto/corelib/thread/qfuture/tst_qfuture.cpp79
-rw-r--r--tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp16
-rw-r--r--tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp36
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp31
-rw-r--r--tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp14
-rw-r--r--tests/auto/network/access/http2/tst_http2.cpp9
-rw-r--r--tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp48
-rw-r--r--tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp1
-rw-r--r--tests/auto/tools/moc/enum_with_include.h5
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp95
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp76
-rw-r--r--tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp23
-rw-r--r--tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp28
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp66
-rw-r--r--tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp69
-rw-r--r--tests/benchmarks/corelib/io/qdiriterator/main.cpp29
-rw-r--r--tests/benchmarks/corelib/io/qfile/main.cpp313
-rw-r--r--tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro1
-rw-r--r--tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp10
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/test/test.pro1
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp4
-rw-r--r--tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp11
737 files changed, 24907 insertions, 37185 deletions
diff --git a/.qmake.conf b/.qmake.conf
index ea61eead29..827ae996f5 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -6,4 +6,4 @@ DEFINES += QT_NO_JAVA_STYLE_ITERATORS
QT_SOURCE_TREE = $$PWD
QT_BUILD_TREE = $$shadowed($$PWD)
-MODULE_VERSION = 5.15.5
+MODULE_VERSION = 5.15.6
diff --git a/doc/global/externalsites/external-resources.qdoc b/doc/global/externalsites/external-resources.qdoc
index 187c73da62..0cf9758c03 100644
--- a/doc/global/externalsites/external-resources.qdoc
+++ b/doc/global/externalsites/external-resources.qdoc
@@ -41,6 +41,10 @@
\title Android: App Versioning
*/
/*!
+ \externalpage https://developer.android.com/studio/command-line/adb#devicestatus
+ \title Android: Query for devices
+*/
+/*!
\externalpage http://www.freedesktop.org/
\title freedesktop.org
*/
@@ -522,3 +526,8 @@
\externalpage https://login.qt.io/
\title Qt Account Sign-up
*/
+
+/*!
+ \externalpage https://www.unicode.org/
+ \title Unicode standard
+*/
diff --git a/examples/widgets/tools/plugandpaint/app/app.pro b/examples/widgets/tools/plugandpaint/app/app.pro
index 558d359e7d..e5ff02ecf2 100644
--- a/examples/widgets/tools/plugandpaint/app/app.pro
+++ b/examples/widgets/tools/plugandpaint/app/app.pro
@@ -18,7 +18,11 @@ LIBS = -L../plugins
macx-xcode {
LIBS += -lpnp_basictools$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING})
} else {
- LIBS += -lpnp_basictools
+ android {
+ LIBS += -lpnp_basictools_$${QT_ARCH}
+ } else {
+ LIBS += -lpnp_basictools
+ }
if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
mac:LIBS = $$member(LIBS, 0) $$member(LIBS, 1)_debug
win32:LIBS = $$member(LIBS, 0) $$member(LIBS, 1)d
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index 69d1954306..da1f44a88a 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -215,13 +215,32 @@ for(ever) {
# Linking frameworks by absolute path does not work.
LIBS$$var_sfx += -framework $$framework
} else {
- lib = $$MODULE_MODULE$$qtPlatformTargetSuffix()
+ candidates = $$MODULE_MODULE$$qtPlatformTargetSuffix()
+ darwin: candidates *= $$MODULE_MODULE
win32|contains(MODULE_CONFIG, staticlib) {
- lib = $$MODULE_LIBS/$$QMAKE_PREFIX_STATICLIB$${lib}.$$QMAKE_EXTENSION_STATICLIB
- PRE_TARGETDEPS += $$lib
+ lib_prefix = $$MODULE_LIBS/$$QMAKE_PREFIX_STATICLIB
+ lib_suffix = $$QMAKE_EXTENSION_STATICLIB
+ add_lib_to_pretargetdeps = true
} else {
- lib = $$MODULE_LIBS/$$QMAKE_PREFIX_SHLIB$${lib}.$$QMAKE_EXTENSION_SHLIB
+ lib_prefix = $$MODULE_LIBS/$$QMAKE_PREFIX_SHLIB
+ lib_suffix = $$QMAKE_EXTENSION_SHLIB
+ add_lib_to_pretargetdeps = false
+ }
+ lib_missing = true
+ lib_fallback =
+ for(lib_base, candidates) {
+ lib = $${lib_prefix}$${lib_base}.$${lib_suffix}
+ isEmpty(lib_fallback): \
+ lib_fallback = $$lib
+ exists($$lib) {
+ lib_missing = false
+ break()
+ }
}
+ $$lib_missing: \
+ lib = $$lib_fallback
+ $$add_lib_to_pretargetdeps: \
+ PRE_TARGETDEPS += $$lib
LIBS$$var_sfx += $$lib
}
}
diff --git a/mkspecs/macx-xcode/WorkspaceSettings.xcsettings b/mkspecs/macx-xcode/WorkspaceSettings.xcsettings
index a3f43a8b38..08de0be8d3 100644
--- a/mkspecs/macx-xcode/WorkspaceSettings.xcsettings
+++ b/mkspecs/macx-xcode/WorkspaceSettings.xcsettings
@@ -2,8 +2,6 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
- <key>BuildSystemType</key>
- <string>Original</string>
<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
<false/>
</dict>
diff --git a/mkspecs/wasm-emscripten/qmake.conf b/mkspecs/wasm-emscripten/qmake.conf
index 2b108a5e90..b84ef977eb 100644
--- a/mkspecs/wasm-emscripten/qmake.conf
+++ b/mkspecs/wasm-emscripten/qmake.conf
@@ -81,6 +81,8 @@ QMAKE_EXTENSION_STATICLIB = a # llvm bitcode
QMAKE_AR = emar cqs
equals(QMAKE_HOST.os, Windows) {
+ QMAKE_LINK_OBJECT_MAX = 10
+ QMAKE_LINK_OBJECT_SCRIPT = object_script
QMAKE_AR_CMD = \
"$(file >$(OBJECTS_DIR)/$(TARGET).rsp, $(subst \\,/,$(OBJECTS)))$$escape_expand(\\n\\t)" \
"$(AR) $(DESTDIR)$(TARGET) @$(OBJECTS_DIR)/$(TARGET).rsp"
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index ad6a0e94f2..7cb55a57a1 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -37,6 +37,9 @@
#include <qdebug.h>
#include <time.h>
+#include <tuple>
+#include <utility>
+
QT_BEGIN_NAMESPACE
void
@@ -1415,6 +1418,25 @@ UnixMakefileGenerator::libtoolFileName(bool fixify)
return ret;
}
+static std::pair<ProStringList, ProStringList>
+splitFrameworksAndLibs(const ProStringList &linkArgs)
+{
+ std::pair<ProStringList, ProStringList> result;
+ bool frameworkArg = false;
+ for (auto arg : linkArgs) {
+ if (frameworkArg) {
+ frameworkArg = false;
+ result.second += arg;
+ } else if (arg == "-framework") {
+ frameworkArg = true;
+ result.second += arg;
+ } else {
+ result.first += arg;
+ }
+ }
+ return result;
+}
+
void
UnixMakefileGenerator::writeLibtoolFile()
{
@@ -1489,7 +1511,13 @@ UnixMakefileGenerator::writeLibtoolFile()
ProStringList libs;
for (auto var : libVars)
libs += fixLibFlags(var);
+ ProStringList frameworks;
+ std::tie(libs, frameworks) = splitFrameworksAndLibs(libs);
t << "dependency_libs='" << fixDependencyLibs(libs).join(' ') << "'\n\n";
+ if (!frameworks.isEmpty()) {
+ t << "# Frameworks that this library depends upon.\n";
+ t << "inherited_linker_flags='" << frameworks.join(' ') << "'\n\n";
+ }
t << "# Version information for " << lname << "\n";
int maj = project->first("VER_MAJ").toInt();
diff --git a/src/3rdparty/freetype/README b/src/3rdparty/freetype/README
index 8f3e2bc03b..e4c8cf1c57 100644
--- a/src/3rdparty/freetype/README
+++ b/src/3rdparty/freetype/README
@@ -1,4 +1,4 @@
- FreeType 2.10.1
+ FreeType 2.10.4
===============
Homepage: https://www.freetype.org
@@ -16,17 +16,20 @@
the file `docs/LICENSE.TXT' for the available licenses.
The FreeType 2 API reference is located in `docs/reference/site';
- use the file `index.html' as the top entry point. Additional
- documentation is available as a separate package from our sites. Go
- to
+ use the file `index.html' as the top entry point. [Please note that
+ currently the search function for locally installed documentation
+ doesn't work due to cross-site scripting issues.]
+
+ Additional documentation is available as a separate package from our
+ sites. Go to
https://download.savannah.gnu.org/releases/freetype/
and download one of the following files.
- freetype-doc-2.10.1.tar.xz
- freetype-doc-2.10.1.tar.gz
- ftdoc2101.zip
+ freetype-doc-2.10.4.tar.xz
+ freetype-doc-2.10.4.tar.gz
+ ftdoc2104.zip
To view the documentation online, go to
@@ -64,6 +67,18 @@
a terse message that only says `it doesn't work'.
+ Patches
+ =======
+
+ Please submit patches to the `freetype-devel@nongnu.org' mailing
+ list -- and thank you in advance for your work on improving
+ FreeType!
+
+ Details on the process can be found here:
+
+ https://www.freetype.org/developer.html#patches
+
+
Enjoy!
@@ -71,7 +86,7 @@
----------------------------------------------------------------------
-Copyright (C) 2006-2019 by
+Copyright (C) 2006-2020 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/builds/unix/ftconfig.h b/src/3rdparty/freetype/builds/unix/ftconfig.h
index 39bcaaea14..51cb796391 100644
--- a/src/3rdparty/freetype/builds/unix/ftconfig.h
+++ b/src/3rdparty/freetype/builds/unix/ftconfig.h
@@ -1,481 +1,63 @@
-/* ftconfig.h. Generated from ftconfig.in by configure. */
-/***************************************************************************/
-/* */
-/* ftconfig.in */
-/* */
-/* UNIX-specific configuration file (specification only). */
-/* */
-/* Copyright 1996-2004, 2006-2009, 2011, 2013, 2014 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This header file contains a number of macro definitions that are used */
- /* by the rest of the engine. Most of the macros here are automatically */
- /* determined at compile time, and you should not need to change it to */
- /* port FreeType, except to compile the library with a non-ANSI */
- /* compiler. */
- /* */
- /* Note however that if some specific modifications are needed, we */
- /* advise you to place a modified copy in your build directory. */
- /* */
- /* The build directory is usually `builds/<system>', and contains */
- /* system-specific files that are always included first when building */
- /* the library. */
- /* */
- /*************************************************************************/
-
-
-#ifndef __FTCONFIG_H__
-#define __FTCONFIG_H__
+/* ftconfig.h. Generated from ftconfig.h.in by configure. */
+/****************************************************************************
+ *
+ * ftconfig.h.in
+ *
+ * UNIX-specific configuration file (specification only).
+ *
+ * Copyright (C) 1996-2020 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * This header file contains a number of macro definitions that are used by
+ * the rest of the engine. Most of the macros here are automatically
+ * determined at compile time, and you should not need to change it to port
+ * FreeType, except to compile the library with a non-ANSI compiler.
+ *
+ * Note however that if some specific modifications are needed, we advise
+ * you to place a modified copy in your build directory.
+ *
+ * The build directory is usually `builds/<system>`, and contains
+ * system-specific files that are always included first when building the
+ * library.
+ *
+ */
+
+#ifndef FTCONFIG_H_
+#define FTCONFIG_H_
#include <ft2build.h>
#include FT_CONFIG_OPTIONS_H
#include FT_CONFIG_STANDARD_LIBRARY_H
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
- /* */
- /* These macros can be toggled to suit a specific system. The current */
- /* ones are defaults used to compile FreeType in an ANSI C environment */
- /* (16bit compilers are also supported). Copy this file to your own */
- /* `builds/<system>' directory, and edit it to port the engine. */
- /* */
- /*************************************************************************/
-
-
#define HAVE_UNISTD_H 1
#define HAVE_FCNTL_H 1
-#define HAVE_STDINT_H 1
-
-
- /* There are systems (like the Texas Instruments 'C54x) where a `char' */
- /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
- /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
- /* is probably unexpected. */
- /* */
- /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
- /* `char' type. */
-
-#ifndef FT_CHAR_BIT
-#define FT_CHAR_BIT CHAR_BIT
-#endif
-
/* #undef FT_USE_AUTOCONF_SIZEOF_TYPES */
#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES
#define SIZEOF_INT 4
-#define SIZEOF_LONG 4
+#define SIZEOF_LONG 8
#define FT_SIZEOF_INT SIZEOF_INT
#define FT_SIZEOF_LONG SIZEOF_LONG
-#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
-
- /* Following cpp computation of the bit length of int and long */
- /* is copied from default include/config/ftconfig.h. */
- /* If any improvement is required for this file, it should be */
- /* applied to the original header file for the builders that */
- /* does not use configure script. */
-
- /* The size of an `int' type. */
-#if FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
-#elif FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
-#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
-#else
-#error "Unsupported size of `int' type!"
-#endif
-
- /* The size of a `long' type. A five-byte `long' (as used e.g. on the */
- /* DM642) is recognized but avoided. */
-#if FT_ULONG_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
-#else
-#error "Unsupported size of `long' type!"
-#endif
-
-#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
-
-
- /* FT_UNUSED is a macro used to indicate that a given parameter is not */
- /* used -- this is only used to get rid of unpleasant compiler warnings */
-#ifndef FT_UNUSED
-#define FT_UNUSED( arg ) ( (arg) = (arg) )
-#endif
-
-
- /*************************************************************************/
- /* */
- /* AUTOMATIC CONFIGURATION MACROS */
- /* */
- /* These macros are computed from the ones defined above. Don't touch */
- /* their definition, unless you know precisely what you are doing. No */
- /* porter should need to mess with them. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* Mac support */
- /* */
- /* This is the only necessary change, so it is defined here instead */
- /* providing a new configuration file. */
- /* */
-#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* no Carbon frameworks for 64bit 10.4.x */
- /* AvailabilityMacros.h is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion */
-#include <errno.h>
-#ifdef ECANCELED /* defined since 10.2 */
-#include "AvailabilityMacros.h"
-#endif
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-#undef FT_MACINTOSH
-#endif
-
-#elif defined( __SC__ ) || defined( __MRC__ )
- /* Classic MacOS compilers */
-#include "ConditionalMacros.h"
-#if TARGET_OS_MAC
-#define FT_MACINTOSH 1
-#endif
-
-#endif
-
-
- /* Fix compiler warning with sgi compiler */
-#if defined( __sgi ) && !defined( __GNUC__ )
-#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
-#pragma set woff 3505
-#endif
-#endif
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* basic_types */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit signed integer type. */
- /* */
- typedef signed short FT_Int16;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt16 */
- /* */
- /* <Description> */
- /* A typedef for a 16bit unsigned integer type. */
- /* */
- typedef unsigned short FT_UInt16;
-
- /* */
-
-
- /* this #if 0 ... #endif clause is for documentation purposes */
-#if 0
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int32 */
- /* */
- /* <Description> */
- /* A typedef for a 32bit signed integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef signed XXX FT_Int32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt32 */
- /* */
- /* A typedef for a 32bit unsigned integer type. The size depends on */
- /* the configuration. */
- /* */
- typedef unsigned XXX FT_UInt32;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_Int64 */
- /* */
- /* A typedef for a 64bit signed integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef signed XXX FT_Int64;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* FT_UInt64 */
- /* */
- /* A typedef for a 64bit unsigned integer type. The size depends on */
- /* the configuration. Only defined if there is real 64bit support; */
- /* otherwise, it gets emulated with a structure (if necessary). */
- /* */
- typedef unsigned XXX FT_UInt64;
-
- /* */
-
-#endif
-
-#if FT_SIZEOF_INT == 4
-
- typedef signed int FT_Int32;
- typedef unsigned int FT_UInt32;
-
-#elif FT_SIZEOF_LONG == 4
-
- typedef signed long FT_Int32;
- typedef unsigned long FT_UInt32;
-
-#else
-#error "no 32bit type found -- please check your configuration files"
-#endif
-
-
- /* look up an integer type that is at least 32 bits */
-#if FT_SIZEOF_INT >= 4
-
- typedef int FT_Fast;
- typedef unsigned int FT_UFast;
-
-#elif FT_SIZEOF_LONG >= 4
-
- typedef long FT_Fast;
- typedef unsigned long FT_UFast;
-
-#endif
-
-
- /* determine whether we have a 64-bit int type for platforms without */
- /* Autoconf */
-#if FT_SIZEOF_LONG == 8
-
- /* FT_LONG64 must be defined if a 64-bit type is available */
-#define FT_LONG64
-#define FT_INT64 long
-#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( _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 /* _MSC_VER */
-
-#endif /* FT_SIZEOF_LONG == 8 */
-
-#ifdef FT_LONG64
- typedef FT_INT64 FT_Int64;
- typedef FT_UINT64 FT_UInt64;
-#endif
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
-#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-
-#define FT_LOCAL( x ) static x
-#define FT_LOCAL_DEF( x ) static x
-
-#else
-
-#ifdef __cplusplus
-#define FT_LOCAL( x ) extern "C" x
-#define FT_LOCAL_DEF( x ) extern "C" x
-#else
-#define FT_LOCAL( x ) extern x
-#define FT_LOCAL_DEF( x ) x
-#endif
-
-#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
-
-#define FT_LOCAL_ARRAY( x ) extern const x
-#define FT_LOCAL_ARRAY_DEF( x ) const x
-
-
-#ifndef FT_BASE
-
-#ifdef __cplusplus
-#define FT_BASE( x ) extern "C" x
-#else
-#define FT_BASE( x ) extern x
-#endif
-
-#endif /* !FT_BASE */
-
-
-#ifndef FT_BASE_DEF
-
-#ifdef __cplusplus
-#define FT_BASE_DEF( x ) x
-#else
-#define FT_BASE_DEF( x ) x
-#endif
-
-#endif /* !FT_BASE_DEF */
-
-
-#ifndef FT_EXPORT
-
-#ifdef __cplusplus
-#define FT_EXPORT( x ) extern "C" x
-#else
-#define FT_EXPORT( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT */
-
-
-#ifndef FT_EXPORT_DEF
-
-#ifdef __cplusplus
-#define FT_EXPORT_DEF( x ) extern "C" x
-#else
-#define FT_EXPORT_DEF( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_DEF */
-
-
-#ifndef FT_EXPORT_VAR
-
-#ifdef __cplusplus
-#define FT_EXPORT_VAR( x ) extern "C" x
-#else
-#define FT_EXPORT_VAR( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_VAR */
-
- /* The following macros are needed to compile the library with a */
- /* C++ compiler and with 16bit compilers. */
- /* */
-
- /* This is special. Within C++, you must specify `extern "C"' for */
- /* functions which are used via function pointers, and you also */
- /* must do that for structures which contain function pointers to */
- /* assure C linkage -- it's not possible to have (local) anonymous */
- /* functions which are accessed by (global) function pointers. */
- /* */
- /* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function. */
- /* */
- /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
- /* contains pointers to callback functions. */
- /* */
- /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
- /* that contains pointers to callback functions. */
- /* */
- /* */
- /* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl' or `__fastcall' declarations. */
- /* */
-#ifndef FT_CALLBACK_DEF
-#ifdef __cplusplus
-#define FT_CALLBACK_DEF( x ) extern "C" x
-#else
-#define FT_CALLBACK_DEF( x ) static x
-#endif
-#endif /* FT_CALLBACK_DEF */
-
-#ifndef FT_CALLBACK_TABLE
-#ifdef __cplusplus
-#define FT_CALLBACK_TABLE extern "C"
-#define FT_CALLBACK_TABLE_DEF extern "C"
-#else
-#define FT_CALLBACK_TABLE extern
-#define FT_CALLBACK_TABLE_DEF /* nothing */
-#endif
-#endif /* FT_CALLBACK_TABLE */
-
-
-FT_END_HEADER
+#endif /* FT_USE_AUTOCONF_SIZEOF_TYPES */
+#include <freetype/config/integer-types.h>
+#include <freetype/config/public-macros.h>
+#include <freetype/config/mac-support.h>
-#endif /* __FTCONFIG_H__ */
+#endif /* FTCONFIG_H_ */
/* END */
diff --git a/src/3rdparty/freetype/builds/unix/ftsystem.c b/src/3rdparty/freetype/builds/unix/ftsystem.c
index 826713f948..22bb4dab9b 100644
--- a/src/3rdparty/freetype/builds/unix/ftsystem.c
+++ b/src/3rdparty/freetype/builds/unix/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* Unix-specific FreeType low-level system interface (body). */
/* */
-/* Copyright (C) 1996-2019 by */
+/* Copyright (C) 1996-2020 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -19,11 +19,12 @@
#include <ft2build.h>
/* we use our special ftconfig.h file, not the standard one */
#include <ftconfig.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
-#include FT_INTERNAL_STREAM_H
+//#include FT_CONFIG_CONFIG_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftsystem.h>
+#include <freetype/fterrors.h>
+#include <freetype/fttypes.h>
+#include <freetype/internal/ftstream.h>
/* memory-mapping includes and definitions */
#ifdef HAVE_UNISTD_H
@@ -351,7 +352,7 @@
stream->read = 0;
FT_TRACE1(( "FT_Stream_Open:" ));
- FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
+ FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
filepathname, stream->size ));
return FT_Err_Ok;
diff --git a/src/3rdparty/freetype/docs/CHANGES b/src/3rdparty/freetype/docs/CHANGES
index f36cb19b7e..3bd5291ae1 100644
--- a/src/3rdparty/freetype/docs/CHANGES
+++ b/src/3rdparty/freetype/docs/CHANGES
@@ -1,3 +1,104 @@
+CHANGES BETWEEN 2.10.3 and 2.10.4
+
+ I. IMPORTANT BUG FIXES
+
+ - A heap buffer overflow has been found in the handling of embedded
+ PNG bitmaps, introduced in FreeType version 2.6.
+
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15999
+
+ If you use option FT_CONFIG_OPTION_USE_PNG you should upgrade
+ immediately.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.10.2 and 2.10.3
+
+ I. IMPORTANT CHANGES
+
+ - New flag `FT_OUTLINE_OVERLAP'. If set, make the smooth rasterizer
+ do 4x4 oversampling to mitigate artifacts in pixels partially
+ covered by overlapping contours. Note that this at least
+ quadruples the rendering time.
+
+ If a glyph in a TrueType font has the `OVERLAP_SIMPLE' or
+ `OVERLAP_COMPOUND' bit set, FreeType automatically selects this
+ rendering mode.
+
+
+ II. MISCELLANEOUS
+
+ - Using the arcane method of including FreeType header files with
+ macros like `FT_FREETYPE_H' is no longer mandatory (but retained
+ as an optional feature for backward compatibility).
+
+ - Support for building the library with Meson. Building the demo
+ programs with Meson will follow in a forthcoming release.
+
+ - Minor improvements to the B/W rasterizer.
+
+ - Auto-hinter support for Medefaidrin script.
+
+ - Fix various memory leaks (mainly for CFF) and other issues that
+ might cause crashes in rare circumstances.
+
+ - Jam support has been removed.
+
+ - In `ftview', custom LCD filter values are now normalized and
+ balanced. Unorthodox filters are still available through the `-L'
+ command line option.
+
+ - The GUI demo programs can now be resized.
+
+ - Demo programs that accept command line option `-k' can now handle
+ function keys, too. The corresponding character codes start with
+ 0xF1. As an example, the POSIX shell syntax (accepted by bash,
+ ksh, and zsh)
+
+ -k $'\xF3q'
+
+ emulates the pressing of function key `F3' followed by key `q'.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.10.1 and 2.10.2
+
+ I. IMPORTANT CHANGES
+
+ - Support of WOFF2 fonts. This code contribution was Nikhil
+ Ramakrishnan's GSoC 2019 project.
+
+
+ II. MISCELLANEOUS
+
+ - Function `FT_Get_Var_Axis_Flags' returned random data for Type 1
+ MM fonts.
+
+ - Type 1 fonts with non-integer metrics are now supported by the new
+ (CFF) engine introduced in FreeType 2.9.
+
+ - Drop support for Python 2 in Freetype's API reference generator
+ `docwriter' (Python >= 3.5 is required for targets `make refdoc'
+ and `make refdoc-venv').
+
+ - Auto-hinter support for Hanifi Rohingya.
+
+ - Document the `FT2_KEEP_ALIVE' debugging environment variable.
+
+ - The Visual C++ (and Visual C) project files for Windows builds no
+ longer generate libraries that contain the FreeType version in its
+ filenames. Instead, a resource file gets used to make the
+ libraries contain the corresponding information.
+
+ - The next release will remove Jam build support.
+
+ - The `ftbench' demo program has a new test for testing the
+ `FT_Glyph_Stroke' functionality.
+
+
+======================================================================
CHANGES BETWEEN 2.10.0 and 2.10.1
@@ -209,7 +310,7 @@ CHANGES BETWEEN 2.9 and 2.9.1
use the `pkg-config' interface.
The `configure' script no longer installs `freetype-config' by
- default. For backwards compatibility, a new configure option
+ default. For backward compatibility, a new configure option
`--enable-freetype-config' is provided that reverts this
decision.
@@ -5198,7 +5299,7 @@ Extensions support:
------------------------------------------------------------------------
-Copyright (C) 2000-2019 by
+Copyright (C) 2000-2020 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/docs/CUSTOMIZE b/src/3rdparty/freetype/docs/CUSTOMIZE
index f3f9f8edc1..0f92e70046 100644
--- a/src/3rdparty/freetype/docs/CUSTOMIZE
+++ b/src/3rdparty/freetype/docs/CUSTOMIZE
@@ -139,7 +139,7 @@ IV. Overriding default configuration and module headers
----------------------------------------------------------------------
-Copyright (C) 2003-2019 by
+Copyright (C) 2003-2020 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/docs/DEBUG b/src/3rdparty/freetype/docs/DEBUG
index 828f29434d..a96b5e27b8 100644
--- a/src/3rdparty/freetype/docs/DEBUG
+++ b/src/3rdparty/freetype/docs/DEBUG
@@ -11,20 +11,20 @@ located in the file `ftoption.h'. The macros are:
FT_DEBUG_LEVEL_ERROR
- #define this macro if you want to compile the FT_ERROR macro calls
- to print error messages during program execution. This will not
- stop the program. Very useful to spot invalid fonts during
+ #define this macro if you want to compile the `FT_ERROR' macro
+ calls to print error messages during program execution. This does
+ not stop the program. Very useful to spot invalid fonts during
development and to code workarounds for them.
FT_DEBUG_LEVEL_TRACE
- #define this macro if you want to compile both macros FT_ERROR and
- FT_TRACE. This also includes the variants FT_TRACE0, FT_TRACE1,
- FT_TRACE2, ..., FT_TRACE7.
+ #define this macro if you want to compile both macros `FT_ERROR'
+ and `FT_TRACE'. This also includes the variants `FT_TRACE0',
+ `FT_TRACE1', `FT_TRACE2', ..., `FT_TRACE7'.
The trace macros are used to send debugging messages when an
appropriate `debug level' is configured at runtime through the
- FT2_DEBUG environment variable (more on this later).
+ `FT2_DEBUG' environment variable (more on this later).
FT_DEBUG_MEMORY
@@ -32,16 +32,16 @@ located in the file `ftoption.h'. The macros are:
small but effective debugging memory manager that tracks all
allocations and frees that are performed within the font engine.
- When the FT2_DEBUG_MEMORY environment variable is defined at
- runtime, a call to FT_Done_FreeType will dump memory statistics,
- including the list of leaked memory blocks with the source
- locations where these were allocated. It is always a very good
- idea to define this in development builds. This works with _any_
- program linked to FreeType, but requires a big deal of memory (the
- debugging memory manager never frees the blocks to the heap in
- order to detect double frees).
+ When the `FT2_DEBUG_MEMORY' environment variable is defined at
+ runtime, a call to `FT_Done_FreeType' dumps memory statistics,
+ including the list of leaked memory blocks and optionally with the
+ source locations where these were allocated. It is always a very
+ good idea to define this in development builds. This works with
+ _any_ program linked to FreeType, but requires a big deal of
+ memory (the debugging memory manager never frees the blocks to the
+ heap in order to detect double frees).
- When FT2_DEBUG_MEMORY isn't defined at runtime, the debugging
+ When `FT2_DEBUG_MEMORY' isn't defined at runtime, the debugging
memory manager is ignored, and performance is unaffected.
@@ -55,10 +55,10 @@ debugging its code:
1. FT_ERROR(( ... ))
This macro is used to send debug messages that indicate relatively
- serious errors (like broken font files), but will not stop the
+ serious errors (like broken font files) without stopping the
execution of the running program. Its code is compiled only when
- either FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined in
- `ftoption.h'.
+ either `FT_DEBUG_LEVEL_ERROR' or `FT_DEBUG_LEVEL_TRACE' are
+ defined in `ftoption.h'.
Note that you have to use a printf-like signature, but with double
parentheses, like in
@@ -69,53 +69,53 @@ debugging its code:
2. FT_ASSERT( condition )
This macro is used to check strong assertions at runtime. If its
- condition isn't TRUE, the program will abort with a panic message.
- Its code is compiled when either FT_DEBUG_LEVEL_ERROR or
- FT_DEBUG_LEVEL_TRACE are defined. You don't need double
- parentheses here. For example
+ condition isn't TRUE, the program aborts with a panic message.
+ Its code is compiled when either `FT_DEBUG_LEVEL_ERROR' or
+ `FT_DEBUG_LEVEL_TRACE' are defined. You don't need double
+ parentheses here. Example:
FT_ASSERT( ptr != NULL );
3. FT_TRACE( level, (message...) )
- The FT_TRACE macro is used to send general-purpose debugging
+ The `FT_TRACE' macro is used to send general-purpose debugging
messages during program execution. This macro uses an *implicit*
- macro named FT_COMPONENT used to name the current FreeType
+ macro named `FT_COMPONENT', which names the current FreeType
component being run.
- The developer should always define FT_COMPONENT as appropriate,
+ The developer should always define `FT_COMPONENT' as appropriate,
for example as in
#undef FT_COMPONENT
#define FT_COMPONENT io
- The value of the FT_COMPONENT macro is one of the component
- names defined in the internal file `internal/fttrace.h'. If you
- modify FreeType source and insert new FT_COMPONENT macro, you must
- register it in `fttrace.h'. If you insert or remove many trace
- macros, you can check the undefined or the unused trace macro by
- `src/tools/chktrcmp.py'.
+ The value of the `FT_COMPONENT' macro is one of the component
+ names defined in the internal file `internal/fttrace.h'. If you
+ modify the FreeType source code and insert a new `FT_COMPONENT'
+ macro, you must register it in `fttrace.h'. If you insert or
+ remove many trace macros, you can test for undefined or unused
+ trace macros with the script `src/tools/chktrcmp.py'.
- Each such component is assigned a `debug level', ranging from 0 to
- 7, through the use of the FT2_DEBUG environment variable
- (described below) when a program linked with FreeType starts.
+ Each such component is assigned a `debug level', ranging from
+ value 0 to 7, through the use of the `FT2_DEBUG' environment
+ variable (described below) when a program linked with FreeType
+ starts.
- When FT_TRACE is called, its level is compared to the one of the
+ When `FT_TRACE' is called, its level is compared to the one of the
corresponding component. Messages with trace levels *higher* than
- the corresponding component level are filtered and never printed.
+ the corresponding component level are filtered out and never
+ printed. This means that trace messages with level 0 are always
+ printed, those with level 2 are only printed when the component
+ level is *at least* 2, etc.
- This means that trace messages with level 0 are always printed,
- those with level 2 are only printed when the component level is
- *at least* 2.
-
- The second parameter to FT_TRACE must contain parentheses and
- correspond to a printf-like call, as in
+ The second parameter to `FT_TRACE' must contain parentheses and
+ corresponds to a printf-like call, as in
FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) )
- The shortcut macros FT_TRACE0, FT_TRACE1, FT_TRACE2, ...,
- FT_TRACE7 can be used with constant level indices, and are much
+ The shortcut macros `FT_TRACE0', `FT_TRACE1', `FT_TRACE2', ...,
+ `FT_TRACE7' can be used with constant level indices, and are much
cleaner to use, as in
FT_TRACE2(( "your %s is not %s\n", "foo", "bar" ));
@@ -131,7 +131,7 @@ behaviour of FreeType at runtime.
FT2_DEBUG
This variable is only used when FreeType is built with
- FT_DEBUG_LEVEL_TRACE defined. It contains a list of component
+ `FT_DEBUG_LEVEL_TRACE' defined. It contains a list of component
level definitions, following this format:
component1:level1 component2:level2 component3:level3 ...
@@ -140,57 +140,70 @@ behaviour of FreeType at runtime.
in `fttrace.h'. `levelX' is the corresponding level to use at
runtime.
- `any' is a special component name that will be interpreted as
- `any/all components'. For example, the following definitions
+ `any' is a special component name that is interpreted as `any/all
+ components'. For example, the following definitions
set FT2_DEBUG=any:2 memory:5 io:4 (on Windows)
export FT2_DEBUG="any:2 memory:5 io:4" (on Linux with bash)
both stipulate that all components should have level 2, except for
- the memory and io components which will be set to trace levels 5
+ the memory and io components, which are set to the trace levels 5
and 4, respectively.
FT2_DEBUG_MEMORY
This environment variable, when defined, tells FreeType to use a
- debugging memory manager that will track leaking memory blocks as
- well as other common errors like double frees. It is also capable
- of reporting _where_ the leaking blocks were allocated, which
+ debugging memory manager that tracks leaking memory blocks as well
+ as other common errors like double frees. It is also capable of
+ reporting _where_ the leaking blocks were allocated, which
considerably saves time when debugging new additions to the
library.
This code is only compiled when FreeType is built with the
- FT_DEBUG_MEMORY macro #defined in `ftoption.h' though, it will be
+ `FT_DEBUG_MEMORY' macro #defined in `ftoption.h' though, it is
ignored in other builds.
FT2_ALLOC_TOTAL_MAX
- This variable is ignored if FT2_DEBUG_MEMORY is not defined. It
+ This variable is ignored if `FT2_DEBUG_MEMORY' is not defined. It
allows you to specify a maximum heap size for all memory
allocations performed by FreeType. This is very useful to test
the robustness of the font engine and programs that use it in
tight memory conditions.
- If it is undefined, or if its value is not strictly positive, then
- no allocation bounds are checked at runtime.
+ If it is undefined, or if its value is not strictly positive, no
+ allocation bounds are checked at runtime.
FT2_ALLOC_COUNT_MAX
- This variable is ignored if FT2_DEBUG_MEMORY is not defined. It
+ This variable is ignored if `FT2_DEBUG_MEMORY' is not defined. It
allows you to specify a maximum number of memory allocations
performed by FreeType before returning the error
- FT_Err_Out_Of_Memory. This is useful for debugging and testing
+ `FT_Err_Out_Of_Memory'. This is useful for debugging and testing
the engine's robustness.
- If it is undefined, or if its value is not strictly positive, then
- no allocation bounds are checked at runtime.
+ If it is undefined, or if its value is not strictly positive, no
+ allocation bounds are checked at runtime.
+
+
+ FT2_KEEP_ALIVE
+
+ This variable is ignored if `FT2_DEBUG_MEMORY' is not defined.
+ `Keep alive' means that freed blocks aren't released to the heap.
+ This is useful to detect double-frees or weird heap corruption,
+ reporting the source code location of the original allocation and
+ deallocation in case of a problem. It uses large amounts of
+ memory, however.
+
+ If it is undefined, or if its value is not strictly positive,
+ freed blocks are released at runtime.
------------------------------------------------------------------------
-Copyright (C) 2002-2019 by
+Copyright (C) 2002-2020 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/docs/TODO b/src/3rdparty/freetype/docs/TODO
index 1efccc68eb..8b27e269a3 100644
--- a/src/3rdparty/freetype/docs/TODO
+++ b/src/3rdparty/freetype/docs/TODO
@@ -27,7 +27,7 @@ Other bugs have been registered at the savannah bugzilla of FreeType.
------------------------------------------------------------------------
-Copyright (C) 2001-2019 by
+Copyright (C) 2001-2020 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/config/ftconfig.h b/src/3rdparty/freetype/include/freetype/config/ftconfig.h
index 9466603377..b464e0b789 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftconfig.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftconfig.h
@@ -4,7 +4,7 @@
*
* ANSI-specific configuration file (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -41,533 +41,9 @@
#include FT_CONFIG_OPTIONS_H
#include FT_CONFIG_STANDARD_LIBRARY_H
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * PLATFORM-SPECIFIC CONFIGURATION MACROS
- *
- * These macros can be toggled to suit a specific system. The current ones
- * are defaults used to compile FreeType in an ANSI C environment (16bit
- * compilers are also supported). Copy this file to your own
- * `builds/<system>` directory, and edit it to port the engine.
- *
- */
-
-
- /* There are systems (like the Texas Instruments 'C54x) where a `char` */
- /* has 16~bits. ANSI~C says that `sizeof(char)` is always~1. Since an */
- /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which */
- /* is probably unexpected. */
- /* */
- /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a */
- /* `char` type. */
-
-#ifndef FT_CHAR_BIT
-#define FT_CHAR_BIT CHAR_BIT
-#endif
-
-
- /* The size of an `int` type. */
-#if FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT )
-#elif FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT ( 32 / FT_CHAR_BIT )
-#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_INT ( 64 / FT_CHAR_BIT )
-#else
-#error "Unsupported size of `int' type!"
-#endif
-
- /* The size of a `long` type. A five-byte `long` (as used e.g. on the */
- /* DM642) is recognized but avoided. */
-#if FT_ULONG_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT )
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
-#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT )
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT )
-#else
-#error "Unsupported size of `long' type!"
-#endif
-
-
- /* `FT_UNUSED` indicates that a given parameter is not used -- */
- /* this is only used to get rid of unpleasant compiler warnings. */
-#ifndef FT_UNUSED
-#define FT_UNUSED( arg ) ( (arg) = (arg) )
-#endif
-
-
- /**************************************************************************
- *
- * AUTOMATIC CONFIGURATION MACROS
- *
- * These macros are computed from the ones defined above. Don't touch
- * their definition, unless you know precisely what you are doing. No
- * porter should need to mess with them.
- *
- */
-
-
- /**************************************************************************
- *
- * Mac support
- *
- * This is the only necessary change, so it is defined here instead
- * providing a new configuration file.
- */
-#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
- /* No Carbon frameworks for 64bit 10.4.x. */
- /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */
- /* so guess the system version by maximum errno before inclusion. */
-#include <errno.h>
-#ifdef ECANCELED /* defined since 10.2 */
-#include "AvailabilityMacros.h"
-#endif
-#if defined( __LP64__ ) && \
- ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
-#undef FT_MACINTOSH
-#endif
-
-#elif defined( __SC__ ) || defined( __MRC__ )
- /* Classic MacOS compilers */
-#include "ConditionalMacros.h"
-#if TARGET_OS_MAC
-#define FT_MACINTOSH 1
-#endif
-
-#endif
-
-
- /* Fix compiler warning with sgi compiler. */
-#if defined( __sgi ) && !defined( __GNUC__ )
-#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
-#pragma set woff 3505
-#endif
-#endif
-
-
- /**************************************************************************
- *
- * @section:
- * basic_types
- *
- */
-
-
- /**************************************************************************
- *
- * @type:
- * FT_Int16
- *
- * @description:
- * A typedef for a 16bit signed integer type.
- */
- typedef signed short FT_Int16;
-
-
- /**************************************************************************
- *
- * @type:
- * FT_UInt16
- *
- * @description:
- * A typedef for a 16bit unsigned integer type.
- */
- typedef unsigned short FT_UInt16;
-
- /* */
-
-
- /* this #if 0 ... #endif clause is for documentation purposes */
-#if 0
-
- /**************************************************************************
- *
- * @type:
- * FT_Int32
- *
- * @description:
- * A typedef for a 32bit signed integer type. The size depends on the
- * configuration.
- */
- typedef signed XXX FT_Int32;
-
-
- /**************************************************************************
- *
- * @type:
- * FT_UInt32
- *
- * A typedef for a 32bit unsigned integer type. The size depends on the
- * configuration.
- */
- typedef unsigned XXX FT_UInt32;
-
-
- /**************************************************************************
- *
- * @type:
- * FT_Int64
- *
- * A typedef for a 64bit signed integer type. The size depends on the
- * configuration. Only defined if there is real 64bit support;
- * otherwise, it gets emulated with a structure (if necessary).
- */
- typedef signed XXX FT_Int64;
-
-
- /**************************************************************************
- *
- * @type:
- * FT_UInt64
- *
- * A typedef for a 64bit unsigned integer type. The size depends on the
- * configuration. Only defined if there is real 64bit support;
- * otherwise, it gets emulated with a structure (if necessary).
- */
- typedef unsigned XXX FT_UInt64;
-
- /* */
-
-#endif
-
-#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT )
-
- typedef signed int FT_Int32;
- typedef unsigned int FT_UInt32;
-
-#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT )
-
- typedef signed long FT_Int32;
- typedef unsigned long FT_UInt32;
-
-#else
-#error "no 32bit type found -- please check your configuration files"
-#endif
-
-
- /* look up an integer type that is at least 32~bits */
-#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT )
-
- typedef int FT_Fast;
- typedef unsigned int FT_UFast;
-
-#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT )
-
- typedef long FT_Fast;
- typedef unsigned long FT_UFast;
-
-#endif
-
-
- /* determine whether we have a 64-bit `int` type for platforms without */
- /* Autoconf */
-#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
-
- /* `FT_LONG64` must be defined if a 64-bit type is available */
-#define FT_LONG64
-#define FT_INT64 long
-#define FT_UINT64 unsigned long
-
- /**************************************************************************
- *
- * A 64-bit data type may create compilation problems if you compile in
- * strict ANSI mode. To avoid them, we disable other 64-bit data types if
- * `__STDC__` is defined. You can however ignore this rule by defining the
- * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
- */
-#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
-
- /* this compiler provides the `__int64` type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __BORLANDC__ ) /* Borland C++ */
-
- /* XXXX: We should probably check the value of `__BORLANDC__` in order */
- /* to test the compiler version. */
-
- /* this compiler provides the `__int64` type */
-#define FT_LONG64
-#define FT_INT64 __int64
-#define FT_UINT64 unsigned __int64
-
-#elif defined( __WATCOMC__ ) /* Watcom C++ */
-
- /* Watcom doesn't provide 64-bit data types */
-
-#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
-
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#elif defined( __GNUC__ )
-
- /* GCC provides the `long long` type */
-#define FT_LONG64
-#define FT_INT64 long long int
-#define FT_UINT64 unsigned long long int
-
-#endif /* __STDC_VERSION__ >= 199901L */
-
-#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
-
-#ifdef FT_LONG64
- typedef FT_INT64 FT_Int64;
- typedef FT_UINT64 FT_UInt64;
-#endif
-
-
-#ifdef _WIN64
- /* only 64bit Windows uses the LLP64 data model, i.e., */
- /* 32bit integers, 64bit pointers */
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
-#else
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
-#endif
-
-
- /**************************************************************************
- *
- * miscellaneous
- *
- */
-
-
-#define FT_BEGIN_STMNT do {
-#define FT_END_STMNT } while ( 0 )
-#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
-
-
- /* `typeof` condition taken from gnulib's `intprops.h` header file */
-#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
- ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
- defined( __IBM__TYPEOF__ ) ) || \
- ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
-#else
-#define FT_TYPEOF( type ) /* empty */
-#endif
-
-
- /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define, */
- /* respectively, a function that gets used only within the scope of a */
- /* module. Normally, both the header and source code files for such a */
- /* function are within a single module directory. */
- /* */
- /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and */
- /* `FT_LOCAL_ARRAY_DEF`. */
- /* */
-#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-
-#define FT_LOCAL( x ) static x
-#define FT_LOCAL_DEF( x ) static x
-
-#else
-
-#ifdef __cplusplus
-#define FT_LOCAL( x ) extern "C" x
-#define FT_LOCAL_DEF( x ) extern "C" x
-#else
-#define FT_LOCAL( x ) extern x
-#define FT_LOCAL_DEF( x ) x
-#endif
-
-#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
-
-#define FT_LOCAL_ARRAY( x ) extern const x
-#define FT_LOCAL_ARRAY_DEF( x ) const x
-
-
- /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */
- /* functions that are used in more than a single module. In the */
- /* current setup this implies that the declaration is in a header file */
- /* in the `include/freetype/internal` directory, and the function body */
- /* is in a file in `src/base`. */
- /* */
-#ifndef FT_BASE
-
-#ifdef __cplusplus
-#define FT_BASE( x ) extern "C" x
-#else
-#define FT_BASE( x ) extern x
-#endif
-
-#endif /* !FT_BASE */
-
-
-#ifndef FT_BASE_DEF
-
-#ifdef __cplusplus
-#define FT_BASE_DEF( x ) x
-#else
-#define FT_BASE_DEF( x ) x
-#endif
-
-#endif /* !FT_BASE_DEF */
-
-
- /* When compiling FreeType as a DLL or DSO with hidden visibility */
- /* some systems/compilers need a special attribute in front OR after */
- /* the return type of function declarations. */
- /* */
- /* Two macros are used within the FreeType source code to define */
- /* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`. */
- /* */
- /* - `FT_EXPORT( return_type )` */
- /* */
- /* is used in a function declaration, as in */
- /* */
- /* ``` */
- /* FT_EXPORT( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ); */
- /* ``` */
- /* */
- /* - `FT_EXPORT_DEF( return_type )` */
- /* */
- /* is used in a function definition, as in */
- /* */
- /* ``` */
- /* FT_EXPORT_DEF( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ) */
- /* { */
- /* ... some code ... */
- /* return FT_Err_Ok; */
- /* } */
- /* ``` */
- /* */
- /* You can provide your own implementation of `FT_EXPORT` and */
- /* `FT_EXPORT_DEF` here if you want. */
- /* */
- /* To export a variable, use `FT_EXPORT_VAR`. */
- /* */
-#ifndef FT_EXPORT
-
-#ifdef FT2_BUILD_LIBRARY
-
-#if defined( _WIN32 ) && defined( DLL_EXPORT )
-#define FT_EXPORT( x ) __declspec( dllexport ) x
-#elif defined( __GNUC__ ) && __GNUC__ >= 4
-#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x
-#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550
-#define FT_EXPORT( x ) __global x
-#elif defined( __cplusplus )
-#define FT_EXPORT( x ) extern "C" x
-#else
-#define FT_EXPORT( x ) extern x
-#endif
-
-#else
-
-#if defined( _WIN32 ) && defined( DLL_IMPORT )
-#define FT_EXPORT( x ) __declspec( dllimport ) x
-#elif defined( __cplusplus )
-#define FT_EXPORT( x ) extern "C" x
-#else
-#define FT_EXPORT( x ) extern x
-#endif
-
-#endif
-
-#endif /* !FT_EXPORT */
-
-
-#ifndef FT_EXPORT_DEF
-
-#ifdef __cplusplus
-#define FT_EXPORT_DEF( x ) extern "C" x
-#else
-#define FT_EXPORT_DEF( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_DEF */
-
-
-#ifndef FT_EXPORT_VAR
-
-#ifdef __cplusplus
-#define FT_EXPORT_VAR( x ) extern "C" x
-#else
-#define FT_EXPORT_VAR( x ) extern x
-#endif
-
-#endif /* !FT_EXPORT_VAR */
-
-
- /* The following macros are needed to compile the library with a */
- /* C++ compiler and with 16bit compilers. */
- /* */
-
- /* This is special. Within C++, you must specify `extern "C"` for */
- /* functions which are used via function pointers, and you also */
- /* must do that for structures which contain function pointers to */
- /* assure C linkage -- it's not possible to have (local) anonymous */
- /* functions which are accessed by (global) function pointers. */
- /* */
- /* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function, */
- /* located in the same source code file as the structure that uses */
- /* it. */
- /* */
- /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */
- /* and define a callback function, respectively, in a similar way */
- /* as FT_BASE and FT_BASE_DEF work. */
- /* */
- /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
- /* contains pointers to callback functions. */
- /* */
- /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
- /* that contains pointers to callback functions. */
- /* */
- /* */
- /* Some 16bit compilers have to redefine these macros to insert */
- /* the infamous `_cdecl` or `__fastcall` declarations. */
- /* */
-#ifndef FT_CALLBACK_DEF
-#ifdef __cplusplus
-#define FT_CALLBACK_DEF( x ) extern "C" x
-#else
-#define FT_CALLBACK_DEF( x ) static x
-#endif
-#endif /* FT_CALLBACK_DEF */
-
-#ifndef FT_BASE_CALLBACK
-#ifdef __cplusplus
-#define FT_BASE_CALLBACK( x ) extern "C" x
-#define FT_BASE_CALLBACK_DEF( x ) extern "C" x
-#else
-#define FT_BASE_CALLBACK( x ) extern x
-#define FT_BASE_CALLBACK_DEF( x ) x
-#endif
-#endif /* FT_BASE_CALLBACK */
-
-#ifndef FT_CALLBACK_TABLE
-#ifdef __cplusplus
-#define FT_CALLBACK_TABLE extern "C"
-#define FT_CALLBACK_TABLE_DEF extern "C"
-#else
-#define FT_CALLBACK_TABLE extern
-#define FT_CALLBACK_TABLE_DEF /* nothing */
-#endif
-#endif /* FT_CALLBACK_TABLE */
-
-
-FT_END_HEADER
-
+#include <freetype/config/integer-types.h>
+#include <freetype/config/public-macros.h>
+#include <freetype/config/mac-support.h>
#endif /* FTCONFIG_H_ */
diff --git a/src/3rdparty/freetype/include/freetype/config/ftheader.h b/src/3rdparty/freetype/include/freetype/config/ftheader.h
index 696d6ba906..28b5cc60cf 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftheader.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftheader.h
@@ -4,7 +4,7 @@
*
* Build macros of the FreeType 2 library.
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -30,10 +30,12 @@
/* encapsulated in an `extern "C" { .. }` block when included from a */
/* C++ compiler. */
/* */
-#ifdef __cplusplus
-#define FT_BEGIN_HEADER extern "C" {
-#else
-#define FT_BEGIN_HEADER /* nothing */
+#ifndef FT_BEGIN_HEADER
+# ifdef __cplusplus
+# define FT_BEGIN_HEADER extern "C" {
+# else
+# define FT_BEGIN_HEADER /* nothing */
+# endif
#endif
@@ -48,10 +50,12 @@
/* encapsulated in an `extern "C" { .. }` block when included from a */
/* C++ compiler. */
/* */
-#ifdef __cplusplus
-#define FT_END_HEADER }
-#else
-#define FT_END_HEADER /* nothing */
+#ifndef FT_END_HEADER
+# ifdef __cplusplus
+# define FT_END_HEADER }
+# else
+# define FT_END_HEADER /* nothing */
+# endif
#endif
@@ -73,9 +77,16 @@
* Macro definitions used to `#include` specific header files.
*
* @description:
- * The following macros are defined to the name of specific FreeType~2
- * header files. They can be used directly in `#include` statements as
- * in:
+ * In addition to the normal scheme of including header files like
+ *
+ * ```
+ * #include <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
@@ -83,13 +94,9 @@
* #include FT_GLYPH_H
* ```
*
- * There are several reasons why we are now using macros to name public
- * header files. The first one is that such macros are not limited to
- * the infamous 8.3~naming rule required by DOS (and
- * `FT_MULTIPLE_MASTERS_H` is a lot more meaningful than `ftmm.h`).
- *
- * The second reason is that it allows for more flexibility in the way
- * FreeType~2 is installed on a given system.
+ * These macros were introduced to overcome the infamous 8.3~naming rule
+ * required by DOS (and `FT_MULTIPLE_MASTERS_H` is a lot more meaningful
+ * than `ftmm.h`).
*
*/
@@ -797,16 +804,19 @@
#define FT_CACHE_INTERNAL_IMAGE_H FT_CACHE_H
#define FT_CACHE_INTERNAL_SBITS_H FT_CACHE_H
-
- /*
- * Include internal headers definitions from `<internal/...>` only when
- * building the library.
- */
+/* 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/src/3rdparty/freetype/include/freetype/config/ftmodule.h b/src/3rdparty/freetype/include/freetype/config/ftmodule.h
index 7c603e5327..b5c4b1ee58 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftmodule.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftmodule.h
@@ -25,8 +25,6 @@ FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
/* EOF */
diff --git a/src/3rdparty/freetype/include/freetype/config/ftoption.h b/src/3rdparty/freetype/include/freetype/config/ftoption.h
index 12f47a82e8..097f19b8a5 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftoption.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftoption.h
@@ -4,7 +4,7 @@
*
* User-selectable configuration macros (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -42,7 +42,7 @@ FT_BEGIN_HEADER
* the name of a directory that is included _before_ the FreeType include
* path during compilation.
*
- * The default FreeType Makefiles and Jamfiles use the build directory
+ * The default FreeType Makefiles use the build directory
* `builds/<system>` by default, but you can easily change that for your
* own projects.
*
@@ -121,10 +121,8 @@ FT_BEGIN_HEADER
* mitigate color fringes inherent to this technology, you also need to
* explicitly set up LCD filtering.
*
- * Note that this feature is covered by several Microsoft patents and
- * should not be activated in any default build of the library. When this
- * macro is not defined, FreeType offers alternative LCD rendering
- * technology that produces excellent output without LCD filtering.
+ * When this macro is not defined, FreeType offers alternative LCD
+ * rendering technology that produces excellent output.
*/
/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
@@ -294,6 +292,22 @@ FT_BEGIN_HEADER
/**************************************************************************
*
+ * 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
@@ -526,7 +540,7 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support coloured
+ * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored
* outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt'
* module (namely TrueType~& OpenType).
*/
@@ -871,9 +885,11 @@ FT_BEGIN_HEADER
*
* Compile 'autofit' module with fallback Indic script support, covering
* some scripts that the 'latin' submodule of the 'autofit' module doesn't
- * (yet) handle.
+ * (yet) handle. Currently, this needs option `AF_CONFIG_OPTION_CJK`.
*/
+#ifdef AF_CONFIG_OPTION_CJK
#define AF_CONFIG_OPTION_INDIC
+#endif
/**************************************************************************
diff --git a/src/3rdparty/freetype/include/freetype/config/ftstdlib.h b/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
index 438b6145d5..d6091f8b3d 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
@@ -5,7 +5,7 @@
* ANSI-specific library and header configuration file (specification
* only).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/config/integer-types.h b/src/3rdparty/freetype/include/freetype/config/integer-types.h
new file mode 100644
index 0000000000..a0ca0c95e2
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/integer-types.h
@@ -0,0 +1,245 @@
+/****************************************************************************
+ *
+ * config/integer-types.h
+ *
+ * FreeType integer types definitions.
+ *
+ * Copyright (C) 1996-2020 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+#ifndef FREETYPE_CONFIG_INTEGER_TYPES_H_
+#define FREETYPE_CONFIG_INTEGER_TYPES_H_
+
+ /* There are systems (like the Texas Instruments 'C54x) where a `char` */
+ /* has 16~bits. ANSI~C says that `sizeof(char)` is always~1. Since an */
+ /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which */
+ /* is probably unexpected. */
+ /* */
+ /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a */
+ /* `char` type. */
+
+#ifndef FT_CHAR_BIT
+#define FT_CHAR_BIT CHAR_BIT
+#endif
+
+#ifndef FT_SIZEOF_INT
+
+ /* The size of an `int` type. */
+#if FT_UINT_MAX == 0xFFFFUL
+#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT )
+#elif FT_UINT_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_INT ( 32 / FT_CHAR_BIT )
+#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_INT ( 64 / FT_CHAR_BIT )
+#else
+#error "Unsupported size of `int' type!"
+#endif
+
+#endif /* !defined(FT_SIZEOF_INT) */
+
+#ifndef FT_SIZEOF_LONG
+
+ /* The size of a `long` type. A five-byte `long` (as used e.g. on the */
+ /* DM642) is recognized but avoided. */
+#if FT_ULONG_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT )
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
+#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT )
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT )
+#else
+#error "Unsupported size of `long' type!"
+#endif
+
+#endif /* !defined(FT_SIZEOF_LONG) */
+
+ /**************************************************************************
+ *
+ * @section:
+ * basic_types
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Int16
+ *
+ * @description:
+ * A typedef for a 16bit signed integer type.
+ */
+ typedef signed short FT_Int16;
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt16
+ *
+ * @description:
+ * A typedef for a 16bit unsigned integer type.
+ */
+ typedef unsigned short FT_UInt16;
+
+ /* */
+
+
+ /* this #if 0 ... #endif clause is for documentation purposes */
+#if 0
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Int32
+ *
+ * @description:
+ * A typedef for a 32bit signed integer type. The size depends on the
+ * configuration.
+ */
+ typedef signed XXX FT_Int32;
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt32
+ *
+ * A typedef for a 32bit unsigned integer type. The size depends on the
+ * configuration.
+ */
+ typedef unsigned XXX FT_UInt32;
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_Int64
+ *
+ * A typedef for a 64bit signed integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
+ typedef signed XXX FT_Int64;
+
+
+ /**************************************************************************
+ *
+ * @type:
+ * FT_UInt64
+ *
+ * A typedef for a 64bit unsigned integer type. The size depends on the
+ * configuration. Only defined if there is real 64bit support;
+ * otherwise, it gets emulated with a structure (if necessary).
+ */
+ typedef unsigned XXX FT_UInt64;
+
+ /* */
+
+#endif
+
+#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT )
+
+ typedef signed int FT_Int32;
+ typedef unsigned int FT_UInt32;
+
+#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT )
+
+ typedef signed long FT_Int32;
+ typedef unsigned long FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+
+ /* look up an integer type that is at least 32~bits */
+#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT )
+
+ typedef int FT_Fast;
+ typedef unsigned int FT_UFast;
+
+#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT )
+
+ typedef long FT_Fast;
+ typedef unsigned long FT_UFast;
+
+#endif
+
+
+ /* determine whether we have a 64-bit `int` type for platforms without */
+ /* Autoconf */
+#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
+
+ /* `FT_LONG64` must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64 long
+#define FT_UINT64 unsigned long
+
+ /**************************************************************************
+ *
+ * A 64-bit data type may create compilation problems if you compile in
+ * strict ANSI mode. To avoid them, we disable other 64-bit data types if
+ * `__STDC__` is defined. You can however ignore this rule by defining the
+ * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
+ */
+#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
+
+#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
+
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+
+ /* this compiler provides the `__int64` type */
+#define FT_LONG64
+#define FT_INT64 __int64
+#define FT_UINT64 unsigned __int64
+
+#elif defined( __BORLANDC__ ) /* Borland C++ */
+
+ /* XXXX: We should probably check the value of `__BORLANDC__` in order */
+ /* to test the compiler version. */
+
+ /* this compiler provides the `__int64` type */
+#define FT_LONG64
+#define FT_INT64 __int64
+#define FT_UINT64 unsigned __int64
+
+#elif defined( __WATCOMC__ ) /* Watcom C++ */
+
+ /* Watcom doesn't provide 64-bit data types */
+
+#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
+
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
+#elif defined( __GNUC__ )
+
+ /* GCC provides the `long long` type */
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
+#endif /* __STDC_VERSION__ >= 199901L */
+
+#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
+
+#ifdef FT_LONG64
+ typedef FT_INT64 FT_Int64;
+ typedef FT_UINT64 FT_UInt64;
+#endif
+
+
+#endif /* FREETYPE_CONFIG_INTEGER_TYPES_H_ */
diff --git a/src/3rdparty/freetype/include/freetype/config/mac-support.h b/src/3rdparty/freetype/include/freetype/config/mac-support.h
new file mode 100644
index 0000000000..94867088e9
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/mac-support.h
@@ -0,0 +1,49 @@
+/****************************************************************************
+ *
+ * config/mac-support.h
+ *
+ * Mac/OS X support configuration header.
+ *
+ * Copyright (C) 1996-2020 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+#ifndef FREETYPE_CONFIG_MAC_SUPPORT_H_
+#define FREETYPE_CONFIG_MAC_SUPPORT_H_
+
+ /**************************************************************************
+ *
+ * Mac support
+ *
+ * This is the only necessary change, so it is defined here instead
+ * providing a new configuration file.
+ */
+#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
+ /* No Carbon frameworks for 64bit 10.4.x. */
+ /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */
+ /* so guess the system version by maximum errno before inclusion. */
+#include <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/src/3rdparty/freetype/include/freetype/config/public-macros.h b/src/3rdparty/freetype/include/freetype/config/public-macros.h
new file mode 100644
index 0000000000..6aa673e807
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/public-macros.h
@@ -0,0 +1,120 @@
+/****************************************************************************
+ *
+ * config/public-macros.h
+ *
+ * Define a set of compiler macros used in public FreeType headers.
+ *
+ * Copyright (C) 2020 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+ /*
+ * The definitions in this file are used by the public FreeType headers
+ * and thus should be considered part of the public API.
+ *
+ * Other compiler-specific macro definitions that are not exposed by the
+ * FreeType API should go into
+ * `include/freetype/internal/compiler-macros.h` instead.
+ */
+#ifndef FREETYPE_CONFIG_PUBLIC_MACROS_H_
+#define FREETYPE_CONFIG_PUBLIC_MACROS_H_
+
+ /*
+ * `FT_BEGIN_HEADER` and `FT_END_HEADER` might have already been defined
+ * by `freetype/config/ftheader.h`, but we don't want to include this
+ * header here, so redefine the macros here only when needed. Their
+ * definition is very stable, so keeping them in sync with the ones in the
+ * header should not be a maintenance issue.
+ */
+#ifndef FT_BEGIN_HEADER
+#ifdef __cplusplus
+#define FT_BEGIN_HEADER extern "C" {
+#else
+#define FT_BEGIN_HEADER /* empty */
+#endif
+#endif /* FT_BEGIN_HEADER */
+
+#ifndef FT_END_HEADER
+#ifdef __cplusplus
+#define FT_END_HEADER }
+#else
+#define FT_END_HEADER /* empty */
+#endif
+#endif /* FT_END_HEADER */
+
+
+FT_BEGIN_HEADER
+
+ /*
+ * Mark a function declaration as public. This ensures it will be
+ * properly exported to client code. Place this before a function
+ * declaration.
+ *
+ * NOTE: This macro should be considered an internal implementation
+ * detail, and not part of the FreeType API. It is only defined here
+ * because it is needed by `FT_EXPORT`.
+ */
+
+ /* Visual C, mingw */
+#if defined( _WIN32 )
+
+#if defined( FT2_BUILD_LIBRARY ) && defined( DLL_EXPORT )
+#define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllexport )
+#elif defined( DLL_IMPORT )
+#define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllimport )
+#endif
+
+ /* gcc, clang */
+#elif ( defined( __GNUC__ ) && __GNUC__ >= 4 ) || defined( __clang__ )
+#define FT_PUBLIC_FUNCTION_ATTRIBUTE \
+ __attribute__(( visibility( "default" ) ))
+
+ /* Sun */
+#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550
+#define FT_PUBLIC_FUNCTION_ATTRIBUTE __global
+#endif
+
+
+#ifndef FT_PUBLIC_FUNCTION_ATTRIBUTE
+#define FT_PUBLIC_FUNCTION_ATTRIBUTE /* empty */
+#endif
+
+
+ /*
+ * Define a public FreeType API function. This ensures it is properly
+ * exported or imported at build time. The macro parameter is the
+ * function's return type as in:
+ *
+ * FT_EXPORT( FT_Bool )
+ * FT_Object_Method( FT_Object obj,
+ * ... );
+ *
+ * NOTE: This requires that all `FT_EXPORT` uses are inside
+ * `FT_BEGIN_HEADER ... FT_END_HEADER` blocks. This guarantees that the
+ * functions are exported with C linkage, even when the header is included
+ * by a C++ source file.
+ */
+#define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x
+
+ /*
+ * `FT_UNUSED` indicates that a given parameter is not used -- this is
+ * only used to get rid of unpleasant compiler warnings.
+ *
+ * Technically, this was not meant to be part of the public API, but some
+ * third-party code depends on it.
+ */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg ) ( (arg) = (arg) )
+#endif
+
+
+FT_END_HEADER
+
+#endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */
diff --git a/src/3rdparty/freetype/include/freetype/freetype.h b/src/3rdparty/freetype/include/freetype/freetype.h
index a6bb667e3a..be191f5aa0 100644
--- a/src/3rdparty/freetype/include/freetype/freetype.h
+++ b/src/3rdparty/freetype/include/freetype/freetype.h
@@ -4,7 +4,7 @@
*
* FreeType high-level API and common types (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,19 +20,10 @@
#define FREETYPE_H_
-#ifndef FT_FREETYPE_H
-#error "`ft2build.h' hasn't been included yet!"
-#error "Please always use macros to include FreeType header files."
-#error "Example:"
-#error " #include <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
@@ -51,22 +42,15 @@ FT_BEGIN_HEADER
* How client applications should include FreeType header files.
*
* @description:
- * To be as flexible as possible (and for historical reasons), FreeType
- * uses a very special inclusion scheme to load header files, for example
+ * To be as flexible as possible (and for historical reasons), you must
+ * load file `ft2build.h` first before other header files, for example
*
* ```
* #include <ft2build.h>
*
- * #include FT_FREETYPE_H
- * #include FT_OUTLINE_H
+ * #include <freetype/freetype.h>
+ * #include <freetype/ftoutln.h>
* ```
- *
- * A compiler and its preprocessor only needs an include path to find the
- * file `ft2build.h`; the exact locations and names of the other FreeType
- * header files are hidden by @header_file_macros, loaded by
- * `ft2build.h`. The API documentation always gives the header macro
- * name needed for a particular function.
- *
*/
@@ -974,6 +958,9 @@ FT_BEGIN_HEADER
* Note that the bounding box might be off by (at least) one pixel for
* hinted fonts. See @FT_Size_Metrics for further discussion.
*
+ * Note that the bounding box does not vary in OpenType variable fonts
+ * and should only be used in relation to the default instance.
+ *
* units_per_EM ::
* The number of font units per EM square for this face. This is
* typically 2048 for TrueType fonts, and 1000 for Type~1 fonts. Only
@@ -1239,7 +1226,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_HAS_HORIZONTAL( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL ) )
/**************************************************************************
@@ -1253,7 +1240,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_HAS_VERTICAL( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_VERTICAL ) )
/**************************************************************************
@@ -1267,7 +1254,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_HAS_KERNING( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_KERNING )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_KERNING ) )
/**************************************************************************
@@ -1282,7 +1269,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_IS_SCALABLE( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_SCALABLE )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_SCALABLE ) )
/**************************************************************************
@@ -1301,7 +1288,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_IS_SFNT( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_SFNT )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_SFNT ) )
/**************************************************************************
@@ -1316,7 +1303,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_IS_FIXED_WIDTH( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) )
/**************************************************************************
@@ -1331,7 +1318,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_HAS_FIXED_SIZES( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES ) )
/**************************************************************************
@@ -1357,7 +1344,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_HAS_GLYPH_NAMES( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) )
/**************************************************************************
@@ -1372,7 +1359,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_HAS_MULTIPLE_MASTERS( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) )
/**************************************************************************
@@ -1394,7 +1381,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_IS_NAMED_INSTANCE( face ) \
- ( (face)->face_index & 0x7FFF0000L )
+ ( !!( (face)->face_index & 0x7FFF0000L ) )
/**************************************************************************
@@ -1412,7 +1399,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_IS_VARIATION( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_VARIATION )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_VARIATION ) )
/**************************************************************************
@@ -1429,7 +1416,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_IS_CID_KEYED( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_CID_KEYED ) )
/**************************************************************************
@@ -1443,7 +1430,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_IS_TRICKY( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_TRICKY )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_TRICKY ) )
/**************************************************************************
@@ -1460,7 +1447,7 @@ FT_BEGIN_HEADER
*
*/
#define FT_HAS_COLOR( face ) \
- ( (face)->face_flags & FT_FACE_FLAG_COLOR )
+ ( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) )
/**************************************************************************
@@ -2078,7 +2065,8 @@ FT_BEGIN_HEADER
* The size in bytes of the file in memory.
*
* pathname ::
- * A pointer to an 8-bit file pathname.
+ * A pointer to an 8-bit file pathname. The pointer is not owned by
+ * FreeType.
*
* stream ::
* A handle to a source stream object.
@@ -3187,6 +3175,12 @@ FT_BEGIN_HEADER
* A pointer to the translation vector. Use `NULL` for the null vector.
*
* @note:
+ * This function is provided as a convenience, but keep in mind that
+ * @FT_Matrix coefficients are only 16.16 fixed point values, which can
+ * limit the accuracy of the results. Using floating-point computations
+ * to perform the transform directly in client code instead will always
+ * yield better numbers.
+ *
* The transformation is only applied to scalable image formats after the
* glyph has been loaded. It means that hinting is unaltered by the
* transformation and is performed on the character size given in the
@@ -3245,14 +3239,6 @@ FT_BEGIN_HEADER
* pixels and use the @FT_PIXEL_MODE_LCD_V mode.
*
* @note:
- * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your
- * `ftoption.h`, which enables patented ClearType-style rendering, the
- * LCD-optimized glyph bitmaps should be filtered to reduce color fringes
- * inherent to this technology. You can either set up LCD filtering with
- * @FT_Library_SetLcdFilter or @FT_Face_Properties, or do the filtering
- * yourself. The default FreeType LCD rendering technology does not
- * require filtering.
- *
* The selected render mode only affects vector glyphs of a font.
* Embedded bitmaps often have a different pixel mode like
* @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform them
@@ -4088,7 +4074,7 @@ FT_BEGIN_HEADER
* https://docs.microsoft.com/en-us/typography/opentype/spec/colr
*
* The glyph layer data for a given glyph index, if present, provides an
- * alternative, multi-colour glyph representation: Instead of rendering
+ * alternative, multi-color glyph representation: Instead of rendering
* the outline or bitmap with the given glyph index, glyphs with the
* indices and colors returned by this function are rendered layer by
* layer.
@@ -4781,7 +4767,7 @@ FT_BEGIN_HEADER
*/
#define FREETYPE_MAJOR 2
#define FREETYPE_MINOR 10
-#define FREETYPE_PATCH 1
+#define FREETYPE_PATCH 4
/**************************************************************************
diff --git a/src/3rdparty/freetype/include/freetype/ftadvanc.h b/src/3rdparty/freetype/include/freetype/ftadvanc.h
index 95c38f92bd..f166bc6f99 100644
--- a/src/3rdparty/freetype/include/freetype/ftadvanc.h
+++ b/src/3rdparty/freetype/include/freetype/ftadvanc.h
@@ -4,7 +4,7 @@
*
* Quick computation of advance widths (specification only).
*
- * Copyright (C) 2008-2019 by
+ * Copyright (C) 2008-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTADVANC_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -96,6 +95,7 @@ FT_BEGIN_HEADER
* load_flags ::
* A set of bit flags similar to those used when calling
* @FT_Load_Glyph, used to determine what kind of advances you need.
+ *
* @output:
* padvance ::
* The advance value. If scaling is performed (based on the value of
diff --git a/src/3rdparty/freetype/include/freetype/ftautoh.h b/src/3rdparty/freetype/include/freetype/ftautoh.h
deleted file mode 100644
index ab39c21995..0000000000
--- a/src/3rdparty/freetype/include/freetype/ftautoh.h
+++ /dev/null
@@ -1,450 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftautoh.h */
-/* */
-/* FreeType API for controlling the auto-hinter (specification only). */
-/* */
-/* Copyright 2012-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. 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.
- *
- */
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FTAUTOH_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftbbox.h b/src/3rdparty/freetype/include/freetype/ftbbox.h
index 22da70c0dc..fda1ad94a5 100644
--- a/src/3rdparty/freetype/include/freetype/ftbbox.h
+++ b/src/3rdparty/freetype/include/freetype/ftbbox.h
@@ -4,7 +4,7 @@
*
* FreeType exact bbox computation (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -31,8 +31,7 @@
#define FTBBOX_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftbdf.h b/src/3rdparty/freetype/include/freetype/ftbdf.h
index 1c46da5985..2e1daeeaaf 100644
--- a/src/3rdparty/freetype/include/freetype/ftbdf.h
+++ b/src/3rdparty/freetype/include/freetype/ftbdf.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing BDF-specific strings (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTBDF_H_
#define FTBDF_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftbitmap.h b/src/3rdparty/freetype/include/freetype/ftbitmap.h
index a6acdb9690..282c22e1cf 100644
--- a/src/3rdparty/freetype/include/freetype/ftbitmap.h
+++ b/src/3rdparty/freetype/include/freetype/ftbitmap.h
@@ -4,7 +4,7 @@
*
* FreeType utility functions for bitmaps (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define FTBITMAP_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_COLOR_H
+#include <freetype/freetype.h>
+#include <freetype/ftcolor.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftbzip2.h b/src/3rdparty/freetype/include/freetype/ftbzip2.h
index ae88cfdbdb..eb6a5a55d1 100644
--- a/src/3rdparty/freetype/include/freetype/ftbzip2.h
+++ b/src/3rdparty/freetype/include/freetype/ftbzip2.h
@@ -4,7 +4,7 @@
*
* Bzip2-compressed stream support.
*
- * Copyright (C) 2010-2019 by
+ * Copyright (C) 2010-2020 by
* Joel Klinghed.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTBZIP2_H_
#define FTBZIP2_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -43,6 +42,16 @@ FT_BEGIN_HEADER
* Using bzip2-compressed font files.
*
* @description:
+ * In certain builds of the library, bzip2 compression recognition is
+ * automatically handled when calling @FT_New_Face or @FT_Open_Face.
+ * This means that if no font driver is capable of handling the raw
+ * compressed file, the library will try to open a bzip2 compressed
+ * stream from it and re-open the face with it.
+ *
+ * The stream implementation is very basic and resets the decompression
+ * process each time seeking backwards is needed within the stream,
+ * which significantly undermines the performance.
+ *
* This section contains the declaration of Bzip2-specific functions.
*
*/
@@ -75,15 +84,6 @@ FT_BEGIN_HEADER
* **not** call `FT_Stream_Close` on the source stream. None of the
* stream objects will be released to the heap.
*
- * The stream implementation is very basic and resets the decompression
- * process each time seeking backwards is needed within the stream.
- *
- * In certain builds of the library, bzip2 compression recognition is
- * automatically handled when calling @FT_New_Face or @FT_Open_Face.
- * This means that if no font driver is capable of handling the raw
- * compressed file, the library will try to open a bzip2 compressed
- * stream from it and re-open the face with it.
- *
* This function may return `FT_Err_Unimplemented_Feature` if your build
* of FreeType was not compiled with bzip2 support.
*/
diff --git a/src/3rdparty/freetype/include/freetype/ftcache.h b/src/3rdparty/freetype/include/freetype/ftcache.h
index 0d589d0b34..6047275205 100644
--- a/src/3rdparty/freetype/include/freetype/ftcache.h
+++ b/src/3rdparty/freetype/include/freetype/ftcache.h
@@ -4,7 +4,7 @@
*
* FreeType Cache subsystem (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTCACHE_H_
-#include <ft2build.h>
-#include FT_GLYPH_H
+#include <freetype/ftglyph.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/ftcffdrv.h b/src/3rdparty/freetype/include/freetype/ftcffdrv.h
deleted file mode 100644
index 6c8e416cee..0000000000
--- a/src/3rdparty/freetype/include/freetype/ftcffdrv.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcffdrv.h */
-/* */
-/* FreeType API for controlling the CFF driver (specification only). */
-/* */
-/* Copyright 2013-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. 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
- * darkening-parameters
- *
- */
-
-
- /**************************************************************************
- *
- * @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
- *
- * @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
- *
- * @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/src/3rdparty/freetype/include/freetype/ftcid.h b/src/3rdparty/freetype/include/freetype/ftcid.h
index 8eafc1c78f..a29fb33306 100644
--- a/src/3rdparty/freetype/include/freetype/ftcid.h
+++ b/src/3rdparty/freetype/include/freetype/ftcid.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing CID font information (specification).
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* Dereg Clegg and Michael Toftdal.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTCID_H_
#define FTCID_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftcolor.h b/src/3rdparty/freetype/include/freetype/ftcolor.h
index cf18021953..ecc6485e5a 100644
--- a/src/3rdparty/freetype/include/freetype/ftcolor.h
+++ b/src/3rdparty/freetype/include/freetype/ftcolor.h
@@ -4,7 +4,7 @@
*
* FreeType's glyph color management (specification).
*
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTCOLOR_H_
#define FTCOLOR_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -125,9 +124,9 @@ FT_BEGIN_HEADER
* The number of palettes.
*
* palette_name_ids ::
- * A read-only array of palette name IDs with `num_palettes` elements,
- * corresponding to entries like 'dark' or 'light' in the font's 'name'
- * table.
+ * An optional read-only array of palette name IDs with `num_palettes`
+ * elements, corresponding to entries like 'dark' or 'light' in the
+ * font's 'name' table.
*
* An empty name ID in the 'CPAL' table gets represented as value
* 0xFFFF.
@@ -135,8 +134,8 @@ FT_BEGIN_HEADER
* `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
*
* palette_flags ::
- * A read-only array of palette flags with `num_palettes` elements.
- * Possible values are an ORed combination of
+ * An optional read-only array of palette flags with `num_palettes`
+ * elements. Possible values are an ORed combination of
* @FT_PALETTE_FOR_LIGHT_BACKGROUND and
* @FT_PALETTE_FOR_DARK_BACKGROUND.
*
@@ -147,7 +146,7 @@ FT_BEGIN_HEADER
* same size.
*
* palette_entry_name_ids ::
- * A read-only array of palette entry name IDs with
+ * An optional read-only array of palette entry name IDs with
* `num_palette_entries`. In each palette, entries with the same index
* have the same function. For example, index~0 might correspond to
* string 'outline' in the font's 'name' table to indicate that this
@@ -163,6 +162,9 @@ FT_BEGIN_HEADER
* Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to
* name strings.
*
+ * Use function @FT_Palette_Select to get the colors associated with a
+ * palette entry.
+ *
* @since:
* 2.10
*/
diff --git a/src/3rdparty/freetype/include/freetype/ftdriver.h b/src/3rdparty/freetype/include/freetype/ftdriver.h
index 497bde9f6e..804ec34a39 100644
--- a/src/3rdparty/freetype/include/freetype/ftdriver.h
+++ b/src/3rdparty/freetype/include/freetype/ftdriver.h
@@ -4,7 +4,7 @@
*
* FreeType API for controlling driver modules (specification only).
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,9 +19,8 @@
#ifndef FTDRIVER_H_
#define FTDRIVER_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
+#include <freetype/freetype.h>
+#include <freetype/ftparams.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -427,10 +426,6 @@ FT_BEGIN_HEADER
* counteracts the 'thinning out' of glyphs, making text remain readable
* at smaller sizes.
*
- * By default, the Adobe engines for CFF, Type~1, and CID fonts darken
- * stems at smaller sizes, regardless of hinting, to enhance contrast.
- * Setting this property, stem darkening gets switched off.
- *
* For the auto-hinter, stem-darkening is experimental currently and thus
* switched off by default (this is, `no-stem-darkening` is set to TRUE
* by default). Total consistency with the CFF driver is not achieved
diff --git a/src/3rdparty/freetype/include/freetype/fterrdef.h b/src/3rdparty/freetype/include/freetype/fterrdef.h
index 9bc7dc65e3..895d2d4dc8 100644
--- a/src/3rdparty/freetype/include/freetype/fterrdef.h
+++ b/src/3rdparty/freetype/include/freetype/fterrdef.h
@@ -4,7 +4,7 @@
*
* FreeType error codes (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/fterrors.h b/src/3rdparty/freetype/include/freetype/fterrors.h
index 2b47eb2096..60a637c77c 100644
--- a/src/3rdparty/freetype/include/freetype/fterrors.h
+++ b/src/3rdparty/freetype/include/freetype/fterrors.h
@@ -4,7 +4,7 @@
*
* FreeType error code handling (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -89,7 +89,7 @@
* const char* err_msg;
* } ft_errors[] =
*
- * #include FT_ERRORS_H
+ * #include <freetype/fterrors.h>
* ```
*
* An alternative to using an array is a switch statement.
@@ -124,7 +124,7 @@
/* include module base error codes */
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
/*******************************************************************/
@@ -197,7 +197,7 @@
/* now include the error codes */
-#include FT_ERROR_DEFINITIONS_H
+#include <freetype/fterrdef.h>
#ifdef FT_ERROR_END_LIST
@@ -232,11 +232,16 @@
#undef FT_ERR_PREFIX
#endif
- /* FT_INCLUDE_ERR_PROTOS: Control if function prototypes should be */
- /* included with `#include FT_ERRORS_H'. This is */
- /* only true where `FT_ERRORDEF` is undefined. */
- /* FT_ERR_PROTOS_DEFINED: Actual multiple-inclusion protection of */
- /* `fterrors.h`. */
+ /* FT_INCLUDE_ERR_PROTOS: Control whether function prototypes should be */
+ /* included with */
+ /* */
+ /* #include <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
diff --git a/src/3rdparty/freetype/include/freetype/ftfntfmt.h b/src/3rdparty/freetype/include/freetype/ftfntfmt.h
index aae0b13264..f803349cd7 100644
--- a/src/3rdparty/freetype/include/freetype/ftfntfmt.h
+++ b/src/3rdparty/freetype/include/freetype/ftfntfmt.h
@@ -4,7 +4,7 @@
*
* Support functions for font formats.
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTFNTFMT_H_
#define FTFNTFMT_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftgasp.h b/src/3rdparty/freetype/include/freetype/ftgasp.h
index 24673d8ce1..6b76882c74 100644
--- a/src/3rdparty/freetype/include/freetype/ftgasp.h
+++ b/src/3rdparty/freetype/include/freetype/ftgasp.h
@@ -4,7 +4,7 @@
*
* Access of TrueType's 'gasp' table (specification).
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTGASP_H_
#define FTGASP_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftglyph.h b/src/3rdparty/freetype/include/freetype/ftglyph.h
index fedab8491e..704619e3d0 100644
--- a/src/3rdparty/freetype/include/freetype/ftglyph.h
+++ b/src/3rdparty/freetype/include/freetype/ftglyph.h
@@ -4,7 +4,7 @@
*
* FreeType convenience functions to handle glyphs (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -33,8 +33,7 @@
#define FTGLYPH_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftgxval.h b/src/3rdparty/freetype/include/freetype/ftgxval.h
index b14f637c56..354460a9a7 100644
--- a/src/3rdparty/freetype/include/freetype/ftgxval.h
+++ b/src/3rdparty/freetype/include/freetype/ftgxval.h
@@ -4,7 +4,7 @@
*
* FreeType API for validating TrueTypeGX/AAT tables (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* Masatake YAMATO, Redhat K.K,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -28,8 +28,7 @@
#ifndef FTGXVAL_H_
#define FTGXVAL_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftgzip.h b/src/3rdparty/freetype/include/freetype/ftgzip.h
index 418c61228e..ec5939a191 100644
--- a/src/3rdparty/freetype/include/freetype/ftgzip.h
+++ b/src/3rdparty/freetype/include/freetype/ftgzip.h
@@ -4,7 +4,7 @@
*
* Gzip-compressed stream support.
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTGZIP_H_
#define FTGZIP_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -43,6 +42,16 @@ FT_BEGIN_HEADER
* Using gzip-compressed font files.
*
* @description:
+ * In certain builds of the library, gzip compression recognition is
+ * automatically handled when calling @FT_New_Face or @FT_Open_Face.
+ * This means that if no font driver is capable of handling the raw
+ * compressed file, the library will try to open a gzipped stream from it
+ * and re-open the face with it.
+ *
+ * The stream implementation is very basic and resets the decompression
+ * process each time seeking backwards is needed within the stream,
+ * which significantly undermines the performance.
+ *
* This section contains the declaration of Gzip-specific functions.
*
*/
@@ -75,15 +84,6 @@ FT_BEGIN_HEADER
* **not** call `FT_Stream_Close` on the source stream. None of the
* stream objects will be released to the heap.
*
- * The stream implementation is very basic and resets the decompression
- * process each time seeking backwards is needed within the stream.
- *
- * In certain builds of the library, gzip compression recognition is
- * automatically handled when calling @FT_New_Face or @FT_Open_Face.
- * This means that if no font driver is capable of handling the raw
- * compressed file, the library will try to open a gzipped stream from it
- * and re-open the face with it.
- *
* This function may return `FT_Err_Unimplemented_Feature` if your build
* of FreeType was not compiled with zlib support.
*/
diff --git a/src/3rdparty/freetype/include/freetype/ftimage.h b/src/3rdparty/freetype/include/freetype/ftimage.h
index face34fe49..74911620d2 100644
--- a/src/3rdparty/freetype/include/freetype/ftimage.h
+++ b/src/3rdparty/freetype/include/freetype/ftimage.h
@@ -5,7 +5,7 @@
* FreeType glyph image formats and default raster interface
* (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -30,7 +30,6 @@
/* STANDALONE_ is from ftgrays.c */
#ifndef STANDALONE_
-#include <ft2build.h>
#endif
@@ -401,6 +400,13 @@ FT_BEGIN_HEADER
* if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more
* information.
*
+ * FT_OUTLINE_OVERLAP ::
+ * This flag indicates that this outline contains overlapping contrours
+ * and the anti-aliased renderer should perform oversampling to
+ * mitigate possible artifacts. This flag should _not_ be set for
+ * well designed glyphs without overlaps because it quadruples the
+ * rendering time.
+ *
* FT_OUTLINE_HIGH_PRECISION ::
* This flag indicates that the scan-line converter should try to
* convert this outline to bitmaps with the highest possible quality.
@@ -432,6 +438,7 @@ FT_BEGIN_HEADER
#define FT_OUTLINE_IGNORE_DROPOUTS 0x8
#define FT_OUTLINE_SMART_DROPOUTS 0x10
#define FT_OUTLINE_INCLUDE_STUBS 0x20
+#define FT_OUTLINE_OVERLAP 0x40
#define FT_OUTLINE_HIGH_PRECISION 0x100
#define FT_OUTLINE_SINGLE_PASS 0x200
@@ -1004,20 +1011,26 @@ FT_BEGIN_HEADER
* User-supplied data that is passed to each drawing callback.
*
* clip_box ::
- * An optional clipping box. It is only used in direct rendering mode.
- * Note that coordinates here should be expressed in _integer_ pixels
- * (and not in 26.6 fixed-point units).
+ * An optional span clipping box expressed in _integer_ pixels
+ * (not in 26.6 fixed-point units).
*
* @note:
- * An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA bit
- * flag is set in the `flags` field, otherwise a monochrome bitmap is
- * generated.
- *
- * 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.
+ * 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_
{
diff --git a/src/3rdparty/freetype/include/freetype/ftincrem.h b/src/3rdparty/freetype/include/freetype/ftincrem.h
index a4db02b585..f67655eda0 100644
--- a/src/3rdparty/freetype/include/freetype/ftincrem.h
+++ b/src/3rdparty/freetype/include/freetype/ftincrem.h
@@ -4,7 +4,7 @@
*
* FreeType incremental loading (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,9 +19,8 @@
#ifndef FTINCREM_H_
#define FTINCREM_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
+#include <freetype/freetype.h>
+#include <freetype/ftparams.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftlcdfil.h b/src/3rdparty/freetype/include/freetype/ftlcdfil.h
index 3a19d043bb..c6995f2ff7 100644
--- a/src/3rdparty/freetype/include/freetype/ftlcdfil.h
+++ b/src/3rdparty/freetype/include/freetype/ftlcdfil.h
@@ -5,7 +5,7 @@
* FreeType API for color filtering of subpixel bitmap glyphs
* (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#ifndef FTLCDFIL_H_
#define FTLCDFIL_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
+#include <freetype/freetype.h>
+#include <freetype/ftparams.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -47,7 +46,7 @@ FT_BEGIN_HEADER
* @description:
* FreeType provides two alternative subpixel rendering technologies.
* Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your
- * `ftoption.h` file, this enables patented ClearType-style rendering.
+ * `ftoption.h` file, this enables ClearType-style rendering.
* Otherwise, Harmony LCD rendering is enabled. These technologies are
* controlled differently and API described below, although always
* available, performs its function when appropriate method is enabled
@@ -177,7 +176,7 @@ FT_BEGIN_HEADER
* FT_Library_SetLcdFilter
*
* @description:
- * This function is used to apply color filtering to LCD decimated
+ * This function is used to change filter applied to LCD decimated
* bitmaps, like the ones used when calling @FT_Render_Glyph with
* @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
*
@@ -196,15 +195,14 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success.
*
* @note:
- * This feature is always disabled by default. Clients must make an
- * explicit call to this function with a `filter` value other than
- * @FT_LCD_FILTER_NONE in order to enable it.
+ * Since 2.10.3 the LCD filtering is enabled with @FT_LCD_FILTER_DEFAULT.
+ * It is no longer necessary to call this function explicitly except
+ * to choose a different filter or disable filtering altogether with
+ * @FT_LCD_FILTER_NONE.
*
- * Due to **PATENTS** covering subpixel rendering, this function doesn't
- * do anything except returning `FT_Err_Unimplemented_Feature` if the
- * configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is not
- * defined in your build of the library, which should correspond to all
- * default builds of FreeType.
+ * This function does nothing but returns `FT_Err_Unimplemented_Feature`
+ * if the configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is
+ * not defined in your build of the library.
*
* @since:
* 2.3.0
@@ -235,11 +233,9 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success.
*
* @note:
- * Due to **PATENTS** covering subpixel rendering, this function doesn't
- * do anything except returning `FT_Err_Unimplemented_Feature` if the
- * configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is not
- * defined in your build of the library, which should correspond to all
- * default builds of FreeType.
+ * This function does nothing but returns `FT_Err_Unimplemented_Feature`
+ * if the configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is
+ * not defined in your build of the library.
*
* LCD filter weights can also be set per face using @FT_Face_Properties
* with @FT_PARAM_TAG_LCD_FILTER_WEIGHTS.
diff --git a/src/3rdparty/freetype/include/freetype/ftlist.h b/src/3rdparty/freetype/include/freetype/ftlist.h
index 4782892d1a..4588922706 100644
--- a/src/3rdparty/freetype/include/freetype/ftlist.h
+++ b/src/3rdparty/freetype/include/freetype/ftlist.h
@@ -4,7 +4,7 @@
*
* Generic list support for FreeType (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -28,8 +28,7 @@
#define FTLIST_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftlzw.h b/src/3rdparty/freetype/include/freetype/ftlzw.h
index fd22968f5a..ae46ad6021 100644
--- a/src/3rdparty/freetype/include/freetype/ftlzw.h
+++ b/src/3rdparty/freetype/include/freetype/ftlzw.h
@@ -4,7 +4,7 @@
*
* LZW-compressed stream support.
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTLZW_H_
#define FTLZW_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -43,6 +42,16 @@ FT_BEGIN_HEADER
* Using LZW-compressed font files.
*
* @description:
+ * In certain builds of the library, LZW compression recognition is
+ * automatically handled when calling @FT_New_Face or @FT_Open_Face.
+ * This means that if no font driver is capable of handling the raw
+ * compressed file, the library will try to open a LZW stream from it and
+ * re-open the face with it.
+ *
+ * The stream implementation is very basic and resets the decompression
+ * process each time seeking backwards is needed within the stream,
+ * which significantly undermines the performance.
+ *
* This section contains the declaration of LZW-specific functions.
*
*/
@@ -73,15 +82,6 @@ FT_BEGIN_HEADER
* **not** call `FT_Stream_Close` on the source stream. None of the
* stream objects will be released to the heap.
*
- * The stream implementation is very basic and resets the decompression
- * process each time seeking backwards is needed within the stream
- *
- * In certain builds of the library, LZW compression recognition is
- * automatically handled when calling @FT_New_Face or @FT_Open_Face.
- * This means that if no font driver is capable of handling the raw
- * compressed file, the library will try to open a LZW stream from it and
- * re-open the face with it.
- *
* This function may return `FT_Err_Unimplemented_Feature` if your build
* of FreeType was not compiled with LZW support.
*/
diff --git a/src/3rdparty/freetype/include/freetype/ftmac.h b/src/3rdparty/freetype/include/freetype/ftmac.h
index 92b9f3dc0f..c9de981845 100644
--- a/src/3rdparty/freetype/include/freetype/ftmac.h
+++ b/src/3rdparty/freetype/include/freetype/ftmac.h
@@ -4,7 +4,7 @@
*
* Additional Mac-specific API.
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -29,7 +29,6 @@
#define FTMAC_H_
-#include <ft2build.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/ftmm.h b/src/3rdparty/freetype/include/freetype/ftmm.h
index f2e16b6408..d8781a8296 100644
--- a/src/3rdparty/freetype/include/freetype/ftmm.h
+++ b/src/3rdparty/freetype/include/freetype/ftmm.h
@@ -4,7 +4,7 @@
*
* FreeType Multiple Master font interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTMM_H_
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
+#include <freetype/t1tables.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/ftmodapi.h b/src/3rdparty/freetype/include/freetype/ftmodapi.h
index 8d039c4f3a..3f7ae82bab 100644
--- a/src/3rdparty/freetype/include/freetype/ftmodapi.h
+++ b/src/3rdparty/freetype/include/freetype/ftmodapi.h
@@ -4,7 +4,7 @@
*
* FreeType modules public interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTMODAPI_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -65,7 +64,7 @@ FT_BEGIN_HEADER
* psnames
* raster1
* sfnt
- * smooth, smooth-lcd, smooth-lcdv
+ * smooth
* truetype
* type1
* type42
@@ -486,7 +485,7 @@ FT_BEGIN_HEADER
*
* ```
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
- * cff:no-stem-darkening=1 \
+ * cff:no-stem-darkening=0 \
* autofitter:warping=1
* ```
*
diff --git a/src/3rdparty/freetype/include/freetype/ftmoderr.h b/src/3rdparty/freetype/include/freetype/ftmoderr.h
index e16993572c..f05fc53aa3 100644
--- a/src/3rdparty/freetype/include/freetype/ftmoderr.h
+++ b/src/3rdparty/freetype/include/freetype/ftmoderr.h
@@ -4,7 +4,7 @@
*
* FreeType module error offsets (specification).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -94,7 +94,7 @@
* const char* mod_err_msg
* } ft_mod_errors[] =
*
- * #include FT_MODULE_ERRORS_H
+ * #include <freetype/ftmoderr.h>
* ```
*
*/
diff --git a/src/3rdparty/freetype/include/freetype/ftotval.h b/src/3rdparty/freetype/include/freetype/ftotval.h
index c034f48959..9c00ad30b9 100644
--- a/src/3rdparty/freetype/include/freetype/ftotval.h
+++ b/src/3rdparty/freetype/include/freetype/ftotval.h
@@ -4,7 +4,7 @@
*
* FreeType API for validating OpenType tables (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -30,8 +30,7 @@
#ifndef FTOTVAL_H_
#define FTOTVAL_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftoutln.h b/src/3rdparty/freetype/include/freetype/ftoutln.h
index b72327b703..84e9b144c1 100644
--- a/src/3rdparty/freetype/include/freetype/ftoutln.h
+++ b/src/3rdparty/freetype/include/freetype/ftoutln.h
@@ -5,7 +5,7 @@
* Support for the FT_Outline type used to store glyph shapes of
* most scalable font formats (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,8 +21,7 @@
#define FTOUTLN_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -483,19 +482,13 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success.
*
* @note:
- * This advanced function uses @FT_Raster_Params as an argument,
- * allowing FreeType rasterizer to be used for direct composition,
- * translucency, etc. You should know how to set up @FT_Raster_Params
- * for this function to work.
- *
+ * This advanced function uses @FT_Raster_Params as an argument.
* The field `params.source` will be set to `outline` before the scan
* converter is called, which means that the value you give to it is
- * actually ignored.
- *
- * The gray-level rasterizer always uses 256 gray levels. If you want
- * less gray levels, you have to provide your own span callback. See the
- * @FT_RASTER_FLAG_DIRECT value of the `flags` field in the
- * @FT_Raster_Params structure for more details.
+ * actually ignored. Either `params.target` must point to preallocated
+ * bitmap, or @FT_RASTER_FLAG_DIRECT must be set in `params.flags`
+ * allowing FreeType rasterizer to be used for direct composition,
+ * translucency, etc. See @FT_Raster_Params for more details.
*/
FT_EXPORT( FT_Error )
FT_Outline_Render( FT_Library library,
diff --git a/src/3rdparty/freetype/include/freetype/ftparams.h b/src/3rdparty/freetype/include/freetype/ftparams.h
index c374ee2f2f..55ea2a3870 100644
--- a/src/3rdparty/freetype/include/freetype/ftparams.h
+++ b/src/3rdparty/freetype/include/freetype/ftparams.h
@@ -4,7 +4,7 @@
*
* FreeType API for possible FT_Parameter tags (specification only).
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTPARAMS_H_
#define FTPARAMS_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftpfr.h b/src/3rdparty/freetype/include/freetype/ftpfr.h
index b4eca76eb7..9a5383f918 100644
--- a/src/3rdparty/freetype/include/freetype/ftpfr.h
+++ b/src/3rdparty/freetype/include/freetype/ftpfr.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing PFR-specific data (specification only).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTPFR_H_
#define FTPFR_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftrender.h b/src/3rdparty/freetype/include/freetype/ftrender.h
index a01c774272..8007951b37 100644
--- a/src/3rdparty/freetype/include/freetype/ftrender.h
+++ b/src/3rdparty/freetype/include/freetype/ftrender.h
@@ -4,7 +4,7 @@
*
* FreeType renderer modules public interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define FTRENDER_H_
-#include <ft2build.h>
-#include FT_MODULE_H
-#include FT_GLYPH_H
+#include <freetype/ftmodapi.h>
+#include <freetype/ftglyph.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/ftsizes.h b/src/3rdparty/freetype/include/freetype/ftsizes.h
index 6c63cef2bf..a8682a30fb 100644
--- a/src/3rdparty/freetype/include/freetype/ftsizes.h
+++ b/src/3rdparty/freetype/include/freetype/ftsizes.h
@@ -4,7 +4,7 @@
*
* FreeType size objects management (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -29,8 +29,7 @@
#define FTSIZES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftsnames.h b/src/3rdparty/freetype/include/freetype/ftsnames.h
index 4d43602a42..729e6ab069 100644
--- a/src/3rdparty/freetype/include/freetype/ftsnames.h
+++ b/src/3rdparty/freetype/include/freetype/ftsnames.h
@@ -7,7 +7,7 @@
*
* This is _not_ used to retrieve glyph names!
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -23,9 +23,8 @@
#define FTSNAMES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
+#include <freetype/freetype.h>
+#include <freetype/ftparams.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftstroke.h b/src/3rdparty/freetype/include/freetype/ftstroke.h
index 01a9c1811c..a759c94dde 100644
--- a/src/3rdparty/freetype/include/freetype/ftstroke.h
+++ b/src/3rdparty/freetype/include/freetype/ftstroke.h
@@ -4,7 +4,7 @@
*
* FreeType path stroker (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,9 +19,8 @@
#ifndef FTSTROKE_H_
#define FTSTROKE_H_
-#include <ft2build.h>
-#include FT_OUTLINE_H
-#include FT_GLYPH_H
+#include <freetype/ftoutln.h>
+#include <freetype/ftglyph.h>
FT_BEGIN_HEADER
@@ -44,7 +43,7 @@ FT_BEGIN_HEADER
* borders of the stroke.
*
* This can be useful to generate 'bordered' glyph, i.e., glyphs
- * displayed with a coloured (and anti-aliased) border around their
+ * displayed with a colored (and anti-aliased) border around their
* shape.
*
* @order:
@@ -114,22 +113,19 @@ FT_BEGIN_HEADER
* FT_STROKER_LINEJOIN_MITER_FIXED ::
* Used to render mitered line joins, with fixed bevels if the miter
* limit is exceeded. The outer edges of the strokes for the two
- * segments are extended until they meet at an angle. If the segments
- * meet at too sharp an angle (such that the miter would extend from
- * the intersection of the segments a distance greater than the product
- * of the miter limit value and the border radius), then a bevel join
- * (see above) is used instead. This prevents long spikes being
- * created. `FT_STROKER_LINEJOIN_MITER_FIXED` generates a miter line
- * join as used in PostScript and PDF.
+ * segments are extended until they meet at an angle. A bevel join
+ * (see above) is used if the segments meet at too sharp an angle and
+ * the outer edges meet beyond a distance corresponding to the meter
+ * limit. This prevents long spikes being created.
+ * `FT_STROKER_LINEJOIN_MITER_FIXED` generates a miter line join as
+ * used in PostScript and PDF.
*
* FT_STROKER_LINEJOIN_MITER_VARIABLE ::
* FT_STROKER_LINEJOIN_MITER ::
* Used to render mitered line joins, with variable bevels if the miter
- * limit is exceeded. The intersection of the strokes is clipped at a
- * line perpendicular to the bisector of the angle between the strokes,
- * at the distance from the intersection of the segments equal to the
- * product of the miter limit value and the border radius. This
- * prevents long spikes being created.
+ * limit is exceeded. The intersection of the strokes is clipped
+ * perpendicularly to the bisector, at a distance corresponding to
+ * the miter limit. This prevents long spikes being created.
* `FT_STROKER_LINEJOIN_MITER_VARIABLE` generates a mitered line join
* as used in XPS. `FT_STROKER_LINEJOIN_MITER` is an alias for
* `FT_STROKER_LINEJOIN_MITER_VARIABLE`, retained for backward
@@ -296,12 +292,17 @@ FT_BEGIN_HEADER
* The line join style.
*
* miter_limit ::
- * The miter limit for the `FT_STROKER_LINEJOIN_MITER_FIXED` and
- * `FT_STROKER_LINEJOIN_MITER_VARIABLE` line join styles, expressed as
- * 16.16 fixed-point value.
+ * The maximum reciprocal sine of half-angle at the miter join,
+ * expressed as 16.16 fixed point value.
*
* @note:
- * The radius is expressed in the same units as the outline coordinates.
+ * The `radius` is expressed in the same units as the outline
+ * coordinates.
+ *
+ * The `miter_limit` multiplied by the `radius` gives the maximum size
+ * of a miter spike, at which it is clipped for
+ * @FT_STROKER_LINEJOIN_MITER_VARIABLE or replaced with a bevel join for
+ * @FT_STROKER_LINEJOIN_MITER_FIXED.
*
* This function calls @FT_Stroker_Rewind automatically.
*/
diff --git a/src/3rdparty/freetype/include/freetype/ftsynth.h b/src/3rdparty/freetype/include/freetype/ftsynth.h
index 8754f97cee..bdb4c5753e 100644
--- a/src/3rdparty/freetype/include/freetype/ftsynth.h
+++ b/src/3rdparty/freetype/include/freetype/ftsynth.h
@@ -5,7 +5,7 @@
* FreeType synthesizing code for emboldening and slanting
* (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -45,8 +45,7 @@
#define FTSYNTH_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftsystem.h b/src/3rdparty/freetype/include/freetype/ftsystem.h
index 889a6ba172..22aead7140 100644
--- a/src/3rdparty/freetype/include/freetype/ftsystem.h
+++ b/src/3rdparty/freetype/include/freetype/ftsystem.h
@@ -4,7 +4,7 @@
*
* FreeType low-level system interface definition (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define FTSYSTEM_H_
-#include <ft2build.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/fttrigon.h b/src/3rdparty/freetype/include/freetype/fttrigon.h
index 37e1412fdf..2ce6b324c9 100644
--- a/src/3rdparty/freetype/include/freetype/fttrigon.h
+++ b/src/3rdparty/freetype/include/freetype/fttrigon.h
@@ -4,7 +4,7 @@
*
* FreeType trigonometric functions (specification).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef FTTRIGON_H_
#define FTTRIGON_H_
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ftttdrv.h b/src/3rdparty/freetype/include/freetype/ftttdrv.h
deleted file mode 100644
index dc0081a0b9..0000000000
--- a/src/3rdparty/freetype/include/freetype/ftttdrv.h
+++ /dev/null
@@ -1,310 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftttdrv.h */
-/* */
-/* FreeType API for controlling the TrueType driver */
-/* (specification only). */
-/* */
-/* Copyright 2013-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. 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/src/3rdparty/freetype/include/freetype/fttypes.h b/src/3rdparty/freetype/include/freetype/fttypes.h
index 10571505a5..aaeb9e8785 100644
--- a/src/3rdparty/freetype/include/freetype/fttypes.h
+++ b/src/3rdparty/freetype/include/freetype/fttypes.h
@@ -4,7 +4,7 @@
*
* FreeType simple types definitions (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -22,8 +22,8 @@
#include <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>
diff --git a/src/3rdparty/freetype/include/freetype/ftwinfnt.h b/src/3rdparty/freetype/include/freetype/ftwinfnt.h
index a2fba903d2..786528c6ec 100644
--- a/src/3rdparty/freetype/include/freetype/ftwinfnt.h
+++ b/src/3rdparty/freetype/include/freetype/ftwinfnt.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing Windows fnt-specific data.
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef FTWINFNT_H_
#define FTWINFNT_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/internal/autohint.h b/src/3rdparty/freetype/include/freetype/internal/autohint.h
index f64c28bb2c..2a472e20b9 100644
--- a/src/3rdparty/freetype/include/freetype/internal/autohint.h
+++ b/src/3rdparty/freetype/include/freetype/internal/autohint.h
@@ -4,7 +4,7 @@
*
* High-level 'autohint' module-specific interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -70,8 +70,7 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
FT_BEGIN_HEADER
@@ -208,6 +207,9 @@ FT_BEGIN_HEADER
} FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface;
+#define FT_DECLARE_AUTOHINTER_INTERFACE( class_ ) \
+ FT_CALLBACK_TABLE const FT_AutoHinter_InterfaceRec class_;
+
#define FT_DEFINE_AUTOHINTER_INTERFACE( \
class_, \
reset_face_, \
diff --git a/src/3rdparty/freetype/include/freetype/internal/cffotypes.h b/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
index b26893eab3..a316fd1f30 100644
--- a/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
@@ -4,7 +4,7 @@
*
* Basic OpenType/CFF object type definitions (specification).
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,12 +19,11 @@
#ifndef CFFOTYPES_H_
#define CFFOTYPES_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_CFF_TYPES_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include <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
diff --git a/src/3rdparty/freetype/include/freetype/internal/cfftypes.h b/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
index 2fc905ec79..f21167b1e5 100644
--- a/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
@@ -5,7 +5,7 @@
* Basic OpenType/CFF type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,13 +21,12 @@
#define CFFTYPES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include FT_INTERNAL_TYPE1_TYPES_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
diff --git a/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h b/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
new file mode 100644
index 0000000000..97c18d3a21
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
@@ -0,0 +1,307 @@
+/****************************************************************************
+ *
+ * internal/compiler-macros.h
+ *
+ * Compiler-specific macro definitions used internally by FreeType.
+ *
+ * Copyright (C) 2020 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+#ifndef INTERNAL_COMPILER_MACROS_H_
+#define INTERNAL_COMPILER_MACROS_H_
+
+#include <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
+
+ /*
+ * When defining a macro that expands to a non-trivial C statement, use
+ * FT_BEGIN_STMNT and FT_END_STMNT to enclose the macro's body. This
+ * ensures there are no surprises when the macro is invoked in conditional
+ * branches.
+ *
+ * Example:
+ *
+ * #define LOG( ... ) \
+ * FT_BEGIN_STMNT \
+ * if ( logging_enabled ) \
+ * log( __VA_ARGS__ ); \
+ * FT_END_STMNT
+ */
+#define FT_BEGIN_STMNT do {
+#define FT_END_STMNT } while ( 0 )
+
+ /*
+ * FT_DUMMY_STMNT expands to an empty C statement. Useful for
+ * conditionally defined statement macros.
+ *
+ * Example:
+ *
+ * #ifdef BUILD_CONFIG_LOGGING
+ * #define LOG( ... ) \
+ * FT_BEGIN_STMNT \
+ * if ( logging_enabled ) \
+ * log( __VA_ARGS__ ); \
+ * FT_END_STMNT
+ * #else
+ * # define LOG( ... ) FT_DUMMY_STMNT
+ * #endif
+ */
+#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+
+#ifdef _WIN64
+ /* only 64bit Windows uses the LLP64 data model, i.e., */
+ /* 32-bit integers, 64-bit pointers. */
+#define FT_UINT_TO_POINTER( x ) (void *)(unsigned __int64)(x)
+#else
+#define FT_UINT_TO_POINTER( x ) (void *)(unsigned long)(x)
+#endif
+
+ /*
+ * Use `FT_TYPEOF( type )` to cast a value to `type`. This is useful to
+ * suppress signedness compilation warnings in macros.
+ *
+ * Example:
+ *
+ * #define PAD_( x, n ) ( (x) & ~FT_TYPEOF( x )( (n) - 1 ) )
+ *
+ * (The `typeof` condition is taken from gnulib's `intprops.h` header
+ * file.)
+ */
+#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
+ ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
+ defined( __IBM__TYPEOF__ ) ) || \
+ ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
+#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
+#else
+#define FT_TYPEOF( type ) /* empty */
+#endif
+
+ /*
+ * Mark a function declaration as internal to the library. This ensures
+ * that it will not be exposed by default to client code, and helps
+ * generate smaller and faster code on ELF-based platforms. Place this
+ * before a function declaration.
+ */
+
+ /* Visual C, mingw */
+#if defined( _WIN32 )
+#define FT_INTERNAL_FUNCTION_ATTRIBUTE /* empty */
+
+ /* gcc, clang */
+#elif ( defined( __GNUC__ ) && __GNUC__ >= 4 ) || defined( __clang__ )
+#define FT_INTERNAL_FUNCTION_ATTRIBUTE \
+ __attribute__(( visibility( "hidden" ) ))
+
+ /* Sun */
+#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550
+#define FT_INTERNAL_FUNCTION_ATTRIBUTE __hidden
+
+#else
+#define FT_INTERNAL_FUNCTION_ATTRIBUTE /* empty */
+#endif
+
+ /*
+ * FreeType supports compilation of its C sources with a C++ compiler (in
+ * C++ mode); this introduces a number of subtle issues.
+ *
+ * The main one is that a C++ function declaration and its definition must
+ * have the same 'linkage'. Because all FreeType headers declare their
+ * functions with C linkage (i.e., within an `extern "C" { ... }` block
+ * due to the magic of FT_BEGIN_HEADER and FT_END_HEADER), their
+ * definition in FreeType sources should also be prefixed with `extern
+ * "C"` when compiled in C++ mode.
+ *
+ * The `FT_FUNCTION_DECLARATION` and `FT_FUNCTION_DEFINITION` macros are
+ * provided to deal with this case, as well as `FT_CALLBACK_DEF` and its
+ * siblings below.
+ */
+
+ /*
+ * `FT_FUNCTION_DECLARATION( type )` can be used to write a C function
+ * declaration to ensure it will have C linkage when the library is built
+ * with a C++ compiler. The parameter is the function's return type, so a
+ * declaration would look like
+ *
+ * FT_FUNCTION_DECLARATION( int )
+ * foo( int x );
+ *
+ * NOTE: This requires that all uses are inside of `FT_BEGIN_HEADER ...
+ * FT_END_HEADER` blocks, which guarantees that the declarations have C
+ * linkage when the headers are included by C++ sources.
+ *
+ * NOTE: Do not use directly. Use `FT_LOCAL`, `FT_BASE`, and `FT_EXPORT`
+ * instead.
+ */
+#define FT_FUNCTION_DECLARATION( x ) extern x
+
+ /*
+ * Same as `FT_FUNCTION_DECLARATION`, but for function definitions instead.
+ *
+ * NOTE: Do not use directly. Use `FT_LOCAL_DEF`, `FT_BASE_DEF`, and
+ * `FT_EXPORT_DEF` instead.
+ */
+#ifdef __cplusplus
+#define FT_FUNCTION_DEFINITION( x ) extern "C" x
+#else
+#define FT_FUNCTION_DEFINITION( x ) x
+#endif
+
+ /*
+ * Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define, respectively,
+ * an internal FreeType function that is only used by the sources of a
+ * single `src/module/` directory. This ensures that the functions are
+ * turned into static ones at build time, resulting in smaller and faster
+ * code.
+ */
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x ) static x
+#define FT_LOCAL_DEF( x ) static x
+
+#else
+
+#define FT_LOCAL( x ) FT_INTERNAL_FUNCTION_ATTRIBUTE \
+ FT_FUNCTION_DECLARATION( x )
+#define FT_LOCAL_DEF( x ) FT_FUNCTION_DEFINITION( x )
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+ /*
+ * Use `FT_LOCAL_ARRAY` and `FT_LOCAL_ARRAY_DEF` to declare and define,
+ * respectively, a constant array that must be accessed from several
+ * sources in the same `src/module/` sub-directory, and which are internal
+ * to the library.
+ */
+#define FT_LOCAL_ARRAY( x ) FT_INTERNAL_FUNCTION_ATTRIBUTE \
+ extern const x
+#define FT_LOCAL_ARRAY_DEF( x ) FT_FUNCTION_DEFINITION( const x )
+
+ /*
+ * `Use FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, an
+ * internal library function that is used by more than a single module.
+ */
+#define FT_BASE( x ) FT_INTERNAL_FUNCTION_ATTRIBUTE \
+ FT_FUNCTION_DECLARATION( x )
+#define FT_BASE_DEF( x ) FT_FUNCTION_DEFINITION( x )
+
+
+ /*
+ * NOTE: Conditionally define `FT_EXPORT_VAR` due to its definition in
+ * `src/smooth/ftgrays.h` to make the header more portable.
+ */
+#ifndef FT_EXPORT_VAR
+#define FT_EXPORT_VAR( x ) FT_FUNCTION_DECLARATION( x )
+#endif
+
+ /* When compiling FreeType as a DLL or DSO with hidden visibility, */
+ /* some systems/compilers need a special attribute in front OR after */
+ /* the return type of function declarations. */
+ /* */
+ /* Two macros are used within the FreeType source code to define */
+ /* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`. */
+ /* */
+ /* - `FT_EXPORT( return_type )` */
+ /* */
+ /* is used in a function declaration, as in */
+ /* */
+ /* ``` */
+ /* FT_EXPORT( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ); */
+ /* ``` */
+ /* */
+ /* - `FT_EXPORT_DEF( return_type )` */
+ /* */
+ /* is used in a function definition, as in */
+ /* */
+ /* ``` */
+ /* FT_EXPORT_DEF( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ) */
+ /* { */
+ /* ... some code ... */
+ /* return FT_Err_Ok; */
+ /* } */
+ /* ``` */
+ /* */
+ /* You can provide your own implementation of `FT_EXPORT` and */
+ /* `FT_EXPORT_DEF` here if you want. */
+ /* */
+ /* To export a variable, use `FT_EXPORT_VAR`. */
+ /* */
+
+ /* See `freetype/config/compiler_macros.h` for the `FT_EXPORT` definition */
+#define FT_EXPORT_DEF( x ) FT_FUNCTION_DEFINITION( x )
+
+ /* The following macros are needed to compile the library with a */
+ /* C++ compiler and with 16bit compilers. */
+ /* */
+
+ /* This is special. Within C++, you must specify `extern "C"` for */
+ /* functions which are used via function pointers, and you also */
+ /* must do that for structures which contain function pointers to */
+ /* assure C linkage -- it's not possible to have (local) anonymous */
+ /* functions which are accessed by (global) function pointers. */
+ /* */
+ /* */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function, */
+ /* located in the same source code file as the structure that uses */
+ /* it. */
+ /* */
+ /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */
+ /* and define a callback function, respectively, in a similar way */
+ /* as FT_BASE and FT_BASE_DEF work. */
+ /* */
+ /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+ /* contains pointers to callback functions. */
+ /* */
+ /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
+ /* that contains pointers to callback functions. */
+ /* */
+ /* */
+ /* Some 16bit compilers have to redefine these macros to insert */
+ /* the infamous `_cdecl` or `__fastcall` declarations. */
+ /* */
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_CALLBACK_DEF( x ) static x
+#endif
+
+#define FT_BASE_CALLBACK( x ) FT_FUNCTION_DECLARATION( x )
+#define FT_BASE_CALLBACK_DEF( x ) FT_FUNCTION_DEFINITION( x )
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE extern "C"
+#define FT_CALLBACK_TABLE_DEF extern "C"
+#else
+#define FT_CALLBACK_TABLE extern
+#define FT_CALLBACK_TABLE_DEF /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+FT_END_HEADER
+
+#endif /* INTERNAL_COMPILER_MACROS_H_ */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftcalc.h b/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
index 1811fcd1ea..c65307472f 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
@@ -4,7 +4,7 @@
*
* Arithmetic computations (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,9 @@
#define FTCALC_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
+#include "compiler-macros.h"
FT_BEGIN_HEADER
@@ -449,8 +449,7 @@ FT_BEGIN_HEADER
#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) * 4 ) /* << 2 */
#define FIXED_TO_INT( x ) ( FT_RoundFix( x ) >> 16 )
-#define ROUND_F26DOT6( x ) ( x >= 0 ? ( ( (x) + 32 ) & -64 ) \
- : ( -( ( 32 - (x) ) & -64 ) ) )
+#define ROUND_F26DOT6( x ) ( ( (x) + 32 - ( x < 0 ) ) & -64 )
/*
* The following macros have two purposes.
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftdebug.h b/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
index 54a9673afa..df5357ad55 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
@@ -4,7 +4,7 @@
*
* Debugging and logging component (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,9 @@
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
+
+#include "compiler-macros.h"
FT_BEGIN_HEADER
@@ -56,7 +58,7 @@ FT_BEGIN_HEADER
/* defining the enumeration */
typedef enum FT_Trace_
{
-#include FT_INTERNAL_TRACE_H
+#include <freetype/internal/fttrace.h>
trace_count
} FT_Trace;
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftdriver.h b/src/3rdparty/freetype/include/freetype/internal/ftdriver.h
deleted file mode 100644
index 16856d3df8..0000000000
--- a/src/3rdparty/freetype/include/freetype/internal/ftdriver.h
+++ /dev/null
@@ -1,409 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftdriver.h */
-/* */
-/* FreeType font driver interface (specification). */
-/* */
-/* Copyright 1996-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTDRIVER_H__
-#define __FTDRIVER_H__
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-
-
-FT_BEGIN_HEADER
-
-
- typedef FT_Error
- (*FT_Face_InitFunc)( FT_Stream stream,
- FT_Face face,
- FT_Int typeface_index,
- FT_Int num_params,
- FT_Parameter* parameters );
-
- typedef void
- (*FT_Face_DoneFunc)( FT_Face face );
-
-
- typedef FT_Error
- (*FT_Size_InitFunc)( FT_Size size );
-
- typedef void
- (*FT_Size_DoneFunc)( FT_Size size );
-
-
- typedef FT_Error
- (*FT_Slot_InitFunc)( FT_GlyphSlot slot );
-
- typedef void
- (*FT_Slot_DoneFunc)( FT_GlyphSlot slot );
-
-
- typedef FT_Error
- (*FT_Size_RequestFunc)( FT_Size size,
- FT_Size_Request req );
-
- typedef FT_Error
- (*FT_Size_SelectFunc)( FT_Size size,
- FT_ULong size_index );
-
- typedef FT_Error
- (*FT_Slot_LoadFunc)( FT_GlyphSlot slot,
- FT_Size size,
- FT_UInt glyph_index,
- FT_Int32 load_flags );
-
-
- typedef FT_UInt
- (*FT_CharMap_CharIndexFunc)( FT_CharMap charmap,
- FT_Long charcode );
-
- typedef FT_Long
- (*FT_CharMap_CharNextFunc)( FT_CharMap charmap,
- FT_Long charcode );
-
-
- typedef FT_Error
- (*FT_Face_GetKerningFunc)( FT_Face face,
- FT_UInt left_glyph,
- FT_UInt right_glyph,
- FT_Vector* kerning );
-
-
- typedef FT_Error
- (*FT_Face_AttachFunc)( FT_Face face,
- FT_Stream stream );
-
-
- typedef FT_Error
- (*FT_Face_GetAdvancesFunc)( FT_Face face,
- FT_UInt first,
- FT_UInt count,
- FT_Int32 flags,
- FT_Fixed* advances );
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Driver_ClassRec */
- /* */
- /* <Description> */
- /* The font driver class. This structure mostly contains pointers to */
- /* driver methods. */
- /* */
- /* <Fields> */
- /* root :: The parent module. */
- /* */
- /* face_object_size :: The size of a face object in bytes. */
- /* */
- /* size_object_size :: The size of a size object in bytes. */
- /* */
- /* slot_object_size :: The size of a glyph object in bytes. */
- /* */
- /* init_face :: The format-specific face constructor. */
- /* */
- /* done_face :: The format-specific face destructor. */
- /* */
- /* init_size :: The format-specific size constructor. */
- /* */
- /* done_size :: The format-specific size destructor. */
- /* */
- /* init_slot :: The format-specific slot constructor. */
- /* */
- /* done_slot :: The format-specific slot destructor. */
- /* */
- /* */
- /* load_glyph :: A function handle to load a glyph to a slot. */
- /* This field is mandatory! */
- /* */
- /* get_kerning :: A function handle to return the unscaled */
- /* kerning for a given pair of glyphs. Can be */
- /* set to 0 if the format doesn't support */
- /* kerning. */
- /* */
- /* attach_file :: This function handle is used to read */
- /* additional data for a face from another */
- /* file/stream. For example, this can be used to */
- /* add data from AFM or PFM files on a Type 1 */
- /* face, or a CIDMap on a CID-keyed face. */
- /* */
- /* get_advances :: A function handle used to return advance */
- /* widths of `count' glyphs (in font units), */
- /* starting at `first'. The `vertical' flag must */
- /* be set to get vertical advance heights. The */
- /* `advances' buffer is caller-allocated. */
- /* The idea of this function is to be able to */
- /* perform device-independent text layout without */
- /* loading a single glyph image. */
- /* */
- /* request_size :: A handle to a function used to request the new */
- /* character size. Can be set to 0 if the */
- /* scaling done in the base layer suffices. */
- /* */
- /* select_size :: A handle to a function used to select a new */
- /* fixed size. It is used only if */
- /* @FT_FACE_FLAG_FIXED_SIZES is set. Can be set */
- /* to 0 if the scaling done in the base layer */
- /* suffices. */
- /* <Note> */
- /* Most function pointers, with the exception of `load_glyph', can be */
- /* set to 0 to indicate a default behaviour. */
- /* */
- typedef struct FT_Driver_ClassRec_
- {
- FT_Module_Class root;
-
- FT_Long face_object_size;
- FT_Long size_object_size;
- FT_Long slot_object_size;
-
- FT_Face_InitFunc init_face;
- FT_Face_DoneFunc done_face;
-
- FT_Size_InitFunc init_size;
- FT_Size_DoneFunc done_size;
-
- FT_Slot_InitFunc init_slot;
- FT_Slot_DoneFunc done_slot;
-
- FT_Slot_LoadFunc load_glyph;
-
- FT_Face_GetKerningFunc get_kerning;
- FT_Face_AttachFunc attach_file;
- FT_Face_GetAdvancesFunc get_advances;
-
- /* since version 2.2 */
- FT_Size_RequestFunc request_size;
- FT_Size_SelectFunc select_size;
-
- } FT_Driver_ClassRec, *FT_Driver_Class;
-
-
- /*************************************************************************/
- /* */
- /* <Macro> */
- /* FT_DECLARE_DRIVER */
- /* */
- /* <Description> */
- /* Used to create a forward declaration of an FT_Driver_ClassRec */
- /* struct instance. */
- /* */
- /* <Macro> */
- /* FT_DEFINE_DRIVER */
- /* */
- /* <Description> */
- /* Used to initialize an instance of FT_Driver_ClassRec struct. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' function has to be */
- /* called with a pointer where the allocated structure is returned. */
- /* And when it is no longer needed a `destroy' function needs to be */
- /* called to release that allocation. */
- /* */
- /* `fcinit.c' (ft_create_default_module_classes) already contains a */
- /* mechanism to call these functions for the default modules */
- /* described in `ftmodule.h'. */
- /* */
- /* Notice that the created `create' and `destroy' functions call */
- /* `pic_init' and `pic_free' to allow you to manually allocate and */
- /* initialize any additional global data, like a module specific */
- /* interface, and put them in the global pic container defined in */
- /* `ftpic.h'. If you don't need them just implement the functions as */
- /* empty to resolve the link error. Also the `pic_init' and */
- /* `pic_free' functions should be declared in `pic.h', to be referred */
- /* by driver definition calling `FT_DEFINE_DRIVER' in following. */
- /* */
- /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
- /* allocated in the global scope (or the scope where the macro is */
- /* used). */
- /* */
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DECLARE_DRIVER( class_ ) \
- FT_CALLBACK_TABLE \
- const FT_Driver_ClassRec class_;
-
-#define FT_DEFINE_DRIVER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- face_object_size_, \
- size_object_size_, \
- slot_object_size_, \
- init_face_, \
- done_face_, \
- init_size_, \
- done_size_, \
- init_slot_, \
- done_slot_, \
- load_glyph_, \
- get_kerning_, \
- attach_file_, \
- get_advances_, \
- request_size_, \
- select_size_ ) \
- FT_CALLBACK_TABLE_DEF \
- const FT_Driver_ClassRec class_ = \
- { \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- \
- face_object_size_, \
- size_object_size_, \
- slot_object_size_, \
- \
- init_face_, \
- done_face_, \
- \
- init_size_, \
- done_size_, \
- \
- init_slot_, \
- done_slot_, \
- \
- load_glyph_, \
- \
- get_kerning_, \
- attach_file_, \
- get_advances_, \
- \
- request_size_, \
- select_size_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DECLARE_DRIVER( class_ ) FT_DECLARE_MODULE( class_ )
-
-#define FT_DEFINE_DRIVER( \
- class_, \
- flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_, \
- face_object_size_, \
- size_object_size_, \
- slot_object_size_, \
- init_face_, \
- done_face_, \
- init_size_, \
- done_size_, \
- init_slot_, \
- done_slot_, \
- load_glyph_, \
- get_kerning_, \
- attach_file_, \
- get_advances_, \
- request_size_, \
- select_size_ ) \
- void \
- FT_Destroy_Class_ ## class_( FT_Library library, \
- FT_Module_Class* clazz ) \
- { \
- FT_Memory memory = library->memory; \
- FT_Driver_Class dclazz = (FT_Driver_Class)clazz; \
- \
- \
- class_ ## _pic_free( library ); \
- if ( dclazz ) \
- FT_FREE( dclazz ); \
- } \
- \
- \
- FT_Error \
- FT_Create_Class_ ## class_( FT_Library library, \
- FT_Module_Class** output_class ) \
- { \
- FT_Driver_Class clazz = NULL; \
- FT_Error error; \
- FT_Memory memory = library->memory; \
- \
- \
- if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
- return error; \
- \
- error = class_ ## _pic_init( library ); \
- if ( error ) \
- { \
- FT_FREE( clazz ); \
- return error; \
- } \
- \
- FT_DEFINE_ROOT_MODULE( flags_, \
- size_, \
- name_, \
- version_, \
- requires_, \
- interface_, \
- init_, \
- done_, \
- get_interface_ ) \
- \
- clazz->face_object_size = face_object_size_; \
- clazz->size_object_size = size_object_size_; \
- clazz->slot_object_size = slot_object_size_; \
- \
- clazz->init_face = init_face_; \
- clazz->done_face = done_face_; \
- \
- clazz->init_size = init_size_; \
- clazz->done_size = done_size_; \
- \
- clazz->init_slot = init_slot_; \
- clazz->done_slot = done_slot_; \
- \
- clazz->load_glyph = load_glyph_; \
- \
- clazz->get_kerning = get_kerning_; \
- clazz->attach_file = attach_file_; \
- clazz->get_advances = get_advances_; \
- \
- clazz->request_size = request_size_; \
- clazz->select_size = select_size_; \
- \
- *output_class = (FT_Module_Class*)clazz; \
- \
- return FT_Err_Ok; \
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-FT_END_HEADER
-
-#endif /* __FTDRIVER_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftdrv.h b/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
index 09e846e1c7..7f22710eae 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
@@ -4,7 +4,7 @@
*
* FreeType internal font driver interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,9 @@
#define FTDRV_H_
-#include <ft2build.h>
-#include FT_MODULE_H
+#include <freetype/ftmodapi.h>
+#include "compiler-macros.h"
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h b/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
index 770871d81b..27b8659f7c 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph loader (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTGLOADR_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
FT_BEGIN_HEADER
@@ -138,8 +137,6 @@ FT_BEGIN_HEADER
FT_BASE( void )
FT_GlyphLoader_Add( FT_GlyphLoader loader );
- /* */
-
FT_END_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/fthash.h b/src/3rdparty/freetype/include/freetype/internal/fthash.h
index 249188040b..622ec76bb9 100644
--- a/src/3rdparty/freetype/include/freetype/internal/fthash.h
+++ b/src/3rdparty/freetype/include/freetype/internal/fthash.h
@@ -43,8 +43,7 @@
#define FTHASH_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftmemory.h b/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
index 78bd3bc229..ddb18b0512 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
@@ -4,7 +4,7 @@
*
* The FreeType memory management macros (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg
*
* This file is part of the FreeType project, and may only be used,
@@ -22,8 +22,9 @@
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-#include FT_TYPES_H
+#include <freetype/fttypes.h>
+#include "compiler-macros.h"
FT_BEGIN_HEADER
@@ -57,6 +58,14 @@ FT_BEGIN_HEADER
/*************************************************************************/
+ /* The calculation `NULL + n' is undefined in C. Even if the resulting */
+ /* pointer doesn't get dereferenced, this causes warnings with */
+ /* sanitizers. */
+ /* */
+ /* We thus provide a macro that should be used if `base' can be NULL. */
+#define FT_OFFSET( base, count ) ( (base) ? (base) + (count) : NULL )
+
+
/*
* C++ refuses to handle statements like p = (void*)anything, with `p' a
* typed pointer. Since we don't have a `typeof' operator in standard C++,
@@ -153,10 +162,10 @@ extern "C++"
(FT_Long)(size), \
&error ) )
-#define FT_MEM_FREE( ptr ) \
- FT_BEGIN_STMNT \
- ft_mem_free( memory, (ptr) ); \
- (ptr) = NULL; \
+#define FT_MEM_FREE( ptr ) \
+ FT_BEGIN_STMNT \
+ FT_DEBUG_INNER( ft_mem_free( memory, (ptr) ) ); \
+ (ptr) = NULL; \
FT_END_STMNT
#define FT_MEM_NEW( ptr ) \
@@ -381,8 +390,6 @@ extern "C++"
#define FT_STRCPYN( dst, src, size ) \
ft_mem_strcpyn( (char*)dst, (const char*)(src), (FT_ULong)(size) )
- /* */
-
FT_END_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftobjs.h b/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
index 0c1d3e5bf2..25db2c494f 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
@@ -4,7 +4,7 @@
*
* The FreeType private base classes (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,21 +26,21 @@
#ifndef FTOBJS_H_
#define FTOBJS_H_
-#include <ft2build.h>
-#include FT_RENDER_H
-#include FT_SIZES_H
-#include FT_LCD_FILTER_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_GLYPH_LOADER_H
-#include FT_INTERNAL_DRIVER_H
-#include FT_INTERNAL_AUTOHINT_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_CALC_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 FT_INCREMENTAL_H
+#include <freetype/ftincrem.h>
#endif
+#include "compiler-macros.h"
FT_BEGIN_HEADER
@@ -226,8 +226,8 @@ FT_BEGIN_HEADER
} FT_CMap_ClassRec;
-#define FT_DECLARE_CMAP_CLASS( class_ ) \
- FT_CALLBACK_TABLE const FT_CMap_ClassRec class_;
+#define FT_DECLARE_CMAP_CLASS( class_ ) \
+ FT_CALLBACK_TABLE const FT_CMap_ClassRec class_;
#define FT_DEFINE_CMAP_CLASS( \
class_, \
@@ -653,7 +653,7 @@ FT_BEGIN_HEADER
FT_BASE( void )
FT_Done_GlyphSlot( FT_GlyphSlot slot );
- /* */
+ /* */
#define FT_REQUEST_WIDTH( req ) \
( (req)->horiResolution \
@@ -1057,6 +1057,9 @@ FT_BEGIN_HEADER
* The struct will be allocated in the global scope (or the scope where
* the macro is used).
*/
+#define FT_DECLARE_GLYPH( class_ ) \
+ FT_CALLBACK_TABLE const FT_Glyph_Class class_;
+
#define FT_DEFINE_GLYPH( \
class_, \
size_, \
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftpic.h b/src/3rdparty/freetype/include/freetype/internal/ftpic.h
deleted file mode 100644
index 5214f05989..0000000000
--- a/src/3rdparty/freetype/include/freetype/internal/ftpic.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpic.h */
-/* */
-/* The FreeType position independent code services (declaration). */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
- /*************************************************************************/
- /* */
- /* Modules that ordinarily have const global data that need address */
- /* can instead define pointers here. */
- /* */
- /*************************************************************************/
-
-
-#ifndef FTPIC_H_
-#define FTPIC_H_
-
-
-FT_BEGIN_HEADER
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- typedef struct FT_PIC_Container_
- {
- /* pic containers for base */
- void* base;
-
- /* pic containers for modules */
- void* autofit;
- void* cff;
- void* pshinter;
- void* psnames;
- void* raster;
- void* sfnt;
- void* smooth;
- void* truetype;
-
- } FT_PIC_Container;
-
-
- /* Initialize the various function tables, structs, etc. */
- /* stored in the container. */
- FT_BASE( FT_Error )
- ft_pic_container_init( FT_Library library );
-
-
- /* Destroy the contents of the container. */
- FT_BASE( void )
- ft_pic_container_destroy( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h b/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
index 574837f6d4..81ec29151c 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
@@ -4,7 +4,7 @@
*
* Get and set properties of PostScript drivers (specification).
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTPSPROP_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftrfork.h b/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
index 75b3e531bb..1b7b25acbe 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
@@ -4,7 +4,7 @@
*
* Embedded resource forks accessor (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* Masatake YAMATO and Redhat K.K.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,8 +25,7 @@
#define FTRFORK_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftserv.h b/src/3rdparty/freetype/include/freetype/internal/ftserv.h
index 8836cf3f18..6e1a9472da 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftserv.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftserv.h
@@ -4,7 +4,7 @@
*
* The FreeType services (specification only).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -31,6 +31,7 @@
#ifndef FTSERV_H_
#define FTSERV_H_
+#include "compiler-macros.h"
FT_BEGIN_HEADER
@@ -486,33 +487,6 @@ FT_BEGIN_HEADER
/* */
- /*
- * The header files containing the services.
- */
-
-#define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
-#define FT_SERVICE_CFF_TABLE_LOAD_H <freetype/internal/services/svcfftl.h>
-#define FT_SERVICE_CID_H <freetype/internal/services/svcid.h>
-#define FT_SERVICE_FONT_FORMAT_H <freetype/internal/services/svfntfmt.h>
-#define FT_SERVICE_GLYPH_DICT_H <freetype/internal/services/svgldict.h>
-#define FT_SERVICE_GX_VALIDATE_H <freetype/internal/services/svgxval.h>
-#define FT_SERVICE_KERNING_H <freetype/internal/services/svkern.h>
-#define FT_SERVICE_METRICS_VARIATIONS_H <freetype/internal/services/svmetric.h>
-#define FT_SERVICE_MULTIPLE_MASTERS_H <freetype/internal/services/svmm.h>
-#define FT_SERVICE_OPENTYPE_VALIDATE_H <freetype/internal/services/svotval.h>
-#define FT_SERVICE_PFR_H <freetype/internal/services/svpfr.h>
-#define FT_SERVICE_POSTSCRIPT_CMAPS_H <freetype/internal/services/svpscmap.h>
-#define FT_SERVICE_POSTSCRIPT_INFO_H <freetype/internal/services/svpsinfo.h>
-#define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
-#define FT_SERVICE_PROPERTIES_H <freetype/internal/services/svprop.h>
-#define FT_SERVICE_SFNT_H <freetype/internal/services/svsfnt.h>
-#define FT_SERVICE_TRUETYPE_ENGINE_H <freetype/internal/services/svtteng.h>
-#define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h>
-#define FT_SERVICE_TT_CMAP_H <freetype/internal/services/svttcmap.h>
-#define FT_SERVICE_WINFNT_H <freetype/internal/services/svwinfnt.h>
-
- /* */
-
FT_END_HEADER
#endif /* FTSERV_H_ */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftstream.h b/src/3rdparty/freetype/include/freetype/internal/ftstream.h
index a579a039b9..e7d922260f 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftstream.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftstream.h
@@ -4,7 +4,7 @@
*
* Stream handling (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,8 +21,8 @@
#include <ft2build.h>
-#include FT_SYSTEM_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/ftsystem.h>
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/fttrace.h b/src/3rdparty/freetype/include/freetype/internal/fttrace.h
index f5f9598046..58bd77413c 100644
--- a/src/3rdparty/freetype/include/freetype/internal/fttrace.h
+++ b/src/3rdparty/freetype/include/freetype/internal/fttrace.h
@@ -4,7 +4,7 @@
*
* Tracing handling (specification only).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -49,6 +49,7 @@ FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
FT_TRACE_DEF( sfdriver ) /* SFNT font driver (sfdriver.c) */
FT_TRACE_DEF( sfobjs ) /* SFNT object handler (sfobjs.c) */
FT_TRACE_DEF( sfwoff ) /* WOFF format handler (sfwoff.c) */
+FT_TRACE_DEF( sfwoff2 ) /* WOFF2 format handler (sfwoff2.c) */
FT_TRACE_DEF( ttbdf ) /* TrueType embedded BDF (ttbdf.c) */
FT_TRACE_DEF( ttcmap ) /* charmap handler (ttcmap.c) */
FT_TRACE_DEF( ttcolr ) /* glyph layer table (ttcolr.c) */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftvalid.h b/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
index 38aa06cc4e..a5bc6c9b52 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
@@ -4,7 +4,7 @@
*
* FreeType validation support (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,9 @@
#define FTVALID_H_
#include <ft2build.h>
-#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_setjmp and ft_longjmp */
+#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_jmpbuf */
+#include "compiler-macros.h"
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/internal.h b/src/3rdparty/freetype/include/freetype/internal/internal.h
deleted file mode 100644
index 3c8830f7e4..0000000000
--- a/src/3rdparty/freetype/include/freetype/internal/internal.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
- *
- * internal.h
- *
- * Internal header files (specification only).
- *
- * Copyright (C) 1996-2019 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- */
-
-
- /**************************************************************************
- *
- * This file is automatically included by `ft2build.h`. Do not include it
- * manually!
- *
- */
-
-
-#define FT_INTERNAL_OBJECTS_H <freetype/internal/ftobjs.h>
-#define FT_INTERNAL_STREAM_H <freetype/internal/ftstream.h>
-#define FT_INTERNAL_MEMORY_H <freetype/internal/ftmemory.h>
-#define FT_INTERNAL_DEBUG_H <freetype/internal/ftdebug.h>
-#define FT_INTERNAL_CALC_H <freetype/internal/ftcalc.h>
-#define FT_INTERNAL_HASH_H <freetype/internal/fthash.h>
-#define FT_INTERNAL_DRIVER_H <freetype/internal/ftdrv.h>
-#define FT_INTERNAL_TRACE_H <freetype/internal/fttrace.h>
-#define FT_INTERNAL_GLYPH_LOADER_H <freetype/internal/ftgloadr.h>
-#define FT_INTERNAL_SFNT_H <freetype/internal/sfnt.h>
-#define FT_INTERNAL_SERVICE_H <freetype/internal/ftserv.h>
-#define FT_INTERNAL_RFORK_H <freetype/internal/ftrfork.h>
-#define FT_INTERNAL_VALIDATE_H <freetype/internal/ftvalid.h>
-
-#define FT_INTERNAL_TRUETYPE_TYPES_H <freetype/internal/tttypes.h>
-#define FT_INTERNAL_TYPE1_TYPES_H <freetype/internal/t1types.h>
-#define FT_INTERNAL_WOFF_TYPES_H <freetype/internal/wofftypes.h>
-
-#define FT_INTERNAL_POSTSCRIPT_AUX_H <freetype/internal/psaux.h>
-#define FT_INTERNAL_POSTSCRIPT_HINTS_H <freetype/internal/pshints.h>
-#define FT_INTERNAL_POSTSCRIPT_PROPS_H <freetype/internal/ftpsprop.h>
-
-#define FT_INTERNAL_AUTOHINT_H <freetype/internal/autohint.h>
-
-#define FT_INTERNAL_CFF_TYPES_H <freetype/internal/cfftypes.h>
-#define FT_INTERNAL_CFF_OBJECTS_TYPES_H <freetype/internal/cffotypes.h>
-
-
-#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
-
- /* We disable the warning `conditional expression is constant' here */
- /* in order to compile cleanly with the maximum level of warnings. */
- /* In particular, the warning complains about stuff like `while(0)' */
- /* which is very useful in macro definitions. There is no benefit */
- /* in having it enabled. */
-#pragma warning( disable : 4127 )
-
-#endif /* _MSC_VER */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/psaux.h b/src/3rdparty/freetype/include/freetype/internal/psaux.h
index f962a973de..8e0a262fd5 100644
--- a/src/3rdparty/freetype/include/freetype/internal/psaux.h
+++ b/src/3rdparty/freetype/include/freetype/internal/psaux.h
@@ -5,7 +5,7 @@
* Auxiliary functions and data structures related to PostScript fonts
* (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,14 +21,13 @@
#define PSAUX_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_HASH_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_CFF_TYPES_H
-#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
+#include <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>
diff --git a/src/3rdparty/freetype/include/freetype/internal/pshints.h b/src/3rdparty/freetype/include/freetype/internal/pshints.h
index 699acea6f5..663e9d3488 100644
--- a/src/3rdparty/freetype/include/freetype/internal/pshints.h
+++ b/src/3rdparty/freetype/include/freetype/internal/pshints.h
@@ -6,7 +6,7 @@
* recorders (specification only). These are used to support native
* T1/T2 hints in the 'type1', 'cid', and 'cff' font drivers.
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -22,9 +22,8 @@
#define PSHINTS_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
+#include <freetype/freetype.h>
+#include <freetype/t1tables.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h b/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
index e4786ed038..81f5a06b62 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
@@ -4,7 +4,7 @@
*
* The FreeType BDF services (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVBDF_H_
#define SVBDF_H_
-#include FT_BDF_H
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/ftbdf.h>
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h b/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
index 6c621732da..1d2dbb6a8e 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
@@ -4,7 +4,7 @@
*
* The FreeType CFF tables loader service (specification).
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVCFFTL_H_
#define SVCFFTL_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_CFF_TYPES_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/internal/cfftypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svcid.h b/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
index 555a5af5b9..bd49f3270a 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
@@ -4,7 +4,7 @@
*
* The FreeType CID font services (specification).
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* Derek Clegg and Michael Toftdal.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef SVCID_H_
#define SVCID_H_
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h b/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
index 6f4285ea8c..6114d638af 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
@@ -4,7 +4,7 @@
*
* The FreeType font format service (specification only).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef SVFNTFMT_H_
#define SVFNTFMT_H_
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h b/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
index 0949621835..f9443e40d6 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph dictionary services (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef SVGLDICT_H_
#define SVGLDICT_H_
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h b/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
index 0bb76f3144..83c2f26cee 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
@@ -4,7 +4,7 @@
*
* FreeType API for validating TrueTypeGX/AAT tables (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -28,8 +28,8 @@
#ifndef SVGXVAL_H_
#define SVGXVAL_H_
-#include FT_GX_VALIDATE_H
-#include FT_INTERNAL_VALIDATE_H
+#include <freetype/ftgxval.h>
+#include <freetype/internal/ftvalid.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svkern.h b/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
index f992a327c1..13cfb32722 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
@@ -4,7 +4,7 @@
*
* The FreeType Kerning service (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVKERN_H_
#define SVKERN_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/tttables.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h b/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
index d688bc7c60..2b30edaabe 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
@@ -4,7 +4,7 @@
*
* The FreeType services for metrics variations (specification).
*
- * Copyright (C) 2016-2019 by
+ * Copyright (C) 2016-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef SVMETRIC_H_
#define SVMETRIC_H_
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svmm.h b/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
index 3652f2050a..5a807636a6 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
@@ -4,7 +4,7 @@
*
* The FreeType Multiple Masters and GX var services (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef SVMM_H_
#define SVMM_H_
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svotval.h b/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
index cab4c6efbb..763fb2efbe 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
@@ -4,7 +4,7 @@
*
* The FreeType OpenType validation service (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVOTVAL_H_
#define SVOTVAL_H_
-#include FT_OPENTYPE_VALIDATE_H
-#include FT_INTERNAL_VALIDATE_H
+#include <freetype/ftotval.h>
+#include <freetype/internal/ftvalid.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h b/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
index fd01d614dd..bdeba0785c 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
@@ -4,7 +4,7 @@
*
* Internal PFR service functions (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVPFR_H_
#define SVPFR_H_
-#include FT_PFR_H
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/ftpfr.h>
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
@@ -56,7 +56,6 @@ FT_BEGIN_HEADER
};
- /* */
FT_END_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h b/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
index 18e3843cbe..8ef62c5f92 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
@@ -4,7 +4,7 @@
*
* The FreeType PostScript name services (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef SVPOSTNM_H_
#define SVPOSTNM_H_
-#include FT_INTERNAL_SERVICE_H
+#include <freetype/internal/ftserv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svprop.h b/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
index e48d0151ec..8f755436a1 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
@@ -4,7 +4,7 @@
*
* The FreeType property service (specification).
*
- * Copyright (C) 2012-2019 by
+ * Copyright (C) 2012-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h b/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
index dfac3bafa9..b4dcd80759 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
@@ -4,7 +4,7 @@
*
* The FreeType PostScript charmap service (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef SVPSCMAP_H_
#define SVPSCMAP_H_
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h b/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
index fb4e0e3fa9..1e7276ff43 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
@@ -4,7 +4,7 @@
*
* The FreeType PostScript info service (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVPSINFO_H_
#define SVPSINFO_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/internal/t1types.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h b/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
index 464aa209f7..39c8b5e19d 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
@@ -4,7 +4,7 @@
*
* The FreeType SFNT table loading service (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVSFNT_H_
#define SVSFNT_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/tttables.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h b/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
index 0fcb81371d..c18bb2336f 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
@@ -4,7 +4,7 @@
*
* The FreeType TrueType/sfnt cmap extra information service.
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* Masatake YAMATO, Redhat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -22,8 +22,8 @@
#ifndef SVTTCMAP_H_
#define SVTTCMAP_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/tttables.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h b/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
index a852f5c6fb..7a17e4a755 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
@@ -4,7 +4,7 @@
*
* The FreeType TrueType engine query service (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVTTENG_H_
#define SVTTENG_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_MODULE_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/ftmodapi.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h b/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
index c8798771fb..90a81dd40e 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
@@ -4,7 +4,7 @@
*
* The FreeType TrueType glyph service.
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,8 +18,8 @@
#ifndef SVTTGLYF_H_
#define SVTTGLYF_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_TRUETYPE_TABLES_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/tttables.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h b/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
index 38ee020965..8c915f5257 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
@@ -4,7 +4,7 @@
*
* The FreeType Windows FNT/FONT service (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
#ifndef SVWINFNT_H_
#define SVWINFNT_H_
-#include FT_INTERNAL_SERVICE_H
-#include FT_WINFONTS_H
+#include <freetype/internal/ftserv.h>
+#include <freetype/ftwinfnt.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/sfnt.h b/src/3rdparty/freetype/include/freetype/internal/sfnt.h
index b19241c306..b4c12dbb26 100644
--- a/src/3rdparty/freetype/include/freetype/internal/sfnt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/sfnt.h
@@ -4,7 +4,7 @@
*
* High-level 'sfnt' driver interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,10 +20,9 @@
#define SFNT_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_INTERNAL_WOFF_TYPES_H
+#include <freetype/internal/ftdrv.h>
+#include <freetype/internal/tttypes.h>
+#include <freetype/internal/wofftypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/internal/t1types.h b/src/3rdparty/freetype/include/freetype/internal/t1types.h
index d94c8c1284..6a0fe5e97d 100644
--- a/src/3rdparty/freetype/include/freetype/internal/t1types.h
+++ b/src/3rdparty/freetype/include/freetype/internal/t1types.h
@@ -5,7 +5,7 @@
* Basic Type1/Type2 type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,12 +21,11 @@
#define T1TYPES_H_
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_INTERNAL_HASH_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include <freetype/t1tables.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
diff --git a/src/3rdparty/freetype/include/freetype/internal/tttypes.h b/src/3rdparty/freetype/include/freetype/internal/tttypes.h
index 23db240e7c..c36342c93a 100644
--- a/src/3rdparty/freetype/include/freetype/internal/tttypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/tttypes.h
@@ -5,7 +5,7 @@
* Basic SFNT/TrueType type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,13 +21,12 @@
#define TTTYPES_H_
-#include <ft2build.h>
-#include FT_TRUETYPE_TABLES_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_COLOR_H
+#include <freetype/tttables.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftcolor.h>
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
+#include <freetype/ftmm.h>
#endif
diff --git a/src/3rdparty/freetype/include/freetype/internal/wofftypes.h b/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
index ba55bf883e..1874a138a0 100644
--- a/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
@@ -5,7 +5,7 @@
* Basic WOFF/WOFF2 type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,9 +21,8 @@
#define WOFFTYPES_H_
-#include <ft2build.h>
-#include FT_TRUETYPE_TABLES_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/tttables.h>
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
@@ -104,6 +103,207 @@ FT_BEGIN_HEADER
} WOFF_TableRec, *WOFF_Table;
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF2_TtcFontRec
+ *
+ * @description:
+ * Metadata for a TTC font entry in WOFF2.
+ *
+ * @fields:
+ * flavor ::
+ * TTC font flavor.
+ *
+ * num_tables ::
+ * Number of tables in TTC, indicating number of elements in
+ * `table_indices`.
+ *
+ * table_indices ::
+ * Array of table indices for each TTC font.
+ */
+ typedef struct WOFF2_TtcFontRec_
+ {
+ FT_ULong flavor;
+ FT_UShort num_tables;
+ FT_UShort* table_indices;
+
+ } WOFF2_TtcFontRec, *WOFF2_TtcFont;
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF2_HeaderRec
+ *
+ * @description:
+ * WOFF2 file format header.
+ *
+ * @fields:
+ * See
+ *
+ * https://www.w3.org/TR/WOFF2/#woff20Header
+ *
+ * @note:
+ * We don't care about the fields `reserved`, `majorVersion` and
+ * `minorVersion`, so they are not included. The `totalSfntSize` field
+ * does not necessarily represent the actual size of the uncompressed
+ * SFNT font stream, so that is used as a reference value instead.
+ */
+ typedef struct WOFF2_HeaderRec_
+ {
+ FT_ULong signature;
+ FT_ULong flavor;
+ FT_ULong length;
+ FT_UShort num_tables;
+ FT_ULong totalSfntSize;
+ FT_ULong totalCompressedSize;
+ FT_ULong metaOffset;
+ FT_ULong metaLength;
+ FT_ULong metaOrigLength;
+ FT_ULong privOffset;
+ FT_ULong privLength;
+
+ FT_ULong uncompressed_size; /* uncompressed brotli stream size */
+ FT_ULong compressed_offset; /* compressed stream offset */
+ FT_ULong header_version; /* version of original TTC Header */
+ FT_UShort num_fonts; /* number of fonts in TTC */
+ FT_ULong actual_sfnt_size; /* actual size of sfnt stream */
+
+ WOFF2_TtcFont ttc_fonts; /* metadata for fonts in a TTC */
+
+ } WOFF2_HeaderRec, *WOFF2_Header;
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF2_TableRec
+ *
+ * @description:
+ * This structure describes a given table of a WOFF2 font.
+ *
+ * @fields:
+ * See
+ *
+ * https://www.w3.org/TR/WOFF2/#table_dir_format
+ */
+ typedef struct WOFF2_TableRec_
+ {
+ FT_Byte FlagByte; /* table type and flags */
+ FT_ULong Tag; /* table file offset */
+ FT_ULong dst_length; /* uncompressed table length */
+ FT_ULong TransformLength; /* transformed length */
+
+ FT_ULong flags; /* calculated flags */
+ FT_ULong src_offset; /* compressed table offset */
+ FT_ULong src_length; /* compressed table length */
+ FT_ULong dst_offset; /* uncompressed table offset */
+
+ } WOFF2_TableRec, *WOFF2_Table;
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF2_InfoRec
+ *
+ * @description:
+ * Metadata for WOFF2 font that may be required for reconstruction of
+ * sfnt tables.
+ *
+ * @fields:
+ * header_checksum ::
+ * Checksum of SFNT offset table.
+ *
+ * num_glyphs ::
+ * Number of glyphs in the font.
+ *
+ * num_hmetrics ::
+ * `numberOfHMetrics` field in the 'hhea' table.
+ *
+ * x_mins ::
+ * `xMin` values of glyph bounding box.
+ *
+ * glyf_table ::
+ * A pointer to the `glyf' table record.
+ *
+ * loca_table ::
+ * A pointer to the `loca' table record.
+ *
+ * head_table ::
+ * A pointer to the `head' table record.
+ */
+ typedef struct WOFF2_InfoRec_
+ {
+ FT_ULong header_checksum;
+ FT_UShort num_glyphs;
+ FT_UShort num_hmetrics;
+ FT_Short* x_mins;
+
+ WOFF2_Table glyf_table;
+ WOFF2_Table loca_table;
+ WOFF2_Table head_table;
+
+ } WOFF2_InfoRec, *WOFF2_Info;
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF2_SubstreamRec
+ *
+ * @description:
+ * This structure stores information about a substream in the transformed
+ * 'glyf' table in a WOFF2 stream.
+ *
+ * @fields:
+ * start ::
+ * Beginning of the substream relative to uncompressed table stream.
+ *
+ * offset ::
+ * Offset of the substream relative to uncompressed table stream.
+ *
+ * size ::
+ * Size of the substream.
+ */
+ typedef struct WOFF2_SubstreamRec_
+ {
+ FT_ULong start;
+ FT_ULong offset;
+ FT_ULong size;
+
+ } WOFF2_SubstreamRec, *WOFF2_Substream;
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * WOFF2_PointRec
+ *
+ * @description:
+ * This structure stores information about a point in the transformed
+ * 'glyf' table in a WOFF2 stream.
+ *
+ * @fields:
+ * x ::
+ * x-coordinate of point.
+ *
+ * y ::
+ * y-coordinate of point.
+ *
+ * on_curve ::
+ * Set if point is on-curve.
+ */
+ typedef struct WOFF2_PointRec_
+ {
+ FT_Int x;
+ FT_Int y;
+ FT_Bool on_curve;
+
+ } WOFF2_PointRec, *WOFF2_Point;
+
+
FT_END_HEADER
#endif /* WOFFTYPES_H_ */
diff --git a/src/3rdparty/freetype/include/freetype/t1tables.h b/src/3rdparty/freetype/include/freetype/t1tables.h
index 645e645720..426e14024e 100644
--- a/src/3rdparty/freetype/include/freetype/t1tables.h
+++ b/src/3rdparty/freetype/include/freetype/t1tables.h
@@ -5,7 +5,7 @@
* Basic Type 1/Type 2 tables definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,8 +21,7 @@
#define T1TABLES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/ttnameid.h b/src/3rdparty/freetype/include/freetype/ttnameid.h
index cc677de75a..2b2ed4c613 100644
--- a/src/3rdparty/freetype/include/freetype/ttnameid.h
+++ b/src/3rdparty/freetype/include/freetype/ttnameid.h
@@ -4,7 +4,7 @@
*
* TrueType name ID definitions (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define TTNAMEID_H_
-#include <ft2build.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/include/freetype/tttables.h b/src/3rdparty/freetype/include/freetype/tttables.h
index d04f810218..c8fa35ef8e 100644
--- a/src/3rdparty/freetype/include/freetype/tttables.h
+++ b/src/3rdparty/freetype/include/freetype/tttables.h
@@ -5,7 +5,7 @@
* Basic SFNT/TrueType tables definitions and interface
* (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,8 +21,7 @@
#define TTTABLES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/include/freetype/tttags.h b/src/3rdparty/freetype/include/freetype/tttags.h
index bd0986eff0..3c9fbd59d7 100644
--- a/src/3rdparty/freetype/include/freetype/tttags.h
+++ b/src/3rdparty/freetype/include/freetype/tttags.h
@@ -4,7 +4,7 @@
*
* Tags for TrueType and OpenType tables (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define TTAGS_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -107,6 +106,7 @@ FT_BEGIN_HEADER
#define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' )
#define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' )
#define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' )
+#define TTAG_wOF2 FT_MAKE_TAG( 'w', 'O', 'F', '2' )
/* used by "Keyboard.dfont" on legacy Mac OS X */
#define TTAG_0xA5kbd FT_MAKE_TAG( 0xA5, 'k', 'b', 'd' )
diff --git a/src/3rdparty/freetype/include/freetype/ttunpat.h b/src/3rdparty/freetype/include/freetype/ttunpat.h
deleted file mode 100644
index 8ea556895c..0000000000
--- a/src/3rdparty/freetype/include/freetype/ttunpat.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttunpat.h */
-/* */
-/* Definitions for the unpatented TrueType hinting system */
-/* */
-/* Copyright 2003-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* Written by Graham Asher <graham.asher@btinternet.com> */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __TTUNPAT_H__
-#define __TTUNPAT_H__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_UNPATENTED_HINTING
- *
- * @description:
- * A constant used as the tag of an @FT_Parameter structure to indicate
- * that unpatented methods only should be used by the TrueType bytecode
- * interpreter for a typeface opened by @FT_Open_Face.
- *
- */
-#define FT_PARAM_TAG_UNPATENTED_HINTING FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __TTUNPAT_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/include/ft2build.h b/src/3rdparty/freetype/include/ft2build.h
index e3f4887943..b4fd1f8c3e 100644
--- a/src/3rdparty/freetype/include/ft2build.h
+++ b/src/3rdparty/freetype/include/ft2build.h
@@ -4,7 +4,7 @@
*
* FreeType 2 build and setup macros.
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,16 +18,14 @@
/**************************************************************************
*
- * This is the 'entry point' for FreeType header file inclusions. It is
- * the only header file which should be included directly; all other
- * FreeType header files should be accessed with macro names (after
- * including `ft2build.h`).
+ * This is the 'entry point' for FreeType header file inclusions, to be
+ * loaded before all other header files.
*
* A typical example is
*
* ```
* #include <ft2build.h>
- * #include FT_FREETYPE_H
+ * #include <freetype/freetype.h>
* ```
*
*/
diff --git a/src/3rdparty/freetype/qt_attribution.json b/src/3rdparty/freetype/qt_attribution.json
index 93a48ce208..398a623d01 100644
--- a/src/3rdparty/freetype/qt_attribution.json
+++ b/src/3rdparty/freetype/qt_attribution.json
@@ -7,12 +7,12 @@
"Description": "FreeType is a freely available software library to render fonts.",
"Homepage": "http://www.freetype.org",
- "Version": "2.10.1",
+ "Version": "2.10.4",
"License": "Freetype Project License or GNU General Public License v2.0 only",
"LicenseId": "FTL OR GPL-2.0",
"LicenseFile": "LICENSE.txt",
- "Copyright": "Copyright 2006-2015 by David Turner, Robert Wilhelm, and Werner Lemberg."
+ "Copyright": "Copyright 2006-2020 by David Turner, Robert Wilhelm, and Werner Lemberg."
},
{
"Id": "freetype-zlib",
diff --git a/src/3rdparty/freetype/src/Jamfile b/src/3rdparty/freetype/src/Jamfile
deleted file mode 100644
index 3ad2d5c962..0000000000
--- a/src/3rdparty/freetype/src/Jamfile
+++ /dev/null
@@ -1,19 +0,0 @@
-# FreeType 2 src Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) ;
-
-for xx in $(FT2_COMPONENTS)
-{
- SubInclude FT2_TOP $(FT2_SRC_DIR) $(xx) ;
-}
-
-# end of src Jamfile
diff --git a/src/3rdparty/freetype/src/autofit/Jamfile b/src/3rdparty/freetype/src/autofit/Jamfile
deleted file mode 100644
index ea69dee377..0000000000
--- a/src/3rdparty/freetype/src/autofit/Jamfile
+++ /dev/null
@@ -1,53 +0,0 @@
-# FreeType 2 src/autofit Jamfile
-#
-# Copyright (C) 2003-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP src autofit ;
-
-{
- local _sources ;
-
- # define FT2_AUTOFIT2 to enable experimental latin hinter replacement
- if $(FT2_AUTOFIT2)
- {
- CCFLAGS += FT_OPTION_AUTOFIT2 ;
- }
- if $(FT2_MULTI)
- {
- _sources = afangles
- afblue
- afcjk
- afdummy
- afglobal
- afhints
- afindic
- aflatin
- afloader
- afmodule
- afpic
- afranges
- afshaper
- afwarp
- ;
-
- if $(FT2_AUTOFIT2)
- {
- _sources += aflatin2 ;
- }
- }
- else
- {
- _sources = autofit ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/autofit Jamfile
diff --git a/src/3rdparty/freetype/src/autofit/afangles.c b/src/3rdparty/freetype/src/autofit/afangles.c
index 9e1f7a21ff..a2d45eb72c 100644
--- a/src/3rdparty/freetype/src/autofit/afangles.c
+++ b/src/3rdparty/freetype/src/autofit/afangles.c
@@ -5,7 +5,7 @@
* Routines used to compute vector angles with limited accuracy
* and very high speed. It also contains sorting routines (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afblue.c b/src/3rdparty/freetype/src/autofit/afblue.c
index b99dbeb19c..9ebffdd099 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.c
+++ b/src/3rdparty/freetype/src/autofit/afblue.c
@@ -7,7 +7,7 @@
*
* Auto-fitter data for blue strings (body).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -134,7 +134,7 @@
'\0',
'\xF0', '\x90', '\x90', '\xA8', ' ', '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x91', '\x83', /* 𐐨 𐐪 𐐬 𐐿 𐑃 */
'\0',
- '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x85', ' ', '\xE0', '\xA4', '\x86', ' ', '\xE0', '\xA4', '\xA5', ' ', '\xE0', '\xA4', '\xA7', ' ', '\xE0', '\xA4', '\xAD', ' ', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */
+ '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xA8', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x89', ' ', '\xE0', '\xA4', '\x9B', ' ', '\xE0', '\xA4', '\x9F', ' ', '\xE0', '\xA4', '\xA0', ' ', '\xE0', '\xA4', '\xA1', /* क न म उ छ ट ठ ड */
'\0',
'\xE0', '\xA4', '\x88', ' ', '\xE0', '\xA4', '\x90', ' ', '\xE0', '\xA4', '\x93', ' ', '\xE0', '\xA4', '\x94', ' ', '\xE0', '\xA4', '\xBF', ' ', '\xE0', '\xA5', '\x80', ' ', '\xE0', '\xA5', '\x8B', ' ', '\xE0', '\xA5', '\x8C', /* ई ऐ ओ औ ि ी ो ौ */
'\0',
@@ -296,6 +296,20 @@
'\0',
'\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xA7', ' ', '\xE0', '\xB4', '\xB6', ' ', '\xE0', '\xB4', '\x98', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xA5', ' ', '\xE0', '\xB4', '\xB2', /* ട ഠ ധ ശ ഘ ച ഥ ല */
'\0',
+ '\xF0', '\x96', '\xB9', '\x80', ' ', '\xF0', '\x96', '\xB9', '\x81', ' ', '\xF0', '\x96', '\xB9', '\x82', ' ', '\xF0', '\x96', '\xB9', '\x83', ' ', '\xF0', '\x96', '\xB9', '\x8F', ' ', '\xF0', '\x96', '\xB9', '\x9A', ' ', '\xF0', '\x96', '\xB9', '\x9F', /* 𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹟 */
+ '\0',
+ '\xF0', '\x96', '\xB9', '\x80', ' ', '\xF0', '\x96', '\xB9', '\x81', ' ', '\xF0', '\x96', '\xB9', '\x82', ' ', '\xF0', '\x96', '\xB9', '\x83', ' ', '\xF0', '\x96', '\xB9', '\x8F', ' ', '\xF0', '\x96', '\xB9', '\x9A', ' ', '\xF0', '\x96', '\xB9', '\x92', ' ', '\xF0', '\x96', '\xB9', '\x93', /* 𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹒 𖹓 */
+ '\0',
+ '\xF0', '\x96', '\xB9', '\xA4', ' ', '\xF0', '\x96', '\xB9', '\xAC', ' ', '\xF0', '\x96', '\xB9', '\xA7', ' ', '\xF0', '\x96', '\xB9', '\xB4', ' ', '\xF0', '\x96', '\xB9', '\xB6', ' ', '\xF0', '\x96', '\xB9', '\xBE', /* 𖹤 𖹬 𖹧 𖹴 𖹶 𖹾 */
+ '\0',
+ '\xF0', '\x96', '\xB9', '\xA0', ' ', '\xF0', '\x96', '\xB9', '\xA1', ' ', '\xF0', '\x96', '\xB9', '\xA2', ' ', '\xF0', '\x96', '\xB9', '\xB9', ' ', '\xF0', '\x96', '\xB9', '\xB3', ' ', '\xF0', '\x96', '\xB9', '\xAE', /* 𖹠 𖹡 𖹢 𖹹 𖹳 𖹮 */
+ '\0',
+ '\xF0', '\x96', '\xB9', '\xA0', ' ', '\xF0', '\x96', '\xB9', '\xA1', ' ', '\xF0', '\x96', '\xB9', '\xA2', ' ', '\xF0', '\x96', '\xB9', '\xB3', ' ', '\xF0', '\x96', '\xB9', '\xAD', ' ', '\xF0', '\x96', '\xB9', '\xBD', /* 𖹠 𖹡 𖹢 𖹳 𖹭 𖹽 */
+ '\0',
+ '\xF0', '\x96', '\xB9', '\xA5', ' ', '\xF0', '\x96', '\xB9', '\xA8', ' ', '\xF0', '\x96', '\xB9', '\xA9', /* 𖹥 𖹨 𖹩 */
+ '\0',
+ '\xF0', '\x96', '\xBA', '\x80', ' ', '\xF0', '\x96', '\xBA', '\x85', ' ', '\xF0', '\x96', '\xBA', '\x88', ' ', '\xF0', '\x96', '\xBA', '\x84', ' ', '\xF0', '\x96', '\xBA', '\x8D', /* 𖺀 𖺅 𖺈 𖺄 𖺍 */
+ '\0',
'\xE1', '\xA0', '\xB3', ' ', '\xE1', '\xA0', '\xB4', ' ', '\xE1', '\xA0', '\xB6', ' ', '\xE1', '\xA0', '\xBD', ' ', '\xE1', '\xA1', '\x82', ' ', '\xE1', '\xA1', '\x8A', ' ', '\xE2', '\x80', '\x8D', '\xE1', '\xA1', '\xA1', '\xE2', '\x80', '\x8D', ' ', '\xE2', '\x80', '\x8D', '\xE1', '\xA1', '\xB3', '\xE2', '\x80', '\x8D', /* ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍ */
'\0',
'\xE1', '\xA1', '\x83', /* ᡃ */
@@ -340,6 +354,12 @@
'\0',
'\xF0', '\x90', '\x92', '\x80', ' ', '\xF0', '\x90', '\x92', '\x82', ' ', '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x88', ' ', '\xF0', '\x90', '\x92', '\x8A', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA9', /* 𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩 */
'\0',
+ '\xF0', '\x90', '\xB4', '\x83', ' ', '\xF0', '\x90', '\xB4', '\x80', ' ', '\xF0', '\x90', '\xB4', '\x86', ' ', '\xF0', '\x90', '\xB4', '\x96', ' ', '\xF0', '\x90', '\xB4', '\x95', /* 𐴃 𐴀 𐴆 𐴖 𐴕 */
+ '\0',
+ '\xF0', '\x90', '\xB4', '\x94', ' ', '\xF0', '\x90', '\xB4', '\x96', ' ', '\xF0', '\x90', '\xB4', '\x95', ' ', '\xF0', '\x90', '\xB4', '\x91', ' ', '\xF0', '\x90', '\xB4', '\x90', /* 𐴔 𐴖 𐴕 𐴑 𐴐 */
+ '\0',
+ '\xD9', '\x80', /* ـ */
+ '\0',
'\xEA', '\xA2', '\x9C', ' ', '\xEA', '\xA2', '\x9E', ' ', '\xEA', '\xA2', '\xB3', ' ', '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\x96', ' ', '\xEA', '\xA2', '\x92', ' ', '\xEA', '\xA2', '\x9D', ' ', '\xEA', '\xA2', '\x9B', /* ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ */
'\0',
'\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\xA8', ' ', '\xEA', '\xA2', '\xBA', ' ', '\xEA', '\xA2', '\xA4', ' ', '\xEA', '\xA2', '\x8E', /* ꢂ ꢨ ꢺ ꢤ ꢎ */
@@ -488,14 +508,14 @@
{ AF_BLUE_STRING_CHAKMA_BOTTOM, 0 },
{ AF_BLUE_STRING_CHAKMA_DESCENDER, 0 },
{ AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_CARIAN_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
@@ -595,6 +615,9 @@
{ AF_BLUE_STRING_HEBREW_BOTTOM, 0 },
{ AF_BLUE_STRING_HEBREW_DESCENDER, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_KANNADA_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
{ AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 },
@@ -613,9 +636,6 @@
AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
{ AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_KANNADA_BOTTOM, 0 },
- { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
{ AF_BLUE_STRING_LAO_BOTTOM, 0 },
@@ -653,6 +673,15 @@
{ AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0 },
+ { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_MONGOLIAN_TOP_BASE, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0 },
{ AF_BLUE_STRING_MAX, 0 },
@@ -687,6 +716,10 @@
{ AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_OSMANYA_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_ROHINGYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0 },
+ { AF_BLUE_STRING_ROHINGYA_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
@@ -714,9 +747,6 @@
{ AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_TELUGU_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
- { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_TIFINAGH, 0 },
- { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
{ AF_BLUE_STRING_THAI_BOTTOM, 0 },
@@ -726,6 +756,9 @@
{ AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 },
{ AF_BLUE_STRING_THAI_DIGIT_TOP, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_TIFINAGH, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_VAI_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
diff --git a/src/3rdparty/freetype/src/autofit/afblue.cin b/src/3rdparty/freetype/src/autofit/afblue.cin
index 6545d1fd43..c6a697fee0 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.cin
+++ b/src/3rdparty/freetype/src/autofit/afblue.cin
@@ -4,7 +4,7 @@
*
* Auto-fitter data for blue strings (body).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afblue.dat b/src/3rdparty/freetype/src/autofit/afblue.dat
index 46db43fe22..b19b8df0f4 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.dat
+++ b/src/3rdparty/freetype/src/autofit/afblue.dat
@@ -2,7 +2,7 @@
//
// Auto-fitter data for blue strings.
//
-// Copyright (C) 2013-2019 by
+// Copyright (C) 2013-2020 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used,
@@ -203,7 +203,7 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
"𐐨 𐐪 𐐬 𐐿 𐑃"
AF_BLUE_STRING_DEVANAGARI_BASE
- "क म अ आ थ ध भ श"
+ "क न म उ छ ट ठ ड"
AF_BLUE_STRING_DEVANAGARI_TOP
"ई ऐ ओ औ ि ी ो ौ"
// note that some fonts have extreme variation in the height of the
@@ -392,6 +392,21 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
AF_BLUE_STRING_MALAYALAM_BOTTOM
"ട ഠ ധ ശ ഘ ച ഥ ല"
+ AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP
+ "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹟"
+ AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM
+ "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹒 𖹓"
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP
+ "𖹤 𖹬 𖹧 𖹴 𖹶 𖹾"
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP
+ "𖹠 𖹡 𖹢 𖹹 𖹳 𖹮"
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM
+ "𖹠 𖹡 𖹢 𖹳 𖹭 𖹽"
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER
+ "𖹥 𖹨 𖹩"
+ AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP
+ "𖺀 𖺅 𖺈 𖺄 𖺍"
+
AF_BLUE_STRING_MONGOLIAN_TOP_BASE
"ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍"
AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE
@@ -443,6 +458,13 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
AF_BLUE_STRING_OSMANYA_BOTTOM
"𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩"
+ AF_BLUE_STRING_ROHINGYA_TOP
+ "𐴃 𐴀 𐴆 𐴖 𐴕"
+ AF_BLUE_STRING_ROHINGYA_BOTTOM
+ "𐴔 𐴖 𐴕 𐴑 𐴐"
+ AF_BLUE_STRING_ROHINGYA_JOIN
+ "ـ"
+
AF_BLUE_STRING_SAURASHTRA_TOP
"ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ"
AF_BLUE_STRING_SAURASHTRA_BOTTOM
@@ -734,14 +756,14 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_MAX, 0 }
AF_BLUE_STRINGSET_CANS
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
- AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
AF_BLUE_STRINGSET_CARI
{ AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
@@ -874,6 +896,11 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_HEBREW_DESCENDER, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_KNDA
+ { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_KALI
{ AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
@@ -898,11 +925,6 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
- AF_BLUE_STRINGSET_KNDA
- { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
AF_BLUE_STRINGSET_LAO
{ AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
@@ -952,6 +974,17 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_MEDF
+ { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0 }
+ { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_MONG
{ AF_BLUE_STRING_MONGOLIAN_TOP_BASE, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0 }
@@ -1002,6 +1035,12 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_OSMANYA_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_ROHG
+ { AF_BLUE_STRING_ROHINGYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0 }
+ { AF_BLUE_STRING_ROHINGYA_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_SAUR
{ AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 }
@@ -1043,11 +1082,6 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_TELUGU_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
- AF_BLUE_STRINGSET_TFNG
- { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_TIFINAGH, 0 }
- { AF_BLUE_STRING_MAX, 0 }
-
AF_BLUE_STRINGSET_THAI
{ AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
@@ -1059,6 +1093,11 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_THAI_DIGIT_TOP, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_TFNG
+ { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_TIFINAGH, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_VAII
{ AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_VAI_BOTTOM, 0 }
diff --git a/src/3rdparty/freetype/src/autofit/afblue.h b/src/3rdparty/freetype/src/autofit/afblue.h
index b69b1df521..486d663b6c 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.h
+++ b/src/3rdparty/freetype/src/autofit/afblue.h
@@ -7,7 +7,7 @@
*
* Auto-fitter data for blue strings (specification).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -212,58 +212,68 @@ FT_BEGIN_HEADER
AF_BLUE_STRING_LISU_BOTTOM = 3506,
AF_BLUE_STRING_MALAYALAM_TOP = 3538,
AF_BLUE_STRING_MALAYALAM_BOTTOM = 3582,
- AF_BLUE_STRING_MONGOLIAN_TOP_BASE = 3614,
- AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE = 3658,
- AF_BLUE_STRING_MYANMAR_TOP = 3662,
- AF_BLUE_STRING_MYANMAR_BOTTOM = 3694,
- AF_BLUE_STRING_MYANMAR_ASCENDER = 3726,
- AF_BLUE_STRING_MYANMAR_DESCENDER = 3754,
- AF_BLUE_STRING_NKO_TOP = 3786,
- AF_BLUE_STRING_NKO_BOTTOM = 3810,
- AF_BLUE_STRING_NKO_SMALL_TOP = 3825,
- AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3834,
- AF_BLUE_STRING_OL_CHIKI = 3846,
- AF_BLUE_STRING_OLD_TURKIC_TOP = 3870,
- AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3885,
- AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3905,
- AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3945,
- AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3975,
- AF_BLUE_STRING_OSAGE_SMALL_TOP = 3990,
- AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 4030,
- AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4070,
- AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4095,
- AF_BLUE_STRING_OSMANYA_TOP = 4110,
- AF_BLUE_STRING_OSMANYA_BOTTOM = 4150,
- AF_BLUE_STRING_SAURASHTRA_TOP = 4190,
- AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4222,
- AF_BLUE_STRING_SHAVIAN_TOP = 4242,
- AF_BLUE_STRING_SHAVIAN_BOTTOM = 4252,
- AF_BLUE_STRING_SHAVIAN_DESCENDER = 4277,
- AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4287,
- AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4322,
- AF_BLUE_STRING_SINHALA_TOP = 4337,
- AF_BLUE_STRING_SINHALA_BOTTOM = 4369,
- AF_BLUE_STRING_SINHALA_DESCENDER = 4401,
- AF_BLUE_STRING_SUNDANESE_TOP = 4445,
- AF_BLUE_STRING_SUNDANESE_BOTTOM = 4469,
- AF_BLUE_STRING_SUNDANESE_DESCENDER = 4501,
- AF_BLUE_STRING_TAI_VIET_TOP = 4509,
- AF_BLUE_STRING_TAI_VIET_BOTTOM = 4529,
- AF_BLUE_STRING_TAMIL_TOP = 4541,
- AF_BLUE_STRING_TAMIL_BOTTOM = 4573,
- AF_BLUE_STRING_TELUGU_TOP = 4605,
- AF_BLUE_STRING_TELUGU_BOTTOM = 4633,
- AF_BLUE_STRING_THAI_TOP = 4661,
- AF_BLUE_STRING_THAI_BOTTOM = 4685,
- AF_BLUE_STRING_THAI_ASCENDER = 4713,
- AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4725,
- AF_BLUE_STRING_THAI_DESCENDER = 4737,
- AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4753,
- AF_BLUE_STRING_THAI_DIGIT_TOP = 4761,
- AF_BLUE_STRING_TIFINAGH = 4773,
- AF_BLUE_STRING_VAI_TOP = 4805,
- AF_BLUE_STRING_VAI_BOTTOM = 4837,
- af_blue_1_1 = 4868,
+ AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP = 3614,
+ AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM = 3649,
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP = 3689,
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP = 3719,
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM = 3749,
+ AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER = 3779,
+ AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP = 3794,
+ AF_BLUE_STRING_MONGOLIAN_TOP_BASE = 3819,
+ AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE = 3863,
+ AF_BLUE_STRING_MYANMAR_TOP = 3867,
+ AF_BLUE_STRING_MYANMAR_BOTTOM = 3899,
+ AF_BLUE_STRING_MYANMAR_ASCENDER = 3931,
+ AF_BLUE_STRING_MYANMAR_DESCENDER = 3959,
+ AF_BLUE_STRING_NKO_TOP = 3991,
+ AF_BLUE_STRING_NKO_BOTTOM = 4015,
+ AF_BLUE_STRING_NKO_SMALL_TOP = 4030,
+ AF_BLUE_STRING_NKO_SMALL_BOTTOM = 4039,
+ AF_BLUE_STRING_OL_CHIKI = 4051,
+ AF_BLUE_STRING_OLD_TURKIC_TOP = 4075,
+ AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 4090,
+ AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 4110,
+ AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 4150,
+ AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 4180,
+ AF_BLUE_STRING_OSAGE_SMALL_TOP = 4195,
+ AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 4235,
+ AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4275,
+ AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4300,
+ AF_BLUE_STRING_OSMANYA_TOP = 4315,
+ AF_BLUE_STRING_OSMANYA_BOTTOM = 4355,
+ AF_BLUE_STRING_ROHINGYA_TOP = 4395,
+ AF_BLUE_STRING_ROHINGYA_BOTTOM = 4420,
+ AF_BLUE_STRING_ROHINGYA_JOIN = 4445,
+ AF_BLUE_STRING_SAURASHTRA_TOP = 4448,
+ AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4480,
+ AF_BLUE_STRING_SHAVIAN_TOP = 4500,
+ AF_BLUE_STRING_SHAVIAN_BOTTOM = 4510,
+ AF_BLUE_STRING_SHAVIAN_DESCENDER = 4535,
+ AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4545,
+ AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4580,
+ AF_BLUE_STRING_SINHALA_TOP = 4595,
+ AF_BLUE_STRING_SINHALA_BOTTOM = 4627,
+ AF_BLUE_STRING_SINHALA_DESCENDER = 4659,
+ AF_BLUE_STRING_SUNDANESE_TOP = 4703,
+ AF_BLUE_STRING_SUNDANESE_BOTTOM = 4727,
+ AF_BLUE_STRING_SUNDANESE_DESCENDER = 4759,
+ AF_BLUE_STRING_TAI_VIET_TOP = 4767,
+ AF_BLUE_STRING_TAI_VIET_BOTTOM = 4787,
+ AF_BLUE_STRING_TAMIL_TOP = 4799,
+ AF_BLUE_STRING_TAMIL_BOTTOM = 4831,
+ AF_BLUE_STRING_TELUGU_TOP = 4863,
+ AF_BLUE_STRING_TELUGU_BOTTOM = 4891,
+ AF_BLUE_STRING_THAI_TOP = 4919,
+ AF_BLUE_STRING_THAI_BOTTOM = 4943,
+ AF_BLUE_STRING_THAI_ASCENDER = 4971,
+ AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4983,
+ AF_BLUE_STRING_THAI_DESCENDER = 4995,
+ AF_BLUE_STRING_THAI_LARGE_DESCENDER = 5011,
+ AF_BLUE_STRING_THAI_DIGIT_TOP = 5019,
+ AF_BLUE_STRING_TIFINAGH = 5031,
+ AF_BLUE_STRING_VAI_TOP = 5063,
+ AF_BLUE_STRING_VAI_BOTTOM = 5095,
+ af_blue_1_1 = 5126,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 203,
@@ -347,35 +357,37 @@ FT_BEGIN_HEADER
AF_BLUE_STRINGSET_GUJR = 112,
AF_BLUE_STRINGSET_GURU = 118,
AF_BLUE_STRINGSET_HEBR = 124,
- AF_BLUE_STRINGSET_KALI = 128,
- AF_BLUE_STRINGSET_KHMR = 134,
- AF_BLUE_STRINGSET_KHMS = 140,
- AF_BLUE_STRINGSET_KNDA = 143,
+ AF_BLUE_STRINGSET_KNDA = 128,
+ AF_BLUE_STRINGSET_KALI = 131,
+ AF_BLUE_STRINGSET_KHMR = 137,
+ AF_BLUE_STRINGSET_KHMS = 143,
AF_BLUE_STRINGSET_LAO = 146,
AF_BLUE_STRINGSET_LATN = 152,
AF_BLUE_STRINGSET_LATB = 159,
AF_BLUE_STRINGSET_LATP = 166,
AF_BLUE_STRINGSET_LISU = 173,
AF_BLUE_STRINGSET_MLYM = 176,
- AF_BLUE_STRINGSET_MONG = 179,
- AF_BLUE_STRINGSET_MYMR = 182,
- AF_BLUE_STRINGSET_NKOO = 187,
- AF_BLUE_STRINGSET_NONE = 192,
- AF_BLUE_STRINGSET_OLCK = 193,
- AF_BLUE_STRINGSET_ORKH = 196,
- AF_BLUE_STRINGSET_OSGE = 199,
- AF_BLUE_STRINGSET_OSMA = 207,
- AF_BLUE_STRINGSET_SAUR = 210,
- AF_BLUE_STRINGSET_SHAW = 213,
- AF_BLUE_STRINGSET_SINH = 219,
- AF_BLUE_STRINGSET_SUND = 223,
- AF_BLUE_STRINGSET_TAML = 227,
- AF_BLUE_STRINGSET_TAVT = 230,
- AF_BLUE_STRINGSET_TELU = 233,
- AF_BLUE_STRINGSET_TFNG = 236,
- AF_BLUE_STRINGSET_THAI = 239,
- AF_BLUE_STRINGSET_VAII = 247,
- af_blue_2_1 = 250,
+ AF_BLUE_STRINGSET_MEDF = 179,
+ AF_BLUE_STRINGSET_MONG = 187,
+ AF_BLUE_STRINGSET_MYMR = 190,
+ AF_BLUE_STRINGSET_NKOO = 195,
+ AF_BLUE_STRINGSET_NONE = 200,
+ AF_BLUE_STRINGSET_OLCK = 201,
+ AF_BLUE_STRINGSET_ORKH = 204,
+ AF_BLUE_STRINGSET_OSGE = 207,
+ AF_BLUE_STRINGSET_OSMA = 215,
+ AF_BLUE_STRINGSET_ROHG = 218,
+ AF_BLUE_STRINGSET_SAUR = 222,
+ AF_BLUE_STRINGSET_SHAW = 225,
+ AF_BLUE_STRINGSET_SINH = 231,
+ AF_BLUE_STRINGSET_SUND = 235,
+ AF_BLUE_STRINGSET_TAML = 239,
+ AF_BLUE_STRINGSET_TAVT = 242,
+ AF_BLUE_STRINGSET_TELU = 245,
+ AF_BLUE_STRINGSET_THAI = 248,
+ AF_BLUE_STRINGSET_TFNG = 256,
+ AF_BLUE_STRINGSET_VAII = 259,
+ af_blue_2_1 = 262,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
af_blue_2_1_1 = af_blue_2_1 + 2,
diff --git a/src/3rdparty/freetype/src/autofit/afblue.hin b/src/3rdparty/freetype/src/autofit/afblue.hin
index 30a28dafa5..3957027091 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.hin
+++ b/src/3rdparty/freetype/src/autofit/afblue.hin
@@ -4,7 +4,7 @@
*
* Auto-fitter data for blue strings (specification).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afcjk.c b/src/3rdparty/freetype/src/autofit/afcjk.c
index a61689bee3..3b340cd5ed 100644
--- a/src/3rdparty/freetype/src/autofit/afcjk.c
+++ b/src/3rdparty/freetype/src/autofit/afcjk.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for CJK writing system (body).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -22,9 +22,8 @@
*
*/
-#include <ft2build.h>
-#include FT_ADVANCES_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/ftadvanc.h>
+#include <freetype/internal/ftdebug.h>
#include "afglobal.h"
#include "aflatin.h"
@@ -158,7 +157,7 @@
if ( !glyph_index )
goto Exit;
- FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
+ FT_TRACE5(( "standard character: U+%04lX (glyph index %ld)\n",
ch, glyph_index ));
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
@@ -261,9 +260,9 @@
dim == AF_DIMENSION_VERT ? "horizontal"
: "vertical" ));
- FT_TRACE5(( " %d (standard)", axis->standard_width ));
+ FT_TRACE5(( " %ld (standard)", axis->standard_width ));
for ( i = 1; i < axis->width_count; i++ )
- FT_TRACE5(( " %d", axis->widths[i].org ));
+ FT_TRACE5(( " %ld", axis->widths[i].org ));
FT_TRACE5(( "\n" ));
}
@@ -728,7 +727,7 @@
delta2 = FT_MulFix( delta2, scale );
- FT_TRACE5(( "delta: %d", delta1 ));
+ FT_TRACE5(( "delta: %ld", delta1 ));
if ( delta2 < 32 )
delta2 = 0;
#if 0
@@ -737,7 +736,7 @@
#endif
else
delta2 = FT_PIX_ROUND( delta2 );
- FT_TRACE5(( "/%d\n", delta2 ));
+ FT_TRACE5(( "/%ld\n", delta2 ));
if ( delta1 < 0 )
delta2 = -delta2;
@@ -806,7 +805,7 @@
{
AF_AxisHints axis = &hints->axis[dim];
AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
+ AF_Segment segment_limit = FT_OFFSET( segments, axis->num_segments );
FT_Error error;
AF_Segment seg;
@@ -1644,7 +1643,7 @@
stem_edge->pos = base_edge->pos + fitted_width;
- FT_TRACE5(( " CJKLINK: edge %d @%d (opos=%.2f) linked to %.2f,"
+ FT_TRACE5(( " CJKLINK: edge %ld @%d (opos=%.2f) linked to %.2f,"
" dist was %.2f, now %.2f\n",
stem_edge - hints->axis[dim].edges, stem_edge->fpos,
stem_edge->opos / 64.0, stem_edge->pos / 64.0,
@@ -1866,7 +1865,7 @@
continue;
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " CJKBLUE: edge %d @%d (opos=%.2f) snapped to %.2f,"
+ FT_TRACE5(( " CJKBLUE: edge %ld @%d (opos=%.2f) snapped to %.2f,"
" was %.2f\n",
edge1 - edges, edge1->fpos, edge1->opos / 64.0,
blue->fit / 64.0, edge1->pos / 64.0 ));
@@ -1930,7 +1929,7 @@
/* this should not happen, but it's better to be safe */
if ( edge2->blue_edge )
{
- FT_TRACE5(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
+ FT_TRACE5(( "ASSERTION FAILED for edge %ld\n", edge2-edges ));
af_cjk_align_linked_edge( hints, dim, edge2, edge );
edge->flags |= AF_EDGE_DONE;
diff --git a/src/3rdparty/freetype/src/autofit/afcjk.h b/src/3rdparty/freetype/src/autofit/afcjk.h
index 59acae5342..fd0f451aa8 100644
--- a/src/3rdparty/freetype/src/autofit/afcjk.h
+++ b/src/3rdparty/freetype/src/autofit/afcjk.h
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for CJK writing system (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afcover.h b/src/3rdparty/freetype/src/autofit/afcover.h
index ff207a97e0..03085ad07e 100644
--- a/src/3rdparty/freetype/src/autofit/afcover.h
+++ b/src/3rdparty/freetype/src/autofit/afcover.h
@@ -4,7 +4,7 @@
*
* Auto-fitter coverages (specification only).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afdummy.c b/src/3rdparty/freetype/src/autofit/afdummy.c
index 7e07a41e7d..77d31df974 100644
--- a/src/3rdparty/freetype/src/autofit/afdummy.c
+++ b/src/3rdparty/freetype/src/autofit/afdummy.c
@@ -5,7 +5,7 @@
* Auto-fitter dummy routines to be used if no hinting should be
* performed (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afdummy.h b/src/3rdparty/freetype/src/autofit/afdummy.h
index ab9227d35d..efd799e84b 100644
--- a/src/3rdparty/freetype/src/autofit/afdummy.h
+++ b/src/3rdparty/freetype/src/autofit/afdummy.h
@@ -5,7 +5,7 @@
* Auto-fitter dummy routines to be used if no hinting should be
* performed (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/aferrors.h b/src/3rdparty/freetype/src/autofit/aferrors.h
index 2ec336f72c..f90899944b 100644
--- a/src/3rdparty/freetype/src/autofit/aferrors.h
+++ b/src/3rdparty/freetype/src/autofit/aferrors.h
@@ -4,7 +4,7 @@
*
* Autofitter error codes (specification only).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef AFERRORS_H_
#define AFERRORS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX AF_Err_
#define FT_ERR_BASE FT_Mod_Err_Autofit
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* AFERRORS_H_ */
diff --git a/src/3rdparty/freetype/src/autofit/afglobal.c b/src/3rdparty/freetype/src/autofit/afglobal.c
index 6a9a1e5aaa..d5129423d5 100644
--- a/src/3rdparty/freetype/src/autofit/afglobal.c
+++ b/src/3rdparty/freetype/src/autofit/afglobal.c
@@ -4,7 +4,7 @@
*
* Auto-fitter routines to compute global hinting values (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#include "afglobal.h"
#include "afranges.h"
#include "afshaper.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
/**************************************************************************
@@ -306,7 +306,7 @@
if ( !( count % 10 ) )
FT_TRACE4(( " " ));
- FT_TRACE4(( " %d", idx ));
+ FT_TRACE4(( " %ld", idx ));
count++;
if ( !( count % 10 ) )
diff --git a/src/3rdparty/freetype/src/autofit/afglobal.h b/src/3rdparty/freetype/src/autofit/afglobal.h
index 52f38350db..fecf7af977 100644
--- a/src/3rdparty/freetype/src/autofit/afglobal.h
+++ b/src/3rdparty/freetype/src/autofit/afglobal.h
@@ -5,7 +5,7 @@
* Auto-fitter routines to compute global hinting values
* (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afhints.c b/src/3rdparty/freetype/src/autofit/afhints.c
index ed111c4117..a8e00890ef 100644
--- a/src/3rdparty/freetype/src/autofit/afhints.c
+++ b/src/3rdparty/freetype/src/autofit/afhints.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,8 +18,8 @@
#include "afhints.h"
#include "aferrors.h"
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftcalc.h>
+#include <freetype/internal/ftdebug.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/autofit/afhints.h b/src/3rdparty/freetype/src/autofit/afhints.h
index e0cf612f0c..6397f098f0 100644
--- a/src/3rdparty/freetype/src/autofit/afhints.h
+++ b/src/3rdparty/freetype/src/autofit/afhints.h
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afindic.c b/src/3rdparty/freetype/src/autofit/afindic.c
index a17117c712..bc2837a26d 100644
--- a/src/3rdparty/freetype/src/autofit/afindic.c
+++ b/src/3rdparty/freetype/src/autofit/afindic.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for Indic writing system (body).
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afindic.h b/src/3rdparty/freetype/src/autofit/afindic.h
index bc5bc59fa5..088b88b19d 100644
--- a/src/3rdparty/freetype/src/autofit/afindic.h
+++ b/src/3rdparty/freetype/src/autofit/afindic.h
@@ -5,7 +5,7 @@
* Auto-fitter hinting routines for Indic writing system
* (specification).
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/aflatin.c b/src/3rdparty/freetype/src/autofit/aflatin.c
index 27d4024882..21ec02ebd2 100644
--- a/src/3rdparty/freetype/src/autofit/aflatin.c
+++ b/src/3rdparty/freetype/src/autofit/aflatin.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for latin writing system (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,9 +16,8 @@
*/
-#include <ft2build.h>
-#include FT_ADVANCES_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/ftadvanc.h>
+#include <freetype/internal/ftdebug.h>
#include "afglobal.h"
#include "aflatin.h"
@@ -155,7 +154,7 @@
goto Exit;
}
- FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
+ FT_TRACE5(( "standard character: U+%04lX (glyph index %ld)\n",
ch, glyph_index ));
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
@@ -258,9 +257,9 @@
dim == AF_DIMENSION_VERT ? "horizontal"
: "vertical" ));
- FT_TRACE5(( " %d (standard)", axis->standard_width ));
+ FT_TRACE5(( " %ld (standard)", axis->standard_width ));
for ( i = 1; i < axis->width_count; i++ )
- FT_TRACE5(( " %d", axis->widths[i].org ));
+ FT_TRACE5(( " %ld", axis->widths[i].org ));
FT_TRACE5(( "\n" ));
}
@@ -1032,7 +1031,7 @@
{
*a = *b;
FT_TRACE5(( "blue zone overlap:"
- " adjusting %s %d to %ld\n",
+ " adjusting %s %ld to %ld\n",
a_is_top ? "overshoot" : "reference",
blue_sorted[i] - axis->blues,
*a ));
@@ -1280,7 +1279,7 @@
"af_latin_metrics_scale_dim:"
" x height alignment (style `%s'):\n"
" "
- " vertical scaling changed from %.5f to %.5f (by %d%%)\n"
+ " vertical scaling changed from %.5f to %.5f (by %ld%%)\n"
"\n",
af_style_names[metrics->root.style_class->style],
scale / 65536.0,
@@ -1333,7 +1332,7 @@
width->cur = FT_MulFix( width->org, scale );
width->fit = width->cur;
- FT_TRACE5(( " %d scaled to %.2f\n",
+ FT_TRACE5(( " %ld scaled to %.2f\n",
width->org,
width->cur / 64.0 ));
}
@@ -1474,8 +1473,8 @@
AF_LatinBlue blue = &axis->blues[nn];
- FT_TRACE5(( " reference %d: %d scaled to %.2f%s\n"
- " overshoot %d: %d scaled to %.2f%s\n",
+ FT_TRACE5(( " reference %d: %ld scaled to %.2f%s\n"
+ " overshoot %d: %ld scaled to %.2f%s\n",
nn,
blue->ref.org,
blue->ref.fit / 64.0,
@@ -1910,7 +1909,7 @@
/* sense -- this is used to better detect and ignore serifs */
{
AF_Segment segments = axis->segments;
- AF_Segment segments_end = segments + axis->num_segments;
+ AF_Segment segments_end = FT_OFFSET( segments, axis->num_segments );
for ( segment = segments; segment < segments_end; segment++ )
@@ -2314,7 +2313,7 @@
*/
{
AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
+ AF_Edge edge_limit = FT_OFFSET( edges, axis->num_edges );
AF_Edge edge;
@@ -2945,7 +2944,7 @@
stem_edge->pos = base_edge->pos + fitted_width;
- FT_TRACE5(( " LINK: edge %d (opos=%.2f) linked to %.2f,"
+ FT_TRACE5(( " LINK: edge %ld (opos=%.2f) linked to %.2f,"
" dist was %.2f, now %.2f\n",
stem_edge - hints->axis[dim].edges, stem_edge->opos / 64.0,
stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
@@ -3069,12 +3068,12 @@
#ifdef FT_DEBUG_LEVEL_TRACE
if ( !anchor )
- FT_TRACE5(( " BLUE_ANCHOR: edge %d (opos=%.2f) snapped to %.2f,"
- " was %.2f (anchor=edge %d)\n",
+ FT_TRACE5(( " BLUE_ANCHOR: edge %ld (opos=%.2f) snapped to %.2f,"
+ " was %.2f (anchor=edge %ld)\n",
edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
edge1->pos / 64.0, edge - edges ));
else
- FT_TRACE5(( " BLUE: edge %d (opos=%.2f) snapped to %.2f,"
+ FT_TRACE5(( " BLUE: edge %ld (opos=%.2f) snapped to %.2f,"
" was %.2f\n",
edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
edge1->pos / 64.0 ));
@@ -3123,7 +3122,7 @@
/* this should not happen, but it's better to be safe */
if ( edge2->blue_edge )
{
- FT_TRACE5(( " ASSERTION FAILED for edge %d\n", edge2 - edges ));
+ FT_TRACE5(( " ASSERTION FAILED for edge %ld\n", edge2 - edges ));
af_latin_align_linked_edge( hints, dim, edge2, edge );
edge->flags |= AF_EDGE_DONE;
@@ -3191,7 +3190,7 @@
anchor = edge;
edge->flags |= AF_EDGE_DONE;
- FT_TRACE5(( " ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
+ FT_TRACE5(( " ANCHOR: edge %ld (opos=%.2f) and %ld (opos=%.2f)"
" snapped to %.2f and %.2f\n",
edge - edges, edge->opos / 64.0,
edge2 - edges, edge2->opos / 64.0,
@@ -3220,7 +3219,7 @@
if ( edge2->flags & AF_EDGE_DONE )
{
- FT_TRACE5(( " ADJUST: edge %d (pos=%.2f) moved to %.2f\n",
+ FT_TRACE5(( " ADJUST: edge %ld (pos=%.2f) moved to %.2f\n",
edge - edges, edge->pos / 64.0,
( edge2->pos - cur_len ) / 64.0 ));
@@ -3261,7 +3260,7 @@
edge->pos = cur_pos1 - cur_len / 2;
edge2->pos = cur_pos1 + cur_len / 2;
- FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
+ FT_TRACE5(( " STEM: edge %ld (opos=%.2f) linked to %ld (opos=%.2f)"
" snapped to %.2f and %.2f\n",
edge - edges, edge->opos / 64.0,
edge2 - edges, edge2->opos / 64.0,
@@ -3292,7 +3291,7 @@
edge->pos = ( delta1 < delta2 ) ? cur_pos1 : cur_pos2;
edge2->pos = edge->pos + cur_len;
- FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
+ FT_TRACE5(( " STEM: edge %ld (opos=%.2f) linked to %ld (opos=%.2f)"
" snapped to %.2f and %.2f\n",
edge - edges, edge->opos / 64.0,
edge2 - edges, edge2->opos / 64.0,
@@ -3315,7 +3314,7 @@
if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
{
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
+ FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n",
edge - edges,
edge->pos / 64.0,
edge[-1].pos / 64.0 ));
@@ -3417,7 +3416,7 @@
if ( delta < 64 + 16 )
{
af_latin_align_serif_edge( hints, edge->serif, edge );
- FT_TRACE5(( " SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
+ FT_TRACE5(( " SERIF: edge %ld (opos=%.2f) serif to %ld (opos=%.2f)"
" aligned to %.2f\n",
edge - edges, edge->opos / 64.0,
edge->serif - edges, edge->serif->opos / 64.0,
@@ -3427,7 +3426,7 @@
{
edge->pos = FT_PIX_ROUND( edge->opos );
anchor = edge;
- FT_TRACE5(( " SERIF_ANCHOR: edge %d (opos=%.2f)"
+ FT_TRACE5(( " SERIF_ANCHOR: edge %ld (opos=%.2f)"
" snapped to %.2f\n",
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
}
@@ -3455,8 +3454,8 @@
after->pos - before->pos,
after->opos - before->opos );
- FT_TRACE5(( " SERIF_LINK1: edge %d (opos=%.2f) snapped to %.2f"
- " from %d (opos=%.2f)\n",
+ FT_TRACE5(( " SERIF_LINK1: edge %ld (opos=%.2f) snapped to %.2f"
+ " from %ld (opos=%.2f)\n",
edge - edges, edge->opos / 64.0,
edge->pos / 64.0,
before - edges, before->opos / 64.0 ));
@@ -3465,7 +3464,7 @@
{
edge->pos = anchor->pos +
( ( edge->opos - anchor->opos + 16 ) & ~31 );
- FT_TRACE5(( " SERIF_LINK2: edge %d (opos=%.2f)"
+ FT_TRACE5(( " SERIF_LINK2: edge %ld (opos=%.2f)"
" snapped to %.2f\n",
edge - edges, edge->opos / 64.0, edge->pos / 64.0 ));
}
@@ -3485,7 +3484,7 @@
if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
{
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
+ FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n",
edge - edges,
edge->pos / 64.0,
edge[-1].pos / 64.0 ));
@@ -3506,7 +3505,7 @@
if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
{
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
+ FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n",
edge - edges,
edge->pos / 64.0,
edge[1].pos / 64.0 ));
diff --git a/src/3rdparty/freetype/src/autofit/aflatin.h b/src/3rdparty/freetype/src/autofit/aflatin.h
index 40479538c2..62bc4c8d44 100644
--- a/src/3rdparty/freetype/src/autofit/aflatin.h
+++ b/src/3rdparty/freetype/src/autofit/aflatin.h
@@ -5,7 +5,7 @@
* Auto-fitter hinting routines for latin writing system
* (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/aflatin2.c b/src/3rdparty/freetype/src/autofit/aflatin2.c
index c601ab8d9a..902f3982e0 100644
--- a/src/3rdparty/freetype/src/autofit/aflatin2.c
+++ b/src/3rdparty/freetype/src/autofit/aflatin2.c
@@ -9,7 +9,7 @@
*
* Auto-fitter hinting routines for latin writing system (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,7 +21,7 @@
*/
-#include FT_ADVANCES_H
+#include <freetype/ftadvanc.h>
#ifdef FT_OPTION_AUTOFIT2
diff --git a/src/3rdparty/freetype/src/autofit/aflatin2.h b/src/3rdparty/freetype/src/autofit/aflatin2.h
index 507cef3df2..c2aebc49ac 100644
--- a/src/3rdparty/freetype/src/autofit/aflatin2.h
+++ b/src/3rdparty/freetype/src/autofit/aflatin2.h
@@ -10,7 +10,7 @@
* Auto-fitter hinting routines for latin writing system
* (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afloader.c b/src/3rdparty/freetype/src/autofit/afloader.c
index 83743b7be1..c35d85c4cf 100644
--- a/src/3rdparty/freetype/src/autofit/afloader.c
+++ b/src/3rdparty/freetype/src/autofit/afloader.c
@@ -4,7 +4,7 @@
*
* Auto-fitter glyph loading routines (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -22,7 +22,7 @@
#include "aferrors.h"
#include "afmodule.h"
-#include FT_INTERNAL_CALC_H
+#include <freetype/internal/ftcalc.h>
/* Initialize glyph loader. */
diff --git a/src/3rdparty/freetype/src/autofit/afloader.h b/src/3rdparty/freetype/src/autofit/afloader.h
index d1e0f3c093..97282371cd 100644
--- a/src/3rdparty/freetype/src/autofit/afloader.h
+++ b/src/3rdparty/freetype/src/autofit/afloader.h
@@ -4,7 +4,7 @@
*
* Auto-fitter glyph loading routines (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afmodule.c b/src/3rdparty/freetype/src/autofit/afmodule.c
index 3e46a3655a..e16494460e 100644
--- a/src/3rdparty/freetype/src/autofit/afmodule.c
+++ b/src/3rdparty/freetype/src/autofit/afmodule.c
@@ -4,7 +4,7 @@
*
* Auto-fitter module implementation (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -53,10 +53,10 @@
void* _af_debug_hints = _af_debug_hints_rec;
#endif
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_DRIVER_H
-#include FT_SERVICE_PROPERTIES_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftdriver.h>
+#include <freetype/internal/services/svprop.h>
/**************************************************************************
@@ -149,7 +149,7 @@
if ( !af_style_classes[ss] )
{
FT_TRACE0(( "af_property_set: Invalid value %d for property `%s'\n",
- fallback_script, property_name ));
+ *fallback_script, property_name ));
return FT_THROW( Invalid_Argument );
}
@@ -550,8 +550,8 @@
NULL, /* reset_face */
NULL, /* get_global_hints */
NULL, /* done_global_hints */
- (FT_AutoHinter_GlyphLoadFunc)af_autofitter_load_glyph ) /* load_glyph */
-
+ (FT_AutoHinter_GlyphLoadFunc)af_autofitter_load_glyph /* load_glyph */
+ )
FT_DEFINE_MODULE(
autofit_module_class,
diff --git a/src/3rdparty/freetype/src/autofit/afmodule.h b/src/3rdparty/freetype/src/autofit/afmodule.h
index b410809aa8..e8fe4a93aa 100644
--- a/src/3rdparty/freetype/src/autofit/afmodule.h
+++ b/src/3rdparty/freetype/src/autofit/afmodule.h
@@ -4,7 +4,7 @@
*
* Auto-fitter module implementation (specification).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,9 +19,8 @@
#ifndef AFMODULE_H_
#define AFMODULE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_MODULE_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftmodapi.h>
FT_BEGIN_HEADER
@@ -47,6 +46,7 @@ FT_BEGIN_HEADER
} AF_ModuleRec, *AF_Module;
+FT_DECLARE_AUTOHINTER_INTERFACE( af_autofitter_interface )
FT_DECLARE_MODULE( autofit_module_class )
diff --git a/src/3rdparty/freetype/src/autofit/afpic.c b/src/3rdparty/freetype/src/autofit/afpic.c
deleted file mode 100644
index d48d016a0e..0000000000
--- a/src/3rdparty/freetype/src/autofit/afpic.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/***************************************************************************/
-/* */
-/* afpic.c */
-/* */
-/* The FreeType position independent code services for autofit module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "afpic.h"
-#include "afglobal.h"
-#include "aferrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from afmodule.c */
- FT_Error
- FT_Create_Class_af_services( FT_Library library,
- FT_ServiceDescRec** output_class );
-
- void
- FT_Destroy_Class_af_services( FT_Library library,
- FT_ServiceDescRec* clazz );
-
- void
- FT_Init_Class_af_service_properties( FT_Service_PropertiesRec* clazz );
-
- void FT_Init_Class_af_autofitter_interface(
- FT_Library library,
- FT_AutoHinter_InterfaceRec* clazz );
-
-
- /* forward declaration of PIC init functions from writing system classes */
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) /* empty */
-
-#include "afwrtsys.h"
-
-
- void
- autofit_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->autofit )
- {
- AFModulePIC* container = (AFModulePIC*)pic_container->autofit;
-
-
- if ( container->af_services )
- FT_Destroy_Class_af_services( library,
- container->af_services );
- container->af_services = NULL;
-
- FT_FREE( container );
- pic_container->autofit = NULL;
- }
- }
-
-
- FT_Error
- autofit_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_UInt ss;
- FT_Error error = FT_Err_Ok;
- AFModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC ( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->autofit = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_af_services( library,
- &container->af_services );
- if ( error )
- goto Exit;
-
- FT_Init_Class_af_service_properties( &container->af_service_properties );
-
- for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX; ss++ )
- container->af_writing_system_classes[ss] =
- &container->af_writing_system_classes_rec[ss];
- container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX] = NULL;
-
- for ( ss = 0; ss < AF_SCRIPT_MAX; ss++ )
- container->af_script_classes[ss] =
- &container->af_script_classes_rec[ss];
- container->af_script_classes[AF_SCRIPT_MAX] = NULL;
-
- for ( ss = 0; ss < AF_STYLE_MAX; ss++ )
- container->af_style_classes[ss] =
- &container->af_style_classes_rec[ss];
- container->af_style_classes[AF_STYLE_MAX] = NULL;
-
-#undef WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS ) \
- FT_Init_Class_af_ ## ws ## _writing_system_class( \
- &container->af_writing_system_classes_rec[ss++] );
-
- ss = 0;
-#include "afwrtsys.h"
-
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, H, sss ) \
- FT_Init_Class_af_ ## s ## _script_class( \
- &container->af_script_classes_rec[ss++] );
-
- ss = 0;
-#include "afscript.h"
-
-#undef STYLE
-#define STYLE( s, S, d, ws, sc, bss, c ) \
- FT_Init_Class_af_ ## s ## _style_class( \
- &container->af_style_classes_rec[ss++] );
-
- ss = 0;
-#include "afstyles.h"
-
- FT_Init_Class_af_autofitter_interface(
- library, &container->af_autofitter_interface );
-
- Exit:
- if ( error )
- autofit_module_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/afpic.h b/src/3rdparty/freetype/src/autofit/afpic.h
deleted file mode 100644
index 0c73456785..0000000000
--- a/src/3rdparty/freetype/src/autofit/afpic.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/***************************************************************************/
-/* */
-/* afpic.h */
-/* */
-/* The FreeType position independent code services for autofit module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef AFPIC_H_
-#define AFPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define AF_SERVICES_GET af_services
-#define AF_SERVICE_PROPERTIES_GET af_service_properties
-
-#define AF_WRITING_SYSTEM_CLASSES_GET af_writing_system_classes
-#define AF_SCRIPT_CLASSES_GET af_script_classes
-#define AF_STYLE_CLASSES_GET af_style_classes
-#define AF_INTERFACE_GET af_autofitter_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* some include files required for members of AFModulePIC */
-#include FT_SERVICE_PROPERTIES_H
-
-#include "aftypes.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct AFModulePIC_
- {
- FT_ServiceDescRec* af_services;
- FT_Service_PropertiesRec af_service_properties;
-
- AF_WritingSystemClass af_writing_system_classes
- [AF_WRITING_SYSTEM_MAX + 1];
- AF_WritingSystemClassRec af_writing_system_classes_rec
- [AF_WRITING_SYSTEM_MAX];
-
- AF_ScriptClass af_script_classes
- [AF_SCRIPT_MAX + 1];
- AF_ScriptClassRec af_script_classes_rec
- [AF_SCRIPT_MAX];
-
- AF_StyleClass af_style_classes
- [AF_STYLE_MAX + 1];
- AF_StyleClassRec af_style_classes_rec
- [AF_STYLE_MAX];
-
- FT_AutoHinter_InterfaceRec af_autofitter_interface;
-
- } AFModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (AFModulePIC*)( (lib)->pic_container.autofit ) )
-
-#define AF_SERVICES_GET \
- ( GET_PIC( library )->af_services )
-#define AF_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->af_service_properties )
-
-#define AF_WRITING_SYSTEM_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_writing_system_classes )
-#define AF_SCRIPT_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_script_classes )
-#define AF_STYLE_CLASSES_GET \
- ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_style_classes )
-#define AF_INTERFACE_GET \
- ( GET_PIC( library )->af_autofitter_interface )
-
-
- /* see afpic.c for the implementation */
- void
- autofit_module_class_pic_free( FT_Library library );
-
- FT_Error
- autofit_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* AFPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/afranges.c b/src/3rdparty/freetype/src/autofit/afranges.c
index 45c8bbfc95..c8ebf5e784 100644
--- a/src/3rdparty/freetype/src/autofit/afranges.c
+++ b/src/3rdparty/freetype/src/autofit/afranges.c
@@ -4,7 +4,7 @@
*
* Auto-fitter Unicode script ranges (body).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -664,6 +664,18 @@
};
+ const AF_Script_UniRangeRec af_medf_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x16E40, 0x16E9F ), /* Medefaidrin */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_medf_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_mong_uniranges[] =
{
AF_UNIRANGE_REC( 0x1800, 0x18AF ), /* Mongolian */
@@ -778,6 +790,18 @@
};
+ const AF_Script_UniRangeRec af_rohg_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10D00, 0x10D3F ), /* Hanifi Rohingya */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_rohg_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_saur_uniranges[] =
{
AF_UNIRANGE_REC( 0xA880, 0xA8DF ), /* Saurashtra */
diff --git a/src/3rdparty/freetype/src/autofit/afranges.h b/src/3rdparty/freetype/src/autofit/afranges.h
index d5917aefed..c2ffda4b0f 100644
--- a/src/3rdparty/freetype/src/autofit/afranges.h
+++ b/src/3rdparty/freetype/src/autofit/afranges.h
@@ -4,7 +4,7 @@
*
* Auto-fitter Unicode script ranges (specification).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afscript.h b/src/3rdparty/freetype/src/autofit/afscript.h
index 2da8c70183..4cf9cc19f5 100644
--- a/src/3rdparty/freetype/src/autofit/afscript.h
+++ b/src/3rdparty/freetype/src/autofit/afscript.h
@@ -4,7 +4,7 @@
*
* Auto-fitter scripts (specification only).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -243,6 +243,12 @@
HINTING_BOTTOM_TO_TOP,
"\xE0\xB4\xA0 \xE0\xB4\xB1" ) /* ഠ റ */
+ SCRIPT( medf, MEDF,
+ "Medefaidrin",
+ HB_SCRIPT_MEDEFAIDRIN,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x96\xB9\xA1 \xF0\x96\xB9\x9B \xF0\x96\xB9\xAF" ) /* 𖹡 𖹛 𖹯 */
+
SCRIPT( mong, MONG,
"Mongolian",
HB_SCRIPT_MONGOLIAN,
@@ -291,6 +297,12 @@
HINTING_BOTTOM_TO_TOP,
"\xF0\x90\x92\x86 \xF0\x90\x92\xA0" ) /* 𐒆 𐒠 */
+ SCRIPT( rohg, ROHG,
+ "Hanifi Rohingya",
+ HB_SCRIPT_HANIFI_ROHINGYA,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\xB4\xB0" ) /* 𐴰 */
+
SCRIPT( saur, SAUR,
"Saurashtra",
HB_SCRIPT_SAURASHTRA,
diff --git a/src/3rdparty/freetype/src/autofit/afshaper.c b/src/3rdparty/freetype/src/autofit/afshaper.c
index a5191c6915..bbf7b6b1f9 100644
--- a/src/3rdparty/freetype/src/autofit/afshaper.c
+++ b/src/3rdparty/freetype/src/autofit/afshaper.c
@@ -4,7 +4,7 @@
*
* HarfBuzz interface for accessing OpenType features (body).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,9 +16,8 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_ADVANCES_H
+#include <freetype/freetype.h>
+#include <freetype/ftadvanc.h>
#include "afglobal.h"
#include "aftypes.h"
#include "afshaper.h"
diff --git a/src/3rdparty/freetype/src/autofit/afshaper.h b/src/3rdparty/freetype/src/autofit/afshaper.h
index 06a1e06616..138c27b32b 100644
--- a/src/3rdparty/freetype/src/autofit/afshaper.h
+++ b/src/3rdparty/freetype/src/autofit/afshaper.h
@@ -4,7 +4,7 @@
*
* HarfBuzz interface for accessing OpenType features (specification).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define AFSHAPER_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
diff --git a/src/3rdparty/freetype/src/autofit/afstyles.h b/src/3rdparty/freetype/src/autofit/afstyles.h
index 8d1d70812f..9113ec451e 100644
--- a/src/3rdparty/freetype/src/autofit/afstyles.h
+++ b/src/3rdparty/freetype/src/autofit/afstyles.h
@@ -4,7 +4,7 @@
*
* Auto-fitter styles (specification only).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -322,6 +322,13 @@
AF_BLUE_STRINGSET_MLYM,
AF_COVERAGE_DEFAULT )
+ STYLE( medf_dflt, MEDF_DFLT,
+ "Medefaidrin default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_MEDF,
+ AF_BLUE_STRINGSET_MEDF,
+ AF_COVERAGE_DEFAULT )
+
STYLE( mong_dflt, MONG_DFLT,
"Mongolian default style",
AF_WRITING_SYSTEM_LATIN,
@@ -378,6 +385,13 @@
AF_BLUE_STRINGSET_OSMA,
AF_COVERAGE_DEFAULT )
+ STYLE( rohg_dflt, ROHG_DFLT,
+ "Hanifi Rohingya default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_ROHG,
+ AF_BLUE_STRINGSET_ROHG,
+ AF_COVERAGE_DEFAULT )
+
STYLE( saur_dflt, SAUR_DFLT,
"Saurashtra default style",
AF_WRITING_SYSTEM_LATIN,
diff --git a/src/3rdparty/freetype/src/autofit/aftypes.h b/src/3rdparty/freetype/src/autofit/aftypes.h
index 579003d27d..5f040c6b4b 100644
--- a/src/3rdparty/freetype/src/autofit/aftypes.h
+++ b/src/3rdparty/freetype/src/autofit/aftypes.h
@@ -4,7 +4,7 @@
*
* Auto-fitter types (specification only).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -32,12 +32,11 @@
#ifndef AFTYPES_H_
#define AFTYPES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/freetype.h>
+#include <freetype/ftoutln.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
#include "afblue.h"
diff --git a/src/3rdparty/freetype/src/autofit/afwarp.c b/src/3rdparty/freetype/src/autofit/afwarp.c
index 84e9753ad9..808280df5d 100644
--- a/src/3rdparty/freetype/src/autofit/afwarp.c
+++ b/src/3rdparty/freetype/src/autofit/afwarp.c
@@ -4,7 +4,7 @@
*
* Auto-fitter warping algorithm (body).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afwarp.h b/src/3rdparty/freetype/src/autofit/afwarp.h
index 9a2c9a42c1..cdea23e7de 100644
--- a/src/3rdparty/freetype/src/autofit/afwarp.h
+++ b/src/3rdparty/freetype/src/autofit/afwarp.h
@@ -4,7 +4,7 @@
*
* Auto-fitter warping algorithm (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afwrtsys.h b/src/3rdparty/freetype/src/autofit/afwrtsys.h
index 5611cf441a..3990633d2d 100644
--- a/src/3rdparty/freetype/src/autofit/afwrtsys.h
+++ b/src/3rdparty/freetype/src/autofit/afwrtsys.h
@@ -4,7 +4,7 @@
*
* Auto-fitter writing systems (specification only).
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/autofit.c b/src/3rdparty/freetype/src/autofit/autofit.c
index facfec1744..ef5e7f1452 100644
--- a/src/3rdparty/freetype/src/autofit/autofit.c
+++ b/src/3rdparty/freetype/src/autofit/autofit.c
@@ -4,7 +4,7 @@
*
* Auto-fitter module (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "afangles.c"
#include "afblue.c"
diff --git a/src/3rdparty/freetype/src/autofit/hbshim.c b/src/3rdparty/freetype/src/autofit/hbshim.c
deleted file mode 100644
index 7a45059c39..0000000000
--- a/src/3rdparty/freetype/src/autofit/hbshim.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/***************************************************************************/
-/* */
-/* hbshim.c */
-/* */
-/* HarfBuzz interface for accessing OpenType features (body). */
-/* */
-/* Copyright 2013-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include "afglobal.h"
-#include "aftypes.h"
-#include "hbshim.h"
-
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_afharfbuzz
-
-
- /*
- * We use `sets' (in the HarfBuzz sense, which comes quite near to the
- * usual mathematical meaning) to manage both lookups and glyph indices.
- *
- * 1. For each coverage, collect lookup IDs in a set. Note that an
- * auto-hinter `coverage' is represented by one `feature', and a
- * feature consists of an arbitrary number of (font specific) `lookup's
- * that actually do the mapping job. Please check the OpenType
- * specification for more details on features and lookups.
- *
- * 2. Create glyph ID sets from the corresponding lookup sets.
- *
- * 3. The glyph set corresponding to AF_COVERAGE_DEFAULT is computed
- * with all lookups specific to the OpenType script activated. It
- * relies on the order of AF_DEFINE_STYLE_CLASS entries so that
- * special coverages (like `oldstyle figures') don't get overwritten.
- *
- */
-
-
- /* load coverage tags */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- static const hb_tag_t name ## _coverage[] = \
- { \
- HB_TAG( tag1, tag2, tag3, tag4 ), \
- HB_TAG_NONE \
- };
-
-
-#include "afcover.h"
-
-
- /* define mapping between coverage tags and AF_Coverage */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- name ## _coverage,
-
-
- static const hb_tag_t* coverages[] =
- {
-#include "afcover.h"
-
- NULL /* AF_COVERAGE_DEFAULT */
- };
-
-
- /* load HarfBuzz script tags */
-#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) h,
-
-
- static const hb_script_t scripts[] =
- {
-#include "afscript.h"
- };
-
-
- FT_Error
- af_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_UShort* gstyles )
- {
- hb_face_t* face;
-
- hb_set_t* gsub_lookups; /* GSUB lookups for a given script */
- hb_set_t* gsub_glyphs; /* glyphs covered by GSUB lookups */
- hb_set_t* gpos_lookups; /* GPOS lookups for a given script */
- hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */
-
- hb_script_t script;
- const hb_tag_t* coverage_tags;
- hb_tag_t script_tags[] = { HB_TAG_NONE,
- HB_TAG_NONE,
- HB_TAG_NONE,
- HB_TAG_NONE };
-
- hb_codepoint_t idx;
-#ifdef FT_DEBUG_LEVEL_TRACE
- int count;
-#endif
-
-
- if ( !globals || !style_class || !gstyles )
- return FT_THROW( Invalid_Argument );
-
- face = hb_font_get_face( globals->hb_font );
-
- gsub_lookups = hb_set_create();
- gsub_glyphs = hb_set_create();
- gpos_lookups = hb_set_create();
- gpos_glyphs = hb_set_create();
-
- coverage_tags = coverages[style_class->coverage];
- script = scripts[style_class->script];
-
- /* Convert a HarfBuzz script tag into the corresponding OpenType */
- /* tag or tags -- some Indic scripts like Devanagari have an old */
- /* and a new set of features. */
- hb_ot_tags_from_script( script,
- &script_tags[0],
- &script_tags[1] );
-
- /* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */
- /* as the second tag. We change that to HB_TAG_NONE except for the */
- /* default script. */
- if ( style_class->script == globals->module->default_script &&
- style_class->coverage == AF_COVERAGE_DEFAULT )
- {
- if ( script_tags[0] == HB_TAG_NONE )
- script_tags[0] = HB_OT_TAG_DEFAULT_SCRIPT;
- else
- {
- if ( script_tags[1] == HB_TAG_NONE )
- script_tags[1] = HB_OT_TAG_DEFAULT_SCRIPT;
- else if ( script_tags[1] != HB_OT_TAG_DEFAULT_SCRIPT )
- script_tags[2] = HB_OT_TAG_DEFAULT_SCRIPT;
- }
- }
- else
- {
- if ( script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT )
- script_tags[1] = HB_TAG_NONE;
- }
-
- hb_ot_layout_collect_lookups( face,
- HB_OT_TAG_GSUB,
- script_tags,
- NULL,
- coverage_tags,
- gsub_lookups );
-
- if ( hb_set_is_empty( gsub_lookups ) )
- goto Exit; /* nothing to do */
-
- hb_ot_layout_collect_lookups( face,
- HB_OT_TAG_GPOS,
- script_tags,
- NULL,
- coverage_tags,
- gpos_lookups );
-
- FT_TRACE4(( "GSUB lookups (style `%s'):\n"
- " ",
- af_style_names[style_class->style] ));
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- count = 0;
-#endif
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_lookups, &idx ); )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " %d", idx ));
- count++;
-#endif
-
- /* get output coverage of GSUB feature */
- hb_ot_layout_lookup_collect_glyphs( face,
- HB_OT_TAG_GSUB,
- idx,
- NULL,
- NULL,
- NULL,
- gsub_glyphs );
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE4(( " (none)" ));
- FT_TRACE4(( "\n\n" ));
-#endif
-
- FT_TRACE4(( "GPOS lookups (style `%s'):\n"
- " ",
- af_style_names[style_class->style] ));
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- count = 0;
-#endif
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gpos_lookups, &idx ); )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " %d", idx ));
- count++;
-#endif
-
- /* get input coverage of GPOS feature */
- hb_ot_layout_lookup_collect_glyphs( face,
- HB_OT_TAG_GPOS,
- idx,
- NULL,
- gpos_glyphs,
- NULL,
- NULL );
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE4(( " (none)" ));
- FT_TRACE4(( "\n\n" ));
-#endif
-
- /*
- * We now check whether we can construct blue zones, using glyphs
- * covered by the feature only. In case there is not a single zone
- * (this is, not a single character is covered), we skip this coverage.
- *
- */
- if ( style_class->coverage != AF_COVERAGE_DEFAULT )
- {
- AF_Blue_Stringset bss = style_class->blue_stringset;
- const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
-
- FT_Bool found = 0;
-
-
- for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
- {
- const char* p = &af_blue_strings[bs->string];
-
-
- while ( *p )
- {
- hb_codepoint_t ch;
-
-
- GET_UTF8_CHAR( ch, p );
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_lookups,
- &idx ); )
- {
- hb_codepoint_t gidx = FT_Get_Char_Index( globals->face, ch );
-
-
- if ( hb_ot_layout_lookup_would_substitute( face, idx,
- &gidx, 1, 1 ) )
- {
- found = 1;
- break;
- }
- }
- }
- }
-
- if ( !found )
- {
- FT_TRACE4(( " no blue characters found; style skipped\n" ));
- goto Exit;
- }
- }
-
- /*
- * Various OpenType features might use the same glyphs at different
- * vertical positions; for example, superscript and subscript glyphs
- * could be the same. However, the auto-hinter is completely
- * agnostic of OpenType features after the feature analysis has been
- * completed: The engine then simply receives a glyph index and returns a
- * hinted and usually rendered glyph.
- *
- * Consider the superscript feature of font `pala.ttf': Some of the
- * glyphs are `real', this is, they have a zero vertical offset, but
- * most of them are small caps glyphs shifted up to the superscript
- * position (this is, the `sups' feature is present in both the GSUB and
- * GPOS tables). The code for blue zones computation actually uses a
- * feature's y offset so that the `real' glyphs get correct hints. But
- * later on it is impossible to decide whether a glyph index belongs to,
- * say, the small caps or superscript feature.
- *
- * For this reason, we don't assign a style to a glyph if the current
- * feature covers the glyph in both the GSUB and the GPOS tables. This
- * is quite a broad condition, assuming that
- *
- * (a) glyphs that get used in multiple features are present in a
- * feature without vertical shift,
- *
- * and
- *
- * (b) a feature's GPOS data really moves the glyph vertically.
- *
- * Not fulfilling condition (a) makes a font larger; it would also
- * reduce the number of glyphs that could be addressed directly without
- * using OpenType features, so this assumption is rather strong.
- *
- * Condition (b) is much weaker, and there might be glyphs which get
- * missed. However, the OpenType features we are going to handle are
- * primarily located in GSUB, and HarfBuzz doesn't provide an API to
- * directly get the necessary information from the GPOS table. A
- * possible solution might be to directly parse the GPOS table to find
- * out whether a glyph gets shifted vertically, but this is something I
- * would like to avoid if not really necessary.
- *
- * Note that we don't follow this logic for the default coverage.
- * Complex scripts like Devanagari have mandatory GPOS features to
- * position many glyph elements, using mark-to-base or mark-to-ligature
- * tables; the number of glyphs missed due to condition (b) would be far
- * too large.
- *
- */
- if ( style_class->coverage != AF_COVERAGE_DEFAULT )
- hb_set_subtract( gsub_glyphs, gpos_glyphs );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE4(( " glyphs without GPOS data (`*' means already assigned)" ));
- count = 0;
-#endif
-
- for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_glyphs, &idx ); )
- {
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !( count % 10 ) )
- FT_TRACE4(( "\n"
- " " ));
-
- FT_TRACE4(( " %d", idx ));
- count++;
-#endif
-
- /* glyph indices returned by `hb_ot_layout_lookup_collect_glyphs' */
- /* can be arbitrary: some fonts use fake indices for processing */
- /* internal to GSUB or GPOS, which is fully valid */
- if ( idx >= (hb_codepoint_t)globals->glyph_count )
- continue;
-
- if ( gstyles[idx] == AF_STYLE_UNASSIGNED )
- gstyles[idx] = (FT_UShort)style_class->style;
-#ifdef FT_DEBUG_LEVEL_TRACE
- else
- FT_TRACE4(( "*" ));
-#endif
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !count )
- FT_TRACE4(( "\n"
- " (none)" ));
- FT_TRACE4(( "\n\n" ));
-#endif
-
- Exit:
- hb_set_destroy( gsub_lookups );
- hb_set_destroy( gsub_glyphs );
- hb_set_destroy( gpos_lookups );
- hb_set_destroy( gpos_glyphs );
-
- return FT_Err_Ok;
- }
-
-
- /* construct HarfBuzz features */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- static const hb_feature_t name ## _feature[] = \
- { \
- { \
- HB_TAG( tag1, tag2, tag3, tag4 ), \
- 1, 0, (unsigned int)-1 \
- } \
- };
-
-
-#include "afcover.h"
-
-
- /* define mapping between HarfBuzz features and AF_Coverage */
-#undef COVERAGE
-#define COVERAGE( name, NAME, description, \
- tag1, tag2, tag3, tag4 ) \
- name ## _feature,
-
-
- static const hb_feature_t* features[] =
- {
-#include "afcover.h"
-
- NULL /* AF_COVERAGE_DEFAULT */
- };
-
-
- FT_Error
- af_get_char_index( AF_StyleMetrics metrics,
- FT_ULong charcode,
- FT_ULong *codepoint,
- FT_Long *y_offset )
- {
- AF_StyleClass style_class;
-
- const hb_feature_t* feature;
-
- FT_ULong in_idx, out_idx;
-
-
- if ( !metrics )
- return FT_THROW( Invalid_Argument );
-
- in_idx = FT_Get_Char_Index( metrics->globals->face, charcode );
-
- style_class = metrics->style_class;
-
- feature = features[style_class->coverage];
-
- if ( feature )
- {
- FT_Int upem = (FT_Int)metrics->globals->face->units_per_EM;
-
- hb_font_t* font = metrics->globals->hb_font;
- hb_buffer_t* buf = hb_buffer_create();
-
- uint32_t c = (uint32_t)charcode;
-
- hb_glyph_info_t* ginfo;
- hb_glyph_position_t* gpos;
- unsigned int gcount;
-
-
- /* we shape at a size of units per EM; this means font units */
- hb_font_set_scale( font, upem, upem );
-
- /* XXX: is this sufficient for a single character of any script? */
- hb_buffer_set_direction( buf, HB_DIRECTION_LTR );
- hb_buffer_set_script( buf, scripts[style_class->script] );
-
- /* we add one character to `buf' ... */
- hb_buffer_add_utf32( buf, &c, 1, 0, 1 );
-
- /* ... and apply one feature */
- hb_shape( font, buf, feature, 1 );
-
- ginfo = hb_buffer_get_glyph_infos( buf, &gcount );
- gpos = hb_buffer_get_glyph_positions( buf, &gcount );
-
- out_idx = ginfo[0].codepoint;
-
- /* getting the same index indicates no substitution, */
- /* which means that the glyph isn't available in the feature */
- if ( in_idx == out_idx )
- {
- *codepoint = 0;
- *y_offset = 0;
- }
- else
- {
- *codepoint = out_idx;
- *y_offset = gpos[0].y_offset;
- }
-
- hb_buffer_destroy( buf );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( gcount > 1 )
- FT_TRACE1(( "af_get_char_index:"
- " input character mapped to multiple glyphs\n" ));
-#endif
- }
- else
- {
- *codepoint = in_idx;
- *y_offset = 0;
- }
-
- return FT_Err_Ok;
- }
-
-
-#else /* !FT_CONFIG_OPTION_USE_HARFBUZZ */
-
-
- FT_Error
- af_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_UShort* gstyles )
- {
- FT_UNUSED( globals );
- FT_UNUSED( style_class );
- FT_UNUSED( gstyles );
-
- return FT_Err_Ok;
- }
-
-
- FT_Error
- af_get_char_index( AF_StyleMetrics metrics,
- FT_ULong charcode,
- FT_ULong *codepoint,
- FT_Long *y_offset )
- {
- FT_Face face;
-
-
- if ( !metrics )
- return FT_THROW( Invalid_Argument );
-
- face = metrics->globals->face;
-
- *codepoint = FT_Get_Char_Index( face, charcode );
- *y_offset = 0;
-
- return FT_Err_Ok;
- }
-
-
-#endif /* !FT_CONFIG_OPTION_USE_HARFBUZZ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/hbshim.h b/src/3rdparty/freetype/src/autofit/hbshim.h
deleted file mode 100644
index 3824941ca2..0000000000
--- a/src/3rdparty/freetype/src/autofit/hbshim.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************/
-/* */
-/* hbshim.h */
-/* */
-/* HarfBuzz interface for accessing OpenType features (specification). */
-/* */
-/* Copyright 2013-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __HBSHIM_H__
-#define __HBSHIM_H__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
-
-#include <hb.h>
-#include <hb-ot.h>
-#include <hb-ft.h>
-
-#endif
-
-
-FT_BEGIN_HEADER
-
- FT_Error
- af_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_UShort* gstyles );
-
- FT_Error
- af_get_char_index( AF_StyleMetrics metrics,
- FT_ULong charcode,
- FT_ULong *codepoint,
- FT_Long *y_offset );
-
- /* */
-
-FT_END_HEADER
-
-#endif /* __HBSHIM_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/module.mk b/src/3rdparty/freetype/src/autofit/module.mk
index cf77b169f7..c32781f478 100644
--- a/src/3rdparty/freetype/src/autofit/module.mk
+++ b/src/3rdparty/freetype/src/autofit/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2003-2019 by
+# Copyright (C) 2003-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/autofit/rules.mk b/src/3rdparty/freetype/src/autofit/rules.mk
index c59da33a55..553ddce6b7 100644
--- a/src/3rdparty/freetype/src/autofit/rules.mk
+++ b/src/3rdparty/freetype/src/autofit/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2003-2019 by
+# Copyright (C) 2003-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/base/Jamfile b/src/3rdparty/freetype/src/base/Jamfile
deleted file mode 100644
index 8e1ec42756..0000000000
--- a/src/3rdparty/freetype/src/base/Jamfile
+++ /dev/null
@@ -1,90 +0,0 @@
-# FreeType 2 src/base Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) base ;
-
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = basepic
- ftadvanc
- ftcalc
- ftcolor
- ftdbgmem
- fterrors
- ftfntfmt
- ftgloadr
- fthash
- ftlcdfil
- ftobjs
- ftoutln
- ftpic
- ftpsprop
- ftrfork
- ftsnames
- ftstream
- fttrigon
- ftutil
- ;
- }
- else
- {
- _sources = ftbase ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# Add the optional/replaceable files.
-#
-{
- local _sources = ftbbox
- ftbdf
- ftbitmap
- ftcid
- ftdebug
- ftfstype
- ftgasp
- ftglyph
- ftgxval
- ftinit
- ftmm
- ftotval
- ftpatent
- ftpfr
- ftstroke
- ftsynth
- ftsystem
- fttype1
- ftwinfnt
- ;
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# Add Macintosh-specific file to the library when necessary.
-#
-if $(MAC)
-{
- Library $(FT2_LIB) : ftmac.c ;
-}
-else if $(OS) = MACOSX
-{
- if $(FT2_MULTI)
- {
- Library $(FT2_LIB) : ftmac.c ;
- }
-}
-
-# end of src/base Jamfile
diff --git a/src/3rdparty/freetype/src/base/basepic.c b/src/3rdparty/freetype/src/base/basepic.c
deleted file mode 100644
index bc80406441..0000000000
--- a/src/3rdparty/freetype/src/base/basepic.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/***************************************************************************/
-/* */
-/* basepic.c */
-/* */
-/* The FreeType position independent code services for base. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftglyph.c */
- void
- FT_Init_Class_ft_outline_glyph_class( FT_Glyph_Class* clazz );
-
- void
- FT_Init_Class_ft_bitmap_glyph_class( FT_Glyph_Class* clazz );
-
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
- /* forward declaration of PIC init function from ftrfork.c */
- /* (not modularized) */
- void
- FT_Init_Table_ft_raccess_guess_table( ft_raccess_guess_rec* record );
-#endif
-
- /* forward declaration of PIC init functions from ftinit.c */
- FT_Error
- ft_create_default_module_classes( FT_Library library );
-
- void
- ft_destroy_default_module_classes( FT_Library library );
-
-
- void
- ft_base_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->base )
- {
- /* destroy default module classes */
- /* (in case FT_Add_Default_Modules was used) */
- ft_destroy_default_module_classes( library );
-
- FT_FREE( pic_container->base );
- pic_container->base = NULL;
- }
- }
-
-
- FT_Error
- ft_base_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- BasePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->base = container;
-
- /* initialize default modules list and pointers */
- error = ft_create_default_module_classes( library );
- if ( error )
- goto Exit;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_outline_glyph_class(
- &container->ft_outline_glyph_class );
- FT_Init_Class_ft_bitmap_glyph_class(
- &container->ft_bitmap_glyph_class );
-#ifdef FT_CONFIG_OPTION_MAC_FONTS
- FT_Init_Table_ft_raccess_guess_table(
- (ft_raccess_guess_rec*)&container->ft_raccess_guess_table );
-#endif
-
- Exit:
- if ( error )
- ft_base_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/base/basepic.h b/src/3rdparty/freetype/src/base/basepic.h
deleted file mode 100644
index 492d1ede56..0000000000
--- a/src/3rdparty/freetype/src/base/basepic.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************/
-/* */
-/* basepic.h */
-/* */
-/* The FreeType position independent code services for base. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef BASEPIC_H_
-#define BASEPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_OUTLINE_GLYPH_CLASS_GET &ft_outline_glyph_class
-#define FT_BITMAP_GLYPH_CLASS_GET &ft_bitmap_glyph_class
-#define FT_DEFAULT_MODULES_GET ft_default_modules
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#define FT_RACCESS_GUESS_TABLE_GET ft_raccess_guess_table
-#endif
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_GLYPH_H
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#include FT_INTERNAL_RFORK_H
-#endif
-
-
-FT_BEGIN_HEADER
-
- typedef struct BasePIC_
- {
- FT_Module_Class** default_module_classes;
- FT_Glyph_Class ft_outline_glyph_class;
- FT_Glyph_Class ft_bitmap_glyph_class;
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
- ft_raccess_guess_rec ft_raccess_guess_table[FT_RACCESS_N_RULES];
-#endif
-
- } BasePIC;
-
-
-#define GET_PIC( lib ) ( (BasePIC*)( (lib)->pic_container.base ) )
-
-#define FT_OUTLINE_GLYPH_CLASS_GET \
- ( &GET_PIC( library )->ft_outline_glyph_class )
-#define FT_BITMAP_GLYPH_CLASS_GET \
- ( &GET_PIC( library )->ft_bitmap_glyph_class )
-#define FT_DEFAULT_MODULES_GET \
- ( GET_PIC( library )->default_module_classes )
-
-#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
-#define FT_RACCESS_GUESS_TABLE_GET \
- ( GET_PIC( library )->ft_raccess_guess_table )
-#endif
-
-
- /* see basepic.c for the implementation */
- void
- ft_base_pic_free( FT_Library library );
-
- FT_Error
- ft_base_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* BASEPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/base/ftadvanc.c b/src/3rdparty/freetype/src/base/ftadvanc.c
index 0dfba57036..c689e6a15b 100644
--- a/src/3rdparty/freetype/src/base/ftadvanc.c
+++ b/src/3rdparty/freetype/src/base/ftadvanc.c
@@ -4,7 +4,7 @@
*
* Quick computation of advance widths (body).
*
- * Copyright (C) 2008-2019 by
+ * Copyright (C) 2008-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_ADVANCES_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/ftadvanc.h>
+#include <freetype/internal/ftobjs.h>
static FT_Error
diff --git a/src/3rdparty/freetype/src/base/ftapi.c b/src/3rdparty/freetype/src/base/ftapi.c
deleted file mode 100644
index 32d6e95d19..0000000000
--- a/src/3rdparty/freetype/src/base/ftapi.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftapi.c */
-/* */
-/* The FreeType compatibility functions (body). */
-/* */
-/* Copyright 2002-2018 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_LIST_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_OUTLINE_H
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** ****/
- /**** C O M P A T I B I L I T Y ****/
- /**** ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
- /* backward compatibility API */
-
- FT_BASE_DEF( void )
- FT_New_Memory_Stream( FT_Library library,
- FT_Byte* base,
- FT_ULong size,
- FT_Stream stream )
- {
- FT_UNUSED( library );
-
- FT_Stream_OpenMemory( stream, base, size );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Seek_Stream( FT_Stream stream,
- FT_ULong pos )
- {
- return FT_Stream_Seek( stream, pos );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Skip_Stream( FT_Stream stream,
- FT_Long distance )
- {
- return FT_Stream_Skip( stream, distance );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Read_Stream( FT_Stream stream,
- FT_Byte* buffer,
- FT_ULong count )
- {
- return FT_Stream_Read( stream, buffer, count );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Read_Stream_At( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
- {
- return FT_Stream_ReadAt( stream, pos, buffer, count );
- }
-
-
- FT_BASE_DEF( FT_Error )
- FT_Extract_Frame( FT_Stream stream,
- FT_ULong count,
- FT_Byte** pbytes )
- {
- return FT_Stream_ExtractFrame( stream, count, pbytes );
- }
-
-
- FT_BASE_DEF( void )
- FT_Release_Frame( FT_Stream stream,
- FT_Byte** pbytes )
- {
- FT_Stream_ReleaseFrame( stream, pbytes );
- }
-
- FT_BASE_DEF( FT_Error )
- FT_Access_Frame( FT_Stream stream,
- FT_ULong count )
- {
- return FT_Stream_EnterFrame( stream, count );
- }
-
-
- FT_BASE_DEF( void )
- FT_Forget_Frame( FT_Stream stream )
- {
- FT_Stream_ExitFrame( stream );
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/base/ftbase.c b/src/3rdparty/freetype/src/base/ftbase.c
index fb8cbfcc27..bfbaffd64e 100644
--- a/src/3rdparty/freetype/src/base/ftbase.c
+++ b/src/3rdparty/freetype/src/base/ftbase.c
@@ -4,7 +4,7 @@
*
* Single object library component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,7 +16,6 @@
*/
-#include <ft2build.h>
#define FT_MAKE_OPTION_SINGLE_OBJECT
#include "ftadvanc.c"
diff --git a/src/3rdparty/freetype/src/base/ftbase.h b/src/3rdparty/freetype/src/base/ftbase.h
index 35b1c47fd9..25afa9bc31 100644
--- a/src/3rdparty/freetype/src/base/ftbase.h
+++ b/src/3rdparty/freetype/src/base/ftbase.h
@@ -4,7 +4,7 @@
*
* Private functions used in the `base' module (specification).
*
- * Copyright (C) 2008-2019 by
+ * Copyright (C) 2008-2020 by
* David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,13 +20,16 @@
#define FTBASE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
+ FT_DECLARE_GLYPH( ft_bitmap_glyph_class )
+ FT_DECLARE_GLYPH( ft_outline_glyph_class )
+
+
#ifdef FT_CONFIG_OPTION_MAC_FONTS
/* MacOS resource fork cannot exceed 16MB at least for Carbon code; */
diff --git a/src/3rdparty/freetype/src/base/ftbbox.c b/src/3rdparty/freetype/src/base/ftbbox.c
index a0b2c46f7b..30a4eba0b3 100644
--- a/src/3rdparty/freetype/src/base/ftbbox.c
+++ b/src/3rdparty/freetype/src/base/ftbbox.c
@@ -4,7 +4,7 @@
*
* FreeType bbox computation (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
@@ -24,14 +24,13 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_BBOX_H
-#include FT_IMAGE_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/ftbbox.h>
+#include <freetype/ftimage.h>
+#include <freetype/ftoutln.h>
+#include <freetype/internal/ftcalc.h>
+#include <freetype/internal/ftobjs.h>
typedef struct TBBox_Rec_
@@ -294,10 +293,10 @@
if ( shift > 2 )
shift = 2;
- q1 <<= shift;
- q2 <<= shift;
- q3 <<= shift;
- q4 <<= shift;
+ q1 *= 1 << shift;
+ q2 *= 1 << shift;
+ q3 *= 1 << shift;
+ q4 *= 1 << shift;
}
else
{
diff --git a/src/3rdparty/freetype/src/base/ftbdf.c b/src/3rdparty/freetype/src/base/ftbdf.c
index c0fccd7b7c..fc374c6675 100644
--- a/src/3rdparty/freetype/src/base/ftbdf.c
+++ b/src/3rdparty/freetype/src/base/ftbdf.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing BDF-specific strings (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_BDF_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svbdf.h>
/* documentation is in ftbdf.h */
diff --git a/src/3rdparty/freetype/src/base/ftbitmap.c b/src/3rdparty/freetype/src/base/ftbitmap.c
index 0e0a76fe40..584213ddcf 100644
--- a/src/3rdparty/freetype/src/base/ftbitmap.c
+++ b/src/3rdparty/freetype/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
*
* FreeType utility functions for bitmaps (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_BITMAP_H
-#include FT_IMAGE_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/ftbitmap.h>
+#include <freetype/ftimage.h>
+#include <freetype/internal/ftobjs.h>
/**************************************************************************
@@ -909,13 +908,13 @@
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE5(( "FT_Bitmap_Blend:\n"
- " source bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
+ " source bitmap: (%ld, %ld) -- (%ld, %ld); %d x %d\n",
source_llx / 64, source_lly / 64,
source_urx / 64, source_ury / 64,
source_->width, source_->rows ));
if ( target->width && target->rows )
- FT_TRACE5(( " target bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
+ FT_TRACE5(( " target bitmap: (%ld, %ld) -- (%ld, %ld); %d x %d\n",
target_llx / 64, target_lly / 64,
target_urx / 64, target_ury / 64,
target->width, target->rows ));
@@ -923,7 +922,7 @@
FT_TRACE5(( " target bitmap: empty\n" ));
if ( final_width && final_rows )
- FT_TRACE5(( " final bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
+ 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 ));
diff --git a/src/3rdparty/freetype/src/base/ftcalc.c b/src/3rdparty/freetype/src/base/ftcalc.c
index 315dc44185..b5258c85a1 100644
--- a/src/3rdparty/freetype/src/base/ftcalc.c
+++ b/src/3rdparty/freetype/src/base/ftcalc.c
@@ -4,7 +4,7 @@
*
* Arithmetic computations (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -32,12 +32,11 @@
*/
-#include <ft2build.h>
-#include FT_GLYPH_H
-#include FT_TRIGONOMETRY_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
+#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
diff --git a/src/3rdparty/freetype/src/base/ftcid.c b/src/3rdparty/freetype/src/base/ftcid.c
index 190b23f357..ce8a876adc 100644
--- a/src/3rdparty/freetype/src/base/ftcid.c
+++ b/src/3rdparty/freetype/src/base/ftcid.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing CID font information.
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* Derek Clegg and Michael Toftdal.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_CID_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_CID_H
+#include <freetype/ftcid.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svcid.h>
/* documentation is in ftcid.h */
diff --git a/src/3rdparty/freetype/src/base/ftcolor.c b/src/3rdparty/freetype/src/base/ftcolor.c
index 8cb057a365..a50d680096 100644
--- a/src/3rdparty/freetype/src/base/ftcolor.c
+++ b/src/3rdparty/freetype/src/base/ftcolor.c
@@ -4,7 +4,7 @@
*
* FreeType's glyph color management (body).
*
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_COLOR_H
+#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
diff --git a/src/3rdparty/freetype/src/base/ftdbgmem.c b/src/3rdparty/freetype/src/base/ftdbgmem.c
index 55cd269e1f..eb0d651607 100644
--- a/src/3rdparty/freetype/src/base/ftdbgmem.c
+++ b/src/3rdparty/freetype/src/base/ftdbgmem.c
@@ -4,7 +4,7 @@
*
* Memory debugger (body).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,11 +18,11 @@
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
+#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
@@ -621,8 +621,10 @@
if ( node->size < 0 )
ft_mem_debug_panic(
- "freeing memory block at %p more than once at (%s:%ld)\n"
- "block allocated at (%s:%ld) and released at (%s:%ld)",
+ "freeing memory block at %p more than once\n"
+ " at (%s:%ld)!\n"
+ " Block was allocated at (%s:%ld)\n"
+ " and released at (%s:%ld).",
address,
FT_FILENAME( _ft_debug_file ), _ft_debug_lineno,
FT_FILENAME( node->source->file_name ), node->source->line_no,
diff --git a/src/3rdparty/freetype/src/base/ftdebug.c b/src/3rdparty/freetype/src/base/ftdebug.c
index ec72337873..62cf680b01 100644
--- a/src/3rdparty/freetype/src/base/ftdebug.c
+++ b/src/3rdparty/freetype/src/base/ftdebug.c
@@ -4,7 +4,7 @@
*
* Debugging and logging component (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -41,9 +41,8 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/freetype.h>
+#include <freetype/internal/ftdebug.h>
#ifdef FT_DEBUG_LEVEL_ERROR
@@ -126,7 +125,7 @@
static const char* ft_trace_toggles[trace_count + 1] =
{
-#include FT_INTERNAL_TRACE_H
+#include <freetype/internal/fttrace.h>
NULL
};
diff --git a/src/3rdparty/freetype/src/base/fterrors.c b/src/3rdparty/freetype/src/base/fterrors.c
index 84fe590289..eba9e76563 100644
--- a/src/3rdparty/freetype/src/base/fterrors.c
+++ b/src/3rdparty/freetype/src/base/fterrors.c
@@ -4,7 +4,7 @@
*
* FreeType API for error code handling.
*
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
* Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,9 +16,8 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_ERRORS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/fterrors.h>
/* documentation is in fterrors.h */
@@ -38,7 +37,7 @@
#define FT_ERRORDEF( e, v, s ) case v: return s;
#define FT_ERROR_END_LIST }
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || ... */
diff --git a/src/3rdparty/freetype/src/base/ftfntfmt.c b/src/3rdparty/freetype/src/base/ftfntfmt.c
index 54ba537416..a45317e797 100644
--- a/src/3rdparty/freetype/src/base/ftfntfmt.c
+++ b/src/3rdparty/freetype/src/base/ftfntfmt.c
@@ -4,7 +4,7 @@
*
* FreeType utility file for font formats (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_FONT_FORMATS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_FONT_FORMAT_H
+#include <freetype/ftfntfmt.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svfntfmt.h>
/* documentation is in ftfntfmt.h */
diff --git a/src/3rdparty/freetype/src/base/ftfstype.c b/src/3rdparty/freetype/src/base/ftfstype.c
index 45e2d8089b..bca548fc56 100644
--- a/src/3rdparty/freetype/src/base/ftfstype.c
+++ b/src/3rdparty/freetype/src/base/ftfstype.c
@@ -4,7 +4,7 @@
*
* FreeType utility file to access FSType data (body).
*
- * Copyright (C) 2008-2019 by
+ * Copyright (C) 2008-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -15,11 +15,10 @@
*
*/
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
+#include <freetype/t1tables.h>
+#include <freetype/tttables.h>
+#include <freetype/internal/ftserv.h>
+#include <freetype/internal/services/svpsinfo.h>
/* documentation is in freetype.h */
diff --git a/src/3rdparty/freetype/src/base/ftgasp.c b/src/3rdparty/freetype/src/base/ftgasp.c
index 720fb113ca..eed05a3265 100644
--- a/src/3rdparty/freetype/src/base/ftgasp.c
+++ b/src/3rdparty/freetype/src/base/ftgasp.c
@@ -4,7 +4,7 @@
*
* Access of TrueType's `gasp' table (body).
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,9 +16,8 @@
*/
-#include <ft2build.h>
-#include FT_GASP_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include <freetype/ftgasp.h>
+#include <freetype/internal/tttypes.h>
FT_EXPORT_DEF( FT_Int )
diff --git a/src/3rdparty/freetype/src/base/ftgloadr.c b/src/3rdparty/freetype/src/base/ftgloadr.c
index bfeed461a8..05fc7692bb 100644
--- a/src/3rdparty/freetype/src/base/ftgloadr.c
+++ b/src/3rdparty/freetype/src/base/ftgloadr.c
@@ -4,7 +4,7 @@
*
* The FreeType glyph loader (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_GLYPH_LOADER_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
+#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
@@ -93,6 +92,7 @@
base->outline.n_points = 0;
base->outline.n_contours = 0;
+ base->outline.flags = 0;
base->num_subglyphs = 0;
*current = *base;
@@ -146,9 +146,9 @@
FT_Outline* current = &loader->current.outline;
- current->points = base->points + base->n_points;
- current->tags = base->tags + base->n_points;
- current->contours = base->contours + base->n_contours;
+ current->points = FT_OFFSET( base->points, base->n_points );
+ current->tags = FT_OFFSET( base->tags, base->n_points );
+ current->contours = FT_OFFSET( base->contours, base->n_contours );
/* handle extra points table - if any */
if ( loader->use_extra )
@@ -169,6 +169,10 @@
FT_Memory memory = loader->memory;
+ if ( loader->max_points == 0 ||
+ loader->base.extra_points != NULL )
+ return FT_Err_Ok;
+
if ( !FT_NEW_ARRAY( loader->base.extra_points, 2 * loader->max_points ) )
{
loader->use_extra = 1;
@@ -189,7 +193,7 @@
FT_GlyphLoad current = &loader->current;
- current->subglyphs = base->subglyphs + base->num_subglyphs;
+ current->subglyphs = FT_OFFSET( base->subglyphs, base->num_subglyphs );
}
@@ -211,6 +215,10 @@
FT_UInt new_max, old_max;
+ error = FT_GlyphLoader_CreateExtra( loader );
+ if ( error )
+ return error;
+
/* check points & tags */
new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points +
n_points;
@@ -244,6 +252,10 @@
loader->max_points = new_max;
}
+ error = FT_GlyphLoader_CreateExtra( loader );
+ if ( error )
+ return error;
+
/* check contours */
old_max = loader->max_contours;
new_max = (FT_UInt)base->n_contours + (FT_UInt)current->n_contours +
diff --git a/src/3rdparty/freetype/src/base/ftglyph.c b/src/3rdparty/freetype/src/base/ftglyph.c
index e6b1327901..825eba2c4d 100644
--- a/src/3rdparty/freetype/src/base/ftglyph.c
+++ b/src/3rdparty/freetype/src/base/ftglyph.c
@@ -4,7 +4,7 @@
*
* FreeType convenience functions to handle glyphs (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -28,13 +28,14 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_GLYPH_H
-#include FT_OUTLINE_H
-#include FT_BITMAP_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/ftglyph.h>
+#include <freetype/ftoutln.h>
+#include <freetype/ftbitmap.h>
+#include <freetype/internal/ftobjs.h>
+
+#include "ftbase.h"
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/base/ftgxval.c b/src/3rdparty/freetype/src/base/ftgxval.c
index 0677d26faa..f04df14526 100644
--- a/src/3rdparty/freetype/src/base/ftgxval.c
+++ b/src/3rdparty/freetype/src/base/ftgxval.c
@@ -4,7 +4,7 @@
*
* FreeType API for validating TrueTypeGX/AAT tables (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* Masatake YAMATO, Redhat K.K,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -25,11 +25,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_GX_VALIDATE_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svgxval.h>
/* documentation is in ftgxval.h */
diff --git a/src/3rdparty/freetype/src/base/fthash.c b/src/3rdparty/freetype/src/base/fthash.c
index 387e6d26db..449b03a5c1 100644
--- a/src/3rdparty/freetype/src/base/fthash.c
+++ b/src/3rdparty/freetype/src/base/fthash.c
@@ -39,9 +39,8 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_HASH_H
-#include FT_INTERNAL_MEMORY_H
+#include <freetype/internal/fthash.h>
+#include <freetype/internal/ftmemory.h>
#define INITIAL_HT_SIZE 241
diff --git a/src/3rdparty/freetype/src/base/ftinit.c b/src/3rdparty/freetype/src/base/ftinit.c
index c73cd78b83..0acc75e460 100644
--- a/src/3rdparty/freetype/src/base/ftinit.c
+++ b/src/3rdparty/freetype/src/base/ftinit.c
@@ -4,7 +4,7 @@
*
* FreeType initialization layer (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -39,9 +39,9 @@
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_MODULE_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftmodapi.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/base/ftlcdfil.c b/src/3rdparty/freetype/src/base/ftlcdfil.c
index d9f4af4293..1e84dbc894 100644
--- a/src/3rdparty/freetype/src/base/ftlcdfil.c
+++ b/src/3rdparty/freetype/src/base/ftlcdfil.c
@@ -4,7 +4,7 @@
*
* FreeType API for color filtering of subpixel bitmap glyphs (body).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_LCD_FILTER_H
-#include FT_IMAGE_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/ftlcdfil.h>
+#include <freetype/ftimage.h>
+#include <freetype/internal/ftobjs.h>
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
diff --git a/src/3rdparty/freetype/src/base/ftmac.c b/src/3rdparty/freetype/src/base/ftmac.c
index 5f23ceea9f..55a631fd74 100644
--- a/src/3rdparty/freetype/src/base/ftmac.c
+++ b/src/3rdparty/freetype/src/base/ftmac.c
@@ -8,7 +8,7 @@
* This file is for Mac OS X only; see builds/mac/ftoldmac.c for
* classic platforms built by MPW.
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -65,10 +65,9 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/freetype.h>
+#include <freetype/tttags.h>
+#include <freetype/internal/ftstream.h>
#include "ftbase.h"
diff --git a/src/3rdparty/freetype/src/base/ftmm.c b/src/3rdparty/freetype/src/base/ftmm.c
index ba9e67f008..9a702b9933 100644
--- a/src/3rdparty/freetype/src/base/ftmm.c
+++ b/src/3rdparty/freetype/src/base/ftmm.c
@@ -4,7 +4,7 @@
*
* Multiple Master font support (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,13 +16,12 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_MULTIPLE_MASTERS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svmm.h>
+#include <freetype/internal/services/svmetric.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/base/ftobjs.c b/src/3rdparty/freetype/src/base/ftobjs.c
index e301f8f11a..c060bbbc87 100644
--- a/src/3rdparty/freetype/src/base/ftobjs.c
+++ b/src/3rdparty/freetype/src/base/ftobjs.c
@@ -4,7 +4,7 @@
*
* The FreeType private base classes (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,32 +16,31 @@
*/
-#include <ft2build.h>
-#include FT_LIST_H
-#include FT_OUTLINE_H
-#include FT_FONT_FORMATS_H
+#include <freetype/ftlist.h>
+#include <freetype/ftoutln.h>
+#include <freetype/ftfntfmt.h>
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_RFORK_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H /* for SFNT_Load_Table_Func */
-#include FT_INTERNAL_POSTSCRIPT_AUX_H /* for PS_Driver */
+#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 FT_TRUETYPE_TABLES_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_TRUETYPE_IDS_H
+#include <freetype/tttables.h>
+#include <freetype/tttags.h>
+#include <freetype/ttnameid.h>
-#include FT_SERVICE_PROPERTIES_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_TT_CMAP_H
-#include FT_SERVICE_KERNING_H
-#include FT_SERVICE_TRUETYPE_ENGINE_H
+#include <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 FT_DRIVER_H
+#include <freetype/ftdriver.h>
#ifdef FT_CONFIG_OPTION_MAC_FONTS
#include "ftbase.h"
@@ -50,7 +49,7 @@
#ifdef FT_DEBUG_LEVEL_TRACE
-#include FT_BITMAP_H
+#include <freetype/ftbitmap.h>
#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
/* We disable the warning `conversion from XXX to YYY, */
@@ -1063,11 +1062,30 @@
slot->linearHoriAdvance / 65536.0 ));
FT_TRACE5(( " linear y advance: %f\n",
slot->linearVertAdvance / 65536.0 ));
+ FT_TRACE5(( "\n" ));
FT_TRACE5(( " bitmap %dx%d, %s (mode %d)\n",
slot->bitmap.width,
slot->bitmap.rows,
pixel_modes[slot->bitmap.pixel_mode],
slot->bitmap.pixel_mode ));
+ FT_TRACE5(( "\n" ));
+
+ {
+ FT_Glyph_Metrics* metrics = &slot->metrics;
+
+
+ FT_TRACE5(( " metrics:\n" ));
+ FT_TRACE5(( " width: %f\n", metrics->width / 64.0 ));
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( "\n" ));
+ FT_TRACE5(( " horiBearingX: %f\n", metrics->horiBearingX / 64.0 ));
+ FT_TRACE5(( " horiBearingY: %f\n", metrics->horiBearingY / 64.0 ));
+ FT_TRACE5(( " horiAdvance: %f\n", metrics->horiAdvance / 64.0 ));
+ FT_TRACE5(( "\n" ));
+ FT_TRACE5(( " vertBearingX: %f\n", metrics->vertBearingX / 64.0 ));
+ FT_TRACE5(( " vertBearingY: %f\n", metrics->vertBearingY / 64.0 ));
+ FT_TRACE5(( " vertAdvance: %f\n", metrics->vertAdvance / 64.0 ));
+ }
#endif
Exit:
@@ -1842,15 +1860,15 @@
/* FT2 allocator takes signed long buffer length,
* too large value causing overflow should be checked
*/
- FT_TRACE4(( " POST fragment #%d: length=0x%08x"
- " total pfb_len=0x%08x\n",
+ FT_TRACE4(( " POST fragment #%d: length=0x%08lx"
+ " total pfb_len=0x%08lx\n",
i, temp, pfb_len + temp + 6 ));
if ( FT_MAC_RFORK_MAX_LEN < temp ||
FT_MAC_RFORK_MAX_LEN - temp < pfb_len + 6 )
{
FT_TRACE2(( " MacOS resource length cannot exceed"
- " 0x%08x\n",
+ " 0x%08lx\n",
FT_MAC_RFORK_MAX_LEN ));
error = FT_THROW( Invalid_Offset );
@@ -1861,13 +1879,13 @@
}
FT_TRACE2(( " total buffer size to concatenate"
- " %d POST fragments: 0x%08x\n",
+ " %ld POST fragments: 0x%08lx\n",
resource_cnt, pfb_len + 2 ));
if ( pfb_len + 2 < 6 )
{
FT_TRACE2(( " too long fragment length makes"
- " pfb_len confused: pfb_len=0x%08x\n",
+ " pfb_len confused: pfb_len=0x%08lx\n",
pfb_len ));
error = FT_THROW( Array_Too_Large );
@@ -1910,7 +1928,7 @@
goto Exit2;
FT_TRACE3(( "POST fragment[%d]:"
- " offsets=0x%08x, rlen=0x%08x, flags=0x%04x\n",
+ " offsets=0x%08lx, rlen=0x%08lx, flags=0x%04x\n",
i, offsets[i], rlen, flags ));
error = FT_ERR( Array_Too_Large );
@@ -1937,7 +1955,7 @@
else
{
FT_TRACE3(( " Write POST fragment #%d header (4-byte) to buffer"
- " %p + 0x%08x\n",
+ " %p + 0x%08lx\n",
i, pfb_data, pfb_lenpos ));
if ( pfb_lenpos + 3 > pfb_len + 2 )
@@ -1952,7 +1970,7 @@
break;
FT_TRACE3(( " Write POST fragment #%d header (6-byte) to buffer"
- " %p + 0x%08x\n",
+ " %p + 0x%08lx\n",
i, pfb_data, pfb_pos ));
if ( pfb_pos + 6 > pfb_len + 2 )
@@ -1974,8 +1992,8 @@
if ( pfb_pos > pfb_len || pfb_pos + rlen > pfb_len )
goto Exit2;
- FT_TRACE3(( " Load POST fragment #%d (%d byte) to buffer"
- " %p + 0x%08x\n",
+ FT_TRACE3(( " Load POST fragment #%d (%ld byte) to buffer"
+ " %p + 0x%08lx\n",
i, rlen, pfb_data, pfb_pos ));
error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen );
@@ -2260,7 +2278,7 @@
args2.flags = FT_OPEN_PATHNAME;
args2.pathname = file_names[i] ? file_names[i] : args->pathname;
- FT_TRACE3(( "Try rule %d: %s (offset=%d) ...",
+ FT_TRACE3(( "Try rule %d: %s (offset=%ld) ...",
i, args2.pathname, offsets[i] ));
error = FT_Stream_New( library, &args2, &stream2 );
@@ -2858,6 +2876,8 @@
if ( error )
{
FT_FREE( node );
+ if ( size )
+ FT_FREE( size->internal );
FT_FREE( size );
}
@@ -3213,9 +3233,9 @@
FT_Size_Metrics* metrics = &face->size->metrics;
- FT_TRACE5(( " x scale: %d (%f)\n",
+ FT_TRACE5(( " x scale: %ld (%f)\n",
metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
+ FT_TRACE5(( " y scale: %ld (%f)\n",
metrics->y_scale, metrics->y_scale / 65536.0 ));
FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
@@ -3288,9 +3308,9 @@
FT_Size_Metrics* metrics = &face->size->metrics;
- FT_TRACE5(( " x scale: %d (%f)\n",
+ FT_TRACE5(( " x scale: %ld (%f)\n",
metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
+ FT_TRACE5(( " y scale: %ld (%f)\n",
metrics->y_scale, metrics->y_scale / 65536.0 ));
FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
@@ -3450,7 +3470,7 @@
if ( akerning->x != orig_x_rounded ||
akerning->y != orig_y_rounded )
FT_TRACE5(( "FT_Get_Kerning: horizontal kerning"
- " (%d, %d) scaled down to (%d, %d) pixels\n",
+ " (%ld, %ld) scaled down to (%ld, %ld) pixels\n",
orig_x_rounded / 64, orig_y_rounded / 64,
akerning->x / 64, akerning->y / 64 ));
}
@@ -3722,7 +3742,7 @@
if ( charcode > 0xFFFFFFFFUL )
{
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
+ FT_TRACE1(( " 0x%lx is truncated\n", charcode ));
}
result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode );
@@ -3898,13 +3918,13 @@
{
FT_TRACE1(( "FT_Face_GetCharVariantIndex:"
" too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
+ FT_TRACE1(( " 0x%lx is truncated\n", charcode ));
}
if ( variantSelector > 0xFFFFFFFFUL )
{
FT_TRACE1(( "FT_Face_GetCharVariantIndex:"
" too large variantSelector" ));
- FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
+ FT_TRACE1(( " 0x%lx is truncated\n", variantSelector ));
}
result = vcmap->clazz->char_var_index( vcmap, ucmap,
@@ -3941,13 +3961,13 @@
{
FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:"
" too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
+ FT_TRACE1(( " 0x%lx is truncated\n", charcode ));
}
if ( variantSelector > 0xFFFFFFFFUL )
{
FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:"
" too large variantSelector" ));
- FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
+ FT_TRACE1(( " 0x%lx is truncated\n", variantSelector ));
}
result = vcmap->clazz->char_var_default( vcmap,
@@ -4010,7 +4030,7 @@
if ( charcode > 0xFFFFFFFFUL )
{
FT_TRACE1(( "FT_Face_GetVariantsOfChar: too large charcode" ));
- FT_TRACE1(( " 0x%x is truncated\n", charcode ));
+ FT_TRACE1(( " 0x%lx is truncated\n", charcode ));
}
result = vcmap->clazz->charvariant_list( vcmap, memory,
@@ -4044,7 +4064,7 @@
if ( variantSelector > 0xFFFFFFFFUL )
{
FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" ));
- FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
+ FT_TRACE1(( " 0x%lx is truncated\n", variantSelector ));
}
result = vcmap->clazz->variantchar_list( vcmap, memory,
diff --git a/src/3rdparty/freetype/src/base/ftotval.c b/src/3rdparty/freetype/src/base/ftotval.c
index 007576ce6e..90a5dd617c 100644
--- a/src/3rdparty/freetype/src/base/ftotval.c
+++ b/src/3rdparty/freetype/src/base/ftotval.c
@@ -4,7 +4,7 @@
*
* FreeType API for validating OpenType tables (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -15,12 +15,11 @@
*
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_OPENTYPE_VALIDATE_H
-#include FT_OPENTYPE_VALIDATE_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svotval.h>
+#include <freetype/ftotval.h>
/* documentation is in ftotval.h */
diff --git a/src/3rdparty/freetype/src/base/ftoutln.c b/src/3rdparty/freetype/src/base/ftoutln.c
index 0e2ba3475d..311f098e3a 100644
--- a/src/3rdparty/freetype/src/base/ftoutln.c
+++ b/src/3rdparty/freetype/src/base/ftoutln.c
@@ -4,7 +4,7 @@
*
* FreeType outline management (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_TRIGONOMETRY_H
+#include <freetype/ftoutln.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftcalc.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/fttrigon.h>
/**************************************************************************
@@ -275,7 +274,7 @@
first = (FT_UInt)last + 1;
}
- FT_TRACE5(( "FT_Outline_Decompose: Done\n", n ));
+ FT_TRACE5(( "FT_Outline_Decompose: Done\n" ));
return FT_Err_Ok;
Invalid_Outline:
@@ -711,7 +710,7 @@
FT_Vector* limit;
- if ( !outline || !matrix )
+ if ( !outline || !matrix || !outline->points )
return;
vec = outline->points;
@@ -1061,6 +1060,11 @@
if ( cbox.xMin == cbox.xMax || cbox.yMin == cbox.yMax )
return FT_ORIENTATION_NONE;
+ /* Reject values large outlines. */
+ if ( cbox.xMin < -0x1000000L || cbox.yMin < -0x1000000L ||
+ cbox.xMax > 0x1000000L || cbox.yMax > 0x1000000L )
+ return FT_ORIENTATION_NONE;
+
xshift = FT_MSB( (FT_UInt32)( FT_ABS( cbox.xMax ) |
FT_ABS( cbox.xMin ) ) ) - 14;
xshift = FT_MAX( xshift, 0 );
diff --git a/src/3rdparty/freetype/src/base/ftpatent.c b/src/3rdparty/freetype/src/base/ftpatent.c
index 020f4646eb..a02c636a65 100644
--- a/src/3rdparty/freetype/src/base/ftpatent.c
+++ b/src/3rdparty/freetype/src/base/ftpatent.c
@@ -5,7 +5,7 @@
* FreeType API for checking patented TrueType bytecode instructions
* (body). Obsolete, retained for backward compatibility.
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,13 +16,12 @@
*
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
+#include <freetype/freetype.h>
+#include <freetype/tttags.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/services/svsfnt.h>
+#include <freetype/internal/services/svttglyf.h>
/* documentation is in freetype.h */
diff --git a/src/3rdparty/freetype/src/base/ftpfr.c b/src/3rdparty/freetype/src/base/ftpfr.c
index aeff1db8bd..c656fcd9b9 100644
--- a/src/3rdparty/freetype/src/base/ftpfr.c
+++ b/src/3rdparty/freetype/src/base/ftpfr.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing PFR-specific data (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -15,11 +15,10 @@
*
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_PFR_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svpfr.h>
/* check the format */
diff --git a/src/3rdparty/freetype/src/base/ftpic.c b/src/3rdparty/freetype/src/base/ftpic.c
deleted file mode 100644
index 1492e1809a..0000000000
--- a/src/3rdparty/freetype/src/base/ftpic.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftpic.c */
-/* */
-/* The FreeType position independent code services (body). */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "basepic.h"
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* documentation is in ftpic.h */
-
- FT_BASE_DEF( FT_Error )
- ft_pic_container_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error;
-
-
- FT_MEM_SET( pic_container, 0, sizeof ( *pic_container ) );
-
- error = ft_base_pic_init( library );
- if ( error )
- return error;
-
- return FT_Err_Ok;
- }
-
-
- /* Destroy the contents of the container. */
- FT_BASE_DEF( void )
- ft_pic_container_destroy( FT_Library library )
- {
- ft_base_pic_free( library );
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/base/ftpsprop.c b/src/3rdparty/freetype/src/base/ftpsprop.c
index 52b9d453ad..8c29f50f6b 100644
--- a/src/3rdparty/freetype/src/base/ftpsprop.c
+++ b/src/3rdparty/freetype/src/base/ftpsprop.c
@@ -5,7 +5,7 @@
* Get and set properties of PostScript drivers (body).
* See `ftdriver.h' for available properties.
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,12 +17,11 @@
*/
-#include <ft2build.h>
-#include FT_DRIVER_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_POSTSCRIPT_PROPS_H
+#include <freetype/ftdriver.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftpsprop.h>
/**************************************************************************
@@ -165,9 +164,9 @@
driver->hinting_engine = *hinting_engine;
else
error = FT_ERR( Unimplemented_Feature );
-
- return error;
}
+
+ return error;
}
else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
diff --git a/src/3rdparty/freetype/src/base/ftrfork.c b/src/3rdparty/freetype/src/base/ftrfork.c
index 73b7eb0ded..f989be47f4 100644
--- a/src/3rdparty/freetype/src/base/ftrfork.c
+++ b/src/3rdparty/freetype/src/base/ftrfork.c
@@ -4,7 +4,7 @@
*
* Embedded resource forks accessor (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* Masatake YAMATO and Redhat K.K.
*
* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are
@@ -24,10 +24,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_RFORK_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftrfork.h>
#include "ftbase.h"
@@ -240,7 +239,7 @@
(char)( 0xFF & ( tag_internal >> 16 ) ),
(char)( 0xFF & ( tag_internal >> 8 ) ),
(char)( 0xFF & ( tag_internal >> 0 ) ) ));
- FT_TRACE3(( " : subcount=%d, suboffset=0x%04x\n",
+ FT_TRACE3(( " : subcount=%d, suboffset=0x%04lx\n",
subcnt, rpos ));
if ( tag_internal == tag )
@@ -286,7 +285,7 @@
ref[j].offset = temp & 0xFFFFFFL;
FT_TRACE3(( " [%d]:"
- " resource_id=0x%04x, offset=0x%08x\n",
+ " resource_id=0x%04x, offset=0x%08lx\n",
j, (FT_UShort)ref[j].res_id, ref[j].offset ));
}
@@ -302,7 +301,7 @@
for ( j = 0; j < *count; j++ )
FT_TRACE3(( " [%d]:"
- " resource_id=0x%04x, offset=0x%08x\n",
+ " resource_id=0x%04x, offset=0x%08lx\n",
j, ref[j].res_id, ref[j].offset ));
}
diff --git a/src/3rdparty/freetype/src/base/ftsnames.c b/src/3rdparty/freetype/src/base/ftsnames.c
index 7ab3fe3cfa..8507f28d36 100644
--- a/src/3rdparty/freetype/src/base/ftsnames.c
+++ b/src/3rdparty/freetype/src/base/ftsnames.c
@@ -7,7 +7,7 @@
*
* This is _not_ used to retrieve glyph names!
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,12 +19,11 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_SFNT_NAMES_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/ftsnames.h>
+#include <freetype/internal/tttypes.h>
+#include <freetype/internal/ftstream.h>
#ifdef TT_CONFIG_OPTION_SFNT_NAMES
diff --git a/src/3rdparty/freetype/src/base/ftstream.c b/src/3rdparty/freetype/src/base/ftstream.c
index 4b0890d7fd..d940254d8b 100644
--- a/src/3rdparty/freetype/src/base/ftstream.c
+++ b/src/3rdparty/freetype/src/base/ftstream.c
@@ -4,7 +4,7 @@
*
* I/O stream support (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,9 +16,8 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftdebug.h>
/**************************************************************************
@@ -286,7 +285,7 @@
}
stream->cursor = stream->base;
- stream->limit = stream->cursor + count;
+ stream->limit = FT_OFFSET( stream->cursor, count );
stream->pos += read_bytes;
}
else
diff --git a/src/3rdparty/freetype/src/base/ftstroke.c b/src/3rdparty/freetype/src/base/ftstroke.c
index 1b2c0f657c..56f98e1d92 100644
--- a/src/3rdparty/freetype/src/base/ftstroke.c
+++ b/src/3rdparty/freetype/src/base/ftstroke.c
@@ -4,7 +4,7 @@
*
* FreeType path stroker (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,13 +16,12 @@
*/
-#include <ft2build.h>
-#include FT_STROKER_H
-#include FT_TRIGONOMETRY_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/ftstroke.h>
+#include <freetype/fttrigon.h>
+#include <freetype/ftoutln.h>
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
/* declare an extern to access `ft_outline_glyph_class' globally */
@@ -540,63 +539,52 @@
FT_Angle angle_start,
FT_Angle angle_diff )
{
- FT_Angle total, angle, step, rotate, next, theta;
- FT_Vector a, b, a2, b2;
- FT_Fixed length;
+ FT_Fixed coef;
+ FT_Vector a0, a1, a2, a3;
+ FT_Int i, arcs = 1;
FT_Error error = FT_Err_Ok;
- /* compute start point */
- FT_Vector_From_Polar( &a, radius, angle_start );
- a.x += center->x;
- a.y += center->y;
+ /* number of cubic arcs to draw */
+ while ( angle_diff > FT_ARC_CUBIC_ANGLE * arcs ||
+ -angle_diff > FT_ARC_CUBIC_ANGLE * arcs )
+ arcs++;
- total = angle_diff;
- angle = angle_start;
- rotate = ( angle_diff >= 0 ) ? FT_ANGLE_PI2 : -FT_ANGLE_PI2;
+ /* control tangents */
+ coef = FT_Tan( angle_diff / ( 4 * arcs ) );
+ coef += coef / 3;
- while ( total != 0 )
- {
- step = total;
- if ( step > FT_ARC_CUBIC_ANGLE )
- step = FT_ARC_CUBIC_ANGLE;
-
- else if ( step < -FT_ARC_CUBIC_ANGLE )
- step = -FT_ARC_CUBIC_ANGLE;
-
- next = angle + step;
- theta = step;
- if ( theta < 0 )
- theta = -theta;
+ /* compute start and first control point */
+ FT_Vector_From_Polar( &a0, radius, angle_start );
+ a1.x = FT_MulFix( -a0.y, coef );
+ a1.y = FT_MulFix( a0.x, coef );
- theta >>= 1;
+ a0.x += center->x;
+ a0.y += center->y;
+ a1.x += a0.x;
+ a1.y += a0.y;
- /* compute end point */
- FT_Vector_From_Polar( &b, radius, next );
- b.x += center->x;
- b.y += center->y;
-
- /* compute first and second control points */
- length = FT_MulDiv( radius, FT_Sin( theta ) * 4,
- ( 0x10000L + FT_Cos( theta ) ) * 3 );
-
- FT_Vector_From_Polar( &a2, length, angle + rotate );
- a2.x += a.x;
- a2.y += a.y;
+ for ( i = 1; i <= arcs; i++ )
+ {
+ /* compute end and second control point */
+ FT_Vector_From_Polar( &a3, radius,
+ angle_start + i * angle_diff / arcs );
+ a2.x = FT_MulFix( a3.y, coef );
+ a2.y = FT_MulFix( -a3.x, coef );
- FT_Vector_From_Polar( &b2, length, next - rotate );
- b2.x += b.x;
- b2.y += b.y;
+ a3.x += center->x;
+ a3.y += center->y;
+ a2.x += a3.x;
+ a2.y += a3.y;
/* add cubic arc */
- error = ft_stroke_border_cubicto( border, &a2, &b2, &b );
+ error = ft_stroke_border_cubicto( border, &a1, &a2, &a3 );
if ( error )
break;
- /* process the rest of the arc ?? */
- a = b;
- total -= step;
- angle = next;
+ /* a0 = a3; */
+ a1.x = a3.x - a2.x + a3.x;
+ a1.y = a3.y - a2.y + a3.y;
}
return error;
@@ -934,55 +922,40 @@
error = ft_stroker_arcto( stroker, side );
}
- else if ( stroker->line_cap == FT_STROKER_LINECAP_SQUARE )
+ else
{
- /* add a square cap */
- FT_Vector delta, delta2;
- FT_Angle rotate = FT_SIDE_TO_ROTATE( side );
+ /* add a square or butt cap */
+ FT_Vector middle, delta;
FT_Fixed radius = stroker->radius;
FT_StrokeBorder border = stroker->borders + side;
- FT_Vector_From_Polar( &delta2, radius, angle + rotate );
- FT_Vector_From_Polar( &delta, radius, angle );
-
- delta.x += stroker->center.x + delta2.x;
- delta.y += stroker->center.y + delta2.y;
-
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- if ( error )
- goto Exit;
-
- FT_Vector_From_Polar( &delta2, radius, angle - rotate );
- FT_Vector_From_Polar( &delta, radius, angle );
-
- delta.x += delta2.x + stroker->center.x;
- delta.y += delta2.y + stroker->center.y;
+ /* compute middle point and first angle point */
+ FT_Vector_From_Polar( &middle, radius, angle );
+ delta.x = side ? middle.y : -middle.y;
+ delta.y = side ? -middle.x : middle.x;
- error = ft_stroke_border_lineto( border, &delta, FALSE );
- }
- else if ( stroker->line_cap == FT_STROKER_LINECAP_BUTT )
- {
- /* add a butt ending */
- FT_Vector delta;
- FT_Angle rotate = FT_SIDE_TO_ROTATE( side );
- FT_Fixed radius = stroker->radius;
- FT_StrokeBorder border = stroker->borders + side;
-
-
- FT_Vector_From_Polar( &delta, radius, angle + rotate );
+ if ( stroker->line_cap == FT_STROKER_LINECAP_SQUARE )
+ {
+ middle.x += stroker->center.x;
+ middle.y += stroker->center.y;
+ }
+ else /* FT_STROKER_LINECAP_BUTT */
+ {
+ middle.x = stroker->center.x;
+ middle.y = stroker->center.y;
+ }
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
+ delta.x += middle.x;
+ delta.y += middle.y;
error = ft_stroke_border_lineto( border, &delta, FALSE );
if ( error )
goto Exit;
- FT_Vector_From_Polar( &delta, radius, angle - rotate );
-
- delta.x += stroker->center.x;
- delta.y += stroker->center.y;
+ /* compute second angle point */
+ delta.x = middle.x - delta.x + middle.x;
+ delta.y = middle.y - delta.y + middle.y;
error = ft_stroke_border_lineto( border, &delta, FALSE );
}
@@ -1000,8 +973,8 @@
{
FT_StrokeBorder border = stroker->borders + side;
FT_Angle phi, theta, rotate;
- FT_Fixed length, thcos;
- FT_Vector delta;
+ FT_Fixed length;
+ FT_Vector sigma, delta;
FT_Error error = FT_Err_Ok;
FT_Bool intersect; /* use intersection of lines? */
@@ -1019,10 +992,13 @@
else
{
/* compute minimum required length of lines */
- FT_Fixed min_length = ft_pos_abs( FT_MulFix( stroker->radius,
- FT_Tan( theta ) ) );
+ FT_Fixed min_length;
+ FT_Vector_Unit( &sigma, theta );
+ min_length =
+ ft_pos_abs( FT_MulDiv( stroker->radius, sigma.y, sigma.x ) );
+
intersect = FT_BOOL( min_length &&
stroker->line_length >= min_length &&
line_length >= min_length );
@@ -1040,13 +1016,11 @@
else
{
/* compute median angle */
- phi = stroker->angle_in + theta;
-
- thcos = FT_Cos( theta );
+ phi = stroker->angle_in + theta + rotate;
- length = FT_DivFix( stroker->radius, thcos );
+ length = FT_DivFix( stroker->radius, sigma.x );
- FT_Vector_From_Polar( &delta, length, phi + rotate );
+ FT_Vector_From_Polar( &delta, length, phi );
delta.x += stroker->center.x;
delta.y += stroker->center.y;
}
@@ -1073,10 +1047,10 @@
else
{
/* this is a mitered (pointed) or beveled (truncated) corner */
- FT_Fixed sigma = 0, radius = stroker->radius;
- FT_Angle theta = 0, phi = 0;
- FT_Fixed thcos = 0;
- FT_Bool bevel, fixed_bevel;
+ FT_Fixed radius = stroker->radius;
+ FT_Vector sigma;
+ FT_Angle theta = 0, phi = 0;
+ FT_Bool bevel, fixed_bevel;
rotate = FT_SIDE_TO_ROTATE( side );
@@ -1087,26 +1061,20 @@
fixed_bevel =
FT_BOOL( stroker->line_join != FT_STROKER_LINEJOIN_MITER_VARIABLE );
+ /* check miter limit first */
if ( !bevel )
{
- theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
+ theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out ) / 2;
- if ( theta == FT_ANGLE_PI )
- {
- theta = rotate;
- phi = stroker->angle_in;
- }
- else
- {
- theta /= 2;
- phi = stroker->angle_in + theta + rotate;
- }
+ if ( theta == FT_ANGLE_PI2 )
+ theta = -rotate;
- thcos = FT_Cos( theta );
- sigma = FT_MulFix( stroker->miter_limit, thcos );
+ phi = stroker->angle_in + theta + rotate;
+
+ FT_Vector_From_Polar( &sigma, stroker->miter_limit, theta );
/* is miter limit exceeded? */
- if ( sigma < 0x10000L )
+ if ( sigma.x < 0x10000L )
{
/* don't create variable bevels for very small deviations; */
/* FT_Sin(x) = 0 for x <= 57 */
@@ -1133,36 +1101,34 @@
border->movable = FALSE;
error = ft_stroke_border_lineto( border, &delta, FALSE );
}
- else /* variable bevel */
+ else /* variable bevel or clipped miter */
{
/* the miter is truncated */
FT_Vector middle, delta;
- FT_Fixed length;
+ FT_Fixed coef;
- /* compute middle point */
+ /* compute middle point and first angle point */
FT_Vector_From_Polar( &middle,
FT_MulFix( radius, stroker->miter_limit ),
phi );
- middle.x += stroker->center.x;
- middle.y += stroker->center.y;
- /* compute first angle point */
- length = FT_MulDiv( radius, 0x10000L - sigma,
- ft_pos_abs( FT_Sin( theta ) ) );
+ coef = FT_DivFix( 0x10000L - sigma.x, sigma.y );
+ delta.x = FT_MulFix( middle.y, coef );
+ delta.y = FT_MulFix( -middle.x, coef );
- FT_Vector_From_Polar( &delta, length, phi + rotate );
- delta.x += middle.x;
- delta.y += middle.y;
+ middle.x += stroker->center.x;
+ middle.y += stroker->center.y;
+ delta.x += middle.x;
+ delta.y += middle.y;
error = ft_stroke_border_lineto( border, &delta, FALSE );
if ( error )
goto Exit;
/* compute second angle point */
- FT_Vector_From_Polar( &delta, length, phi - rotate );
- delta.x += middle.x;
- delta.y += middle.y;
+ delta.x = middle.x - delta.x + middle.x;
+ delta.y = middle.y - delta.y + middle.y;
error = ft_stroke_border_lineto( border, &delta, FALSE );
if ( error )
@@ -1189,7 +1155,7 @@
FT_Vector delta;
- length = FT_DivFix( stroker->radius, thcos );
+ length = FT_MulDiv( stroker->radius, stroker->miter_limit, sigma.x );
FT_Vector_From_Polar( &delta, length, phi );
delta.x += stroker->center.x;
diff --git a/src/3rdparty/freetype/src/base/ftsynth.c b/src/3rdparty/freetype/src/base/ftsynth.c
index f87ed65e75..a9119e2b24 100644
--- a/src/3rdparty/freetype/src/base/ftsynth.c
+++ b/src/3rdparty/freetype/src/base/ftsynth.c
@@ -4,7 +4,7 @@
*
* FreeType synthesizing code for emboldening and slanting (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_SYNTHESIS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_OUTLINE_H
-#include FT_BITMAP_H
+#include <freetype/ftsynth.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftoutln.h>
+#include <freetype/ftbitmap.h>
/**************************************************************************
@@ -130,7 +129,7 @@
if ( ( ystr >> 6 ) > FT_INT_MAX || ( ystr >> 6 ) < FT_INT_MIN )
{
FT_TRACE1(( "FT_GlyphSlot_Embolden:" ));
- FT_TRACE1(( "too strong emboldening parameter ystr=%d\n", ystr ));
+ FT_TRACE1(( "too strong emboldening parameter ystr=%ld\n", ystr ));
return;
}
error = FT_GlyphSlot_Own_Bitmap( slot );
diff --git a/src/3rdparty/freetype/src/base/ftsystem.c b/src/3rdparty/freetype/src/base/ftsystem.c
index f92b3a03d5..3013cbda9d 100644
--- a/src/3rdparty/freetype/src/base/ftsystem.c
+++ b/src/3rdparty/freetype/src/base/ftsystem.c
@@ -4,7 +4,7 @@
*
* ANSI-specific FreeType low-level system interface (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -27,11 +27,11 @@
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_SYSTEM_H
-#include FT_ERRORS_H
-#include FT_TYPES_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/ftsystem.h>
+#include <freetype/fterrors.h>
+#include <freetype/fttypes.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/base/fttrigon.c b/src/3rdparty/freetype/src/base/fttrigon.c
index 38721977c7..c6f027cf61 100644
--- a/src/3rdparty/freetype/src/base/fttrigon.c
+++ b/src/3rdparty/freetype/src/base/fttrigon.c
@@ -4,7 +4,7 @@
*
* FreeType trigonometric functions (body).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -29,10 +29,9 @@
*
*/
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_CALC_H
-#include FT_TRIGONOMETRY_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftcalc.h>
+#include <freetype/fttrigon.h>
/* the Cordic shrink factor 0.858785336480436 * 2^32 */
diff --git a/src/3rdparty/freetype/src/base/fttype1.c b/src/3rdparty/freetype/src/base/fttype1.c
index 26d4f1c3a8..be60ed6ec5 100644
--- a/src/3rdparty/freetype/src/base/fttype1.c
+++ b/src/3rdparty/freetype/src/base/fttype1.c
@@ -4,7 +4,7 @@
*
* FreeType utility file for PS names support (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftserv.h>
+#include <freetype/internal/services/svpsinfo.h>
/* documentation is in t1tables.h */
diff --git a/src/3rdparty/freetype/src/base/ftutil.c b/src/3rdparty/freetype/src/base/ftutil.c
index 92bd857e92..d90cfbcd26 100644
--- a/src/3rdparty/freetype/src/base/ftutil.c
+++ b/src/3rdparty/freetype/src/base/ftutil.c
@@ -4,7 +4,7 @@
*
* FreeType utility file for memory and list management (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_LIST_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftlist.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/base/ftver.rc b/src/3rdparty/freetype/src/base/ftver.rc
index 1354497423..0b92e9b899 100644
--- a/src/3rdparty/freetype/src/base/ftver.rc
+++ b/src/3rdparty/freetype/src/base/ftver.rc
@@ -4,7 +4,7 @@
/* */
/* FreeType VERSIONINFO resource for Windows DLLs. */
/* */
-/* Copyright (C) 2018-2019 by */
+/* Copyright (C) 2018-2020 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,8 +18,8 @@
#include<windows.h>
-#define FT_VERSION 2,10,1,0
-#define FT_VERSION_STR "2.10.1"
+#define FT_VERSION 2,10,4,0
+#define FT_VERSION_STR "2.10.4"
VS_VERSION_INFO VERSIONINFO
FILEVERSION FT_VERSION
@@ -45,7 +45,7 @@ BEGIN
VALUE "FileVersion", FT_VERSION_STR
VALUE "ProductName", "FreeType"
VALUE "ProductVersion", FT_VERSION_STR
- VALUE "LegalCopyright", "\251 2018-2019 The FreeType Project www.freetype.org. All rights reserved."
+ VALUE "LegalCopyright", "\251 2000-2020 The FreeType Project www.freetype.org. All rights reserved."
VALUE "InternalName", "freetype"
VALUE "OriginalFilename", FT_FILENAME
END
diff --git a/src/3rdparty/freetype/src/base/ftwinfnt.c b/src/3rdparty/freetype/src/base/ftwinfnt.c
index 59daa77031..699dc3d700 100644
--- a/src/3rdparty/freetype/src/base/ftwinfnt.c
+++ b/src/3rdparty/freetype/src/base/ftwinfnt.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing Windows FNT specific info (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_WINFONTS_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_WINFNT_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftwinfnt.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svwinfnt.h>
/* documentation is in ftwinfnt.h */
diff --git a/src/3rdparty/freetype/src/base/rules.mk b/src/3rdparty/freetype/src/base/rules.mk
index 4b24c6dce7..411c4c821f 100644
--- a/src/3rdparty/freetype/src/base/rules.mk
+++ b/src/3rdparty/freetype/src/base/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/bdf/Jamfile b/src/3rdparty/freetype/src/bdf/Jamfile
deleted file mode 100644
index a49c7f5d33..0000000000
--- a/src/3rdparty/freetype/src/bdf/Jamfile
+++ /dev/null
@@ -1,31 +0,0 @@
-# FreeType 2 src/bdf Jamfile
-#
-# Copyright (C) 2002-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) bdf ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = bdfdrivr
- bdflib
- ;
- }
- else
- {
- _sources = bdf ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/bdf Jamfile
diff --git a/src/3rdparty/freetype/src/bdf/bdf.c b/src/3rdparty/freetype/src/bdf/bdf.c
index e54df6649b..249012e590 100644
--- a/src/3rdparty/freetype/src/bdf/bdf.c
+++ b/src/3rdparty/freetype/src/bdf/bdf.c
@@ -26,7 +26,6 @@ THE SOFTWARE.
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "bdflib.c"
#include "bdfdrivr.c"
diff --git a/src/3rdparty/freetype/src/bdf/bdf.h b/src/3rdparty/freetype/src/bdf/bdf.h
index d9abd2378f..5acbd5f2f9 100644
--- a/src/3rdparty/freetype/src/bdf/bdf.h
+++ b/src/3rdparty/freetype/src/bdf/bdf.h
@@ -30,10 +30,9 @@
* Based on bdf.h,v 1.16 2000/03/16 20:08:51 mleisher
*/
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_HASH_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/fthash.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/bdf/bdfdrivr.c b/src/3rdparty/freetype/src/bdf/bdfdrivr.c
index 60eb93305e..d29188b97b 100644
--- a/src/3rdparty/freetype/src/bdf/bdfdrivr.c
+++ b/src/3rdparty/freetype/src/bdf/bdfdrivr.c
@@ -24,16 +24,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_BDF_H
-#include FT_TRUETYPE_IDS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftbdf.h>
+#include <freetype/ttnameid.h>
-#include FT_SERVICE_BDF_H
-#include FT_SERVICE_FONT_FORMAT_H
+#include <freetype/internal/services/svbdf.h>
+#include <freetype/internal/services/svfntfmt.h>
#include "bdf.h"
#include "bdfdrivr.h"
@@ -184,7 +183,8 @@ THE SOFTWARE.
Exit:
if ( charcode > 0xFFFFFFFFUL )
{
- FT_TRACE1(( "bdf_cmap_char_next: charcode 0x%x > 32bit API" ));
+ FT_TRACE1(( "bdf_cmap_char_next: charcode 0x%lx > 32bit API",
+ charcode ));
*acharcode = 0;
/* XXX: result should be changed to indicate an overflow error */
}
@@ -402,10 +402,10 @@ THE SOFTWARE.
bdf_property_t* prop = NULL;
- FT_TRACE4(( " number of glyphs: allocated %d (used %d)\n",
+ FT_TRACE4(( " number of glyphs: allocated %ld (used %ld)\n",
font->glyphs_size,
font->glyphs_used ));
- FT_TRACE4(( " number of unencoded glyphs: allocated %d (used %d)\n",
+ FT_TRACE4(( " number of unencoded glyphs: allocated %ld (used %ld)\n",
font->unencoded_size,
font->unencoded_used ));
@@ -457,13 +457,13 @@ THE SOFTWARE.
if ( font->font_ascent > 0x7FFF || font->font_ascent < -0x7FFF )
{
font->font_ascent = font->font_ascent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping font ascent to value %d\n",
+ FT_TRACE0(( "BDF_Face_Init: clamping font ascent to value %ld\n",
font->font_ascent ));
}
if ( font->font_descent > 0x7FFF || font->font_descent < -0x7FFF )
{
font->font_descent = font->font_descent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping font descent to value %d\n",
+ FT_TRACE0(( "BDF_Face_Init: clamping font descent to value %ld\n",
font->font_descent ));
}
@@ -504,7 +504,7 @@ THE SOFTWARE.
prop->value.l < -0x504C2L )
{
bsize->size = 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n",
+ FT_TRACE0(( "BDF_Face_Init: clamping point size to value %ld\n",
bsize->size ));
}
else
@@ -517,7 +517,7 @@ THE SOFTWARE.
if ( font->point_size > 0x7FFF )
{
bsize->size = 0x7FFF;
- FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n",
+ FT_TRACE0(( "BDF_Face_Init: clamping point size to value %ld\n",
bsize->size ));
}
else
@@ -539,7 +539,7 @@ THE SOFTWARE.
if ( prop->value.l > 0x7FFF || prop->value.l < -0x7FFF )
{
bsize->y_ppem = 0x7FFF << 6;
- FT_TRACE0(( "BDF_Face_Init: clamping pixel size to value %d\n",
+ FT_TRACE0(( "BDF_Face_Init: clamping pixel size to value %ld\n",
bsize->y_ppem ));
}
else
@@ -615,7 +615,7 @@ THE SOFTWARE.
for ( n = 0; n < font->glyphs_size; n++ )
{
(face->en_table[n]).enc = cur[n].encoding;
- FT_TRACE4(( " idx %d, val 0x%lX\n", n, cur[n].encoding ));
+ FT_TRACE4(( " idx %ld, val 0x%lX\n", n, cur[n].encoding ));
(face->en_table[n]).glyph = (FT_UShort)n;
if ( cur[n].encoding == font->default_char )
@@ -624,7 +624,7 @@ THE SOFTWARE.
face->default_glyph = (FT_UInt)n;
else
FT_TRACE1(( "BDF_Face_Init:"
- " idx %d is too large for this system\n", n ));
+ " idx %ld is too large for this system\n", n ));
}
}
}
@@ -825,7 +825,7 @@ THE SOFTWARE.
bitmap->rows = glyph.bbx.height;
bitmap->width = glyph.bbx.width;
if ( glyph.bpr > FT_INT_MAX )
- FT_TRACE1(( "BDF_Glyph_Load: too large pitch %d is truncated\n",
+ FT_TRACE1(( "BDF_Glyph_Load: too large pitch %ld is truncated\n",
glyph.bpr ));
bitmap->pitch = (int)glyph.bpr; /* same as FT_Bitmap.pitch */
@@ -902,7 +902,8 @@ THE SOFTWARE.
if ( prop->value.l > 0x7FFFFFFFL || prop->value.l < ( -1 - 0x7FFFFFFFL ) )
{
FT_TRACE1(( "bdf_get_bdf_property:"
- " too large integer 0x%x is truncated\n" ));
+ " too large integer 0x%lx is truncated\n",
+ prop->value.l ));
}
aproperty->type = BDF_PROPERTY_TYPE_INTEGER;
aproperty->u.integer = (FT_Int32)prop->value.l;
@@ -912,7 +913,8 @@ THE SOFTWARE.
if ( prop->value.ul > 0xFFFFFFFFUL )
{
FT_TRACE1(( "bdf_get_bdf_property:"
- " too large cardinal 0x%x is truncated\n" ));
+ " too large cardinal 0x%lx is truncated\n",
+ prop->value.ul ));
}
aproperty->type = BDF_PROPERTY_TYPE_CARDINAL;
aproperty->u.cardinal = (FT_UInt32)prop->value.ul;
diff --git a/src/3rdparty/freetype/src/bdf/bdfdrivr.h b/src/3rdparty/freetype/src/bdf/bdfdrivr.h
index b37b84ea31..54aaa3353c 100644
--- a/src/3rdparty/freetype/src/bdf/bdfdrivr.h
+++ b/src/3rdparty/freetype/src/bdf/bdfdrivr.h
@@ -28,8 +28,7 @@ THE SOFTWARE.
#ifndef BDFDRIVR_H_
#define BDFDRIVR_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
#include "bdf.h"
diff --git a/src/3rdparty/freetype/src/bdf/bdferror.h b/src/3rdparty/freetype/src/bdf/bdferror.h
index dbe41c02ab..c1b5444871 100644
--- a/src/3rdparty/freetype/src/bdf/bdferror.h
+++ b/src/3rdparty/freetype/src/bdf/bdferror.h
@@ -29,7 +29,7 @@
#ifndef BDFERROR_H_
#define BDFERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -37,7 +37,7 @@
#define FT_ERR_PREFIX BDF_Err_
#define FT_ERR_BASE FT_Mod_Err_BDF
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* BDFERROR_H_ */
diff --git a/src/3rdparty/freetype/src/bdf/bdflib.c b/src/3rdparty/freetype/src/bdf/bdflib.c
index 63813f7edc..a4ddb9a1d9 100644
--- a/src/3rdparty/freetype/src/bdf/bdflib.c
+++ b/src/3rdparty/freetype/src/bdf/bdflib.c
@@ -31,12 +31,11 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/freetype.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftobjs.h>
#include "bdf.h"
#include "bdferror.h"
diff --git a/src/3rdparty/freetype/src/bzip2/Jamfile b/src/3rdparty/freetype/src/bzip2/Jamfile
deleted file mode 100644
index 4b77916a8d..0000000000
--- a/src/3rdparty/freetype/src/bzip2/Jamfile
+++ /dev/null
@@ -1,18 +0,0 @@
-# FreeType 2 src/bzip2 Jamfile
-#
-# Copyright (C) 2010-2019 by
-# Joel Klinghed
-#
-# based on `src/lzw/Jamfile'
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) bzip2 ;
-
-Library $(FT2_LIB) : ftbzip2.c ;
-
-# end of src/bzip2 Jamfile
diff --git a/src/3rdparty/freetype/src/bzip2/ftbzip2.c b/src/3rdparty/freetype/src/bzip2/ftbzip2.c
index 1fda59b60c..411c5d263b 100644
--- a/src/3rdparty/freetype/src/bzip2/ftbzip2.c
+++ b/src/3rdparty/freetype/src/bzip2/ftbzip2.c
@@ -8,7 +8,7 @@
* parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2010-2019 by
+ * Copyright (C) 2010-2020 by
* Joel Klinghed.
*
* based on `src/gzip/ftgzip.c'
@@ -22,15 +22,14 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_BZIP2_H
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftbzip2.h>
#include FT_CONFIG_STANDARD_LIBRARY_H
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -38,7 +37,7 @@
#define FT_ERR_PREFIX Bzip2_Err_
#define FT_ERR_BASE FT_Mod_Err_Bzip2
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#ifdef FT_CONFIG_OPTION_USE_BZIP2
diff --git a/src/3rdparty/freetype/src/bzip2/rules.mk b/src/3rdparty/freetype/src/bzip2/rules.mk
index f365c1f76d..eed0f4baa4 100644
--- a/src/3rdparty/freetype/src/bzip2/rules.mk
+++ b/src/3rdparty/freetype/src/bzip2/rules.mk
@@ -2,7 +2,7 @@
# FreeType 2 BZIP2 support configuration rules
#
-# Copyright (C) 2010-2019 by
+# Copyright (C) 2010-2020 by
# Joel Klinghed.
#
# based on `src/lzw/rules.mk'
diff --git a/src/3rdparty/freetype/src/cache/Jamfile b/src/3rdparty/freetype/src/cache/Jamfile
deleted file mode 100644
index 51f7196d1b..0000000000
--- a/src/3rdparty/freetype/src/cache/Jamfile
+++ /dev/null
@@ -1,37 +0,0 @@
-# FreeType 2 src/cache Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cache ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftcbasic
- ftccache
- ftcglyph
- ftcimage
- ftcmanag
- ftccmap
- ftcmru
- ftcsbits
- ;
- }
- else
- {
- _sources = ftcache ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cache Jamfile
diff --git a/src/3rdparty/freetype/src/cache/ftcache.c b/src/3rdparty/freetype/src/cache/ftcache.c
index a6a3e63ef0..e90f4639cb 100644
--- a/src/3rdparty/freetype/src/cache/ftcache.c
+++ b/src/3rdparty/freetype/src/cache/ftcache.c
@@ -4,7 +4,7 @@
*
* The FreeType Caching sub-system (body only).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "ftcbasic.c"
#include "ftccache.c"
diff --git a/src/3rdparty/freetype/src/cache/ftcbasic.c b/src/3rdparty/freetype/src/cache/ftcbasic.c
index a473585ebc..43ea314d4a 100644
--- a/src/3rdparty/freetype/src/cache/ftcbasic.c
+++ b/src/3rdparty/freetype/src/cache/ftcbasic.c
@@ -4,7 +4,7 @@
*
* The FreeType basic cache interface (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_CACHE_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftcache.h>
#include "ftcglyph.h"
#include "ftcimage.h"
#include "ftcsbits.h"
@@ -111,7 +110,9 @@
if ( (FT_ULong)face->num_glyphs > FT_UINT_MAX || 0 > face->num_glyphs )
FT_TRACE1(( "ftc_basic_family_get_count:"
- " too large number of glyphs in this face, truncated\n",
+ " the number of glyphs in this face is %ld,\n"
+ " "
+ " which is too much and thus truncated\n",
face->num_glyphs ));
if ( !error )
@@ -394,7 +395,7 @@
#if FT_ULONG_MAX > FT_UINT_MAX
if ( load_flags > FT_UINT_MAX )
FT_TRACE1(( "FTC_ImageCache_LookupScaler:"
- " higher bits in load_flags 0x%x are dropped\n",
+ " higher bits in load_flags 0x%lx are dropped\n",
load_flags & ~((FT_ULong)FT_UINT_MAX) ));
#endif
@@ -594,7 +595,7 @@
#if FT_ULONG_MAX > FT_UINT_MAX
if ( load_flags > FT_UINT_MAX )
FT_TRACE1(( "FTC_ImageCache_LookupScaler:"
- " higher bits in load_flags 0x%x are dropped\n",
+ " higher bits in load_flags 0x%lx are dropped\n",
load_flags & ~((FT_ULong)FT_UINT_MAX) ));
#endif
diff --git a/src/3rdparty/freetype/src/cache/ftccache.c b/src/3rdparty/freetype/src/cache/ftccache.c
index f38ca44ddd..1c8e0f3221 100644
--- a/src/3rdparty/freetype/src/cache/ftccache.c
+++ b/src/3rdparty/freetype/src/cache/ftccache.c
@@ -4,7 +4,7 @@
*
* The FreeType internal cache interface (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
#include "ftcmanag.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
#include "ftccback.h"
#include "ftcerror.h"
diff --git a/src/3rdparty/freetype/src/cache/ftccache.h b/src/3rdparty/freetype/src/cache/ftccache.h
index 140ceadb11..11698bb0e9 100644
--- a/src/3rdparty/freetype/src/cache/ftccache.h
+++ b/src/3rdparty/freetype/src/cache/ftccache.h
@@ -4,7 +4,7 @@
*
* FreeType internal cache interface (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef FTCCACHE_H_
#define FTCCACHE_H_
-
+#include <freetype/internal/compiler-macros.h>
#include "ftcmru.h"
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cache/ftccback.h b/src/3rdparty/freetype/src/cache/ftccback.h
index 9321bc3d4e..542acb1565 100644
--- a/src/3rdparty/freetype/src/cache/ftccback.h
+++ b/src/3rdparty/freetype/src/cache/ftccback.h
@@ -4,7 +4,7 @@
*
* Callback functions of the caching sub-system (specification only).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,14 +18,14 @@
#ifndef FTCCBACK_H_
#define FTCCBACK_H_
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcmru.h"
#include "ftcimage.h"
#include "ftcmanag.h"
#include "ftcglyph.h"
#include "ftcsbits.h"
+FT_BEGIN_HEADER
FT_LOCAL( void )
ftc_inode_free( FTC_Node inode,
@@ -85,6 +85,7 @@
ftc_node_destroy( FTC_Node node,
FTC_Manager manager );
+FT_END_HEADER
#endif /* FTCCBACK_H_ */
diff --git a/src/3rdparty/freetype/src/cache/ftccmap.c b/src/3rdparty/freetype/src/cache/ftccmap.c
index 76ba10e3e9..468c008cf6 100644
--- a/src/3rdparty/freetype/src/cache/ftccmap.c
+++ b/src/3rdparty/freetype/src/cache/ftccmap.c
@@ -4,7 +4,7 @@
*
* FreeType CharMap cache (body)
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,13 +16,12 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_CACHE_H
+#include <freetype/freetype.h>
+#include <freetype/ftcache.h>
#include "ftcmanag.h"
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
#include "ftccback.h"
#include "ftcerror.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcerror.h b/src/3rdparty/freetype/src/cache/ftcerror.h
index e2d6417180..bedfd28371 100644
--- a/src/3rdparty/freetype/src/cache/ftcerror.h
+++ b/src/3rdparty/freetype/src/cache/ftcerror.h
@@ -4,7 +4,7 @@
*
* Caching sub-system error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef FTCERROR_H_
#define FTCERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX FTC_Err_
#define FT_ERR_BASE FT_Mod_Err_Cache
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* FTCERROR_H_ */
diff --git a/src/3rdparty/freetype/src/cache/ftcglyph.c b/src/3rdparty/freetype/src/cache/ftcglyph.c
index 2a0e97d4af..7f5438aad5 100644
--- a/src/3rdparty/freetype/src/cache/ftcglyph.c
+++ b/src/3rdparty/freetype/src/cache/ftcglyph.c
@@ -4,7 +4,7 @@
*
* FreeType Glyph Image (FT_Glyph) cache (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_CACHE_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftcache.h>
#include "ftcglyph.h"
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#include "ftccback.h"
#include "ftcerror.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcglyph.h b/src/3rdparty/freetype/src/cache/ftcglyph.h
index 5a1f0e2a74..5629545f3c 100644
--- a/src/3rdparty/freetype/src/cache/ftcglyph.h
+++ b/src/3rdparty/freetype/src/cache/ftcglyph.h
@@ -4,7 +4,7 @@
*
* FreeType abstract glyph cache (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -117,7 +117,6 @@
#define FTCGLYPH_H_
-#include <ft2build.h>
#include "ftcmanag.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcimage.c b/src/3rdparty/freetype/src/cache/ftcimage.c
index 9e64d51a22..58ebad8c93 100644
--- a/src/3rdparty/freetype/src/cache/ftcimage.c
+++ b/src/3rdparty/freetype/src/cache/ftcimage.c
@@ -4,7 +4,7 @@
*
* FreeType Image cache (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcimage.h"
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftobjs.h>
#include "ftccback.h"
#include "ftcerror.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcimage.h b/src/3rdparty/freetype/src/cache/ftcimage.h
index dcb101fabc..a400788b3c 100644
--- a/src/3rdparty/freetype/src/cache/ftcimage.h
+++ b/src/3rdparty/freetype/src/cache/ftcimage.h
@@ -4,7 +4,7 @@
*
* FreeType Generic Image cache (specification)
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -36,8 +36,7 @@
#define FTCIMAGE_H_
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcglyph.h"
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cache/ftcmanag.c b/src/3rdparty/freetype/src/cache/ftcmanag.c
index bd585968e3..436d41f374 100644
--- a/src/3rdparty/freetype/src/cache/ftcmanag.c
+++ b/src/3rdparty/freetype/src/cache/ftcmanag.c
@@ -4,7 +4,7 @@
*
* FreeType Cache Manager (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcmanag.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_SIZES_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftsizes.h>
#include "ftccback.h"
#include "ftcerror.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcmanag.h b/src/3rdparty/freetype/src/cache/ftcmanag.h
index 60c66c8fc8..6c6ec68545 100644
--- a/src/3rdparty/freetype/src/cache/ftcmanag.h
+++ b/src/3rdparty/freetype/src/cache/ftcmanag.h
@@ -4,7 +4,7 @@
*
* FreeType Cache Manager (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -63,8 +63,7 @@
#define FTCMANAG_H_
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcmru.h"
#include "ftccache.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcmru.c b/src/3rdparty/freetype/src/cache/ftcmru.c
index 18a7b80054..8feed45f6b 100644
--- a/src/3rdparty/freetype/src/cache/ftcmru.c
+++ b/src/3rdparty/freetype/src/cache/ftcmru.c
@@ -4,7 +4,7 @@
*
* FreeType MRU support (body).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcmru.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
#include "ftcerror.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcmru.h b/src/3rdparty/freetype/src/cache/ftcmru.h
index 58721ed340..ac4f9b126d 100644
--- a/src/3rdparty/freetype/src/cache/ftcmru.h
+++ b/src/3rdparty/freetype/src/cache/ftcmru.h
@@ -4,7 +4,7 @@
*
* Simple MRU list-cache (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -44,8 +44,8 @@
#define FTCMRU_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
+#include <freetype/internal/compiler-macros.h>
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
diff --git a/src/3rdparty/freetype/src/cache/ftcsbits.c b/src/3rdparty/freetype/src/cache/ftcsbits.c
index 06b46c896e..e0db930af8 100644
--- a/src/3rdparty/freetype/src/cache/ftcsbits.c
+++ b/src/3rdparty/freetype/src/cache/ftcsbits.c
@@ -4,7 +4,7 @@
*
* FreeType sbits manager (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcsbits.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_ERRORS_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/fterrors.h>
#include "ftccback.h"
#include "ftcerror.h"
diff --git a/src/3rdparty/freetype/src/cache/ftcsbits.h b/src/3rdparty/freetype/src/cache/ftcsbits.h
index f1b71c2835..46f797e724 100644
--- a/src/3rdparty/freetype/src/cache/ftcsbits.h
+++ b/src/3rdparty/freetype/src/cache/ftcsbits.h
@@ -4,7 +4,7 @@
*
* A small-bitmap cache (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTCSBITS_H_
-#include <ft2build.h>
-#include FT_CACHE_H
+#include <freetype/ftcache.h>
#include "ftcglyph.h"
diff --git a/src/3rdparty/freetype/src/cache/rules.mk b/src/3rdparty/freetype/src/cache/rules.mk
index 1618d98303..4738b5153a 100644
--- a/src/3rdparty/freetype/src/cache/rules.mk
+++ b/src/3rdparty/freetype/src/cache/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2000-2019 by
+# Copyright (C) 2000-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cff/Jamfile b/src/3rdparty/freetype/src/cff/Jamfile
deleted file mode 100644
index 10f49cef12..0000000000
--- a/src/3rdparty/freetype/src/cff/Jamfile
+++ /dev/null
@@ -1,36 +0,0 @@
-# FreeType 2 src/cff Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cff ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = cffcmap
- cffdrivr
- cffgload
- cffload
- cffobjs
- cffparse
- cffpic
- ;
- }
- else
- {
- _sources = cff ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cff Jamfile
diff --git a/src/3rdparty/freetype/src/cff/cf2arrst.c b/src/3rdparty/freetype/src/cff/cf2arrst.c
deleted file mode 100644
index 89f3e9f1d7..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2arrst.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2arrst.c */
-/* */
-/* Adobe's code for Array Stacks (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2arrst.h"
-
-#include "cf2error.h"
-
-
- /*
- * CF2_ArrStack uses an error pointer, to enable shared errors.
- * Shared errors are necessary when multiple objects allow the program
- * to continue after detecting errors. Only the first error should be
- * recorded.
- */
-
- FT_LOCAL_DEF( void )
- cf2_arrstack_init( CF2_ArrStack arrstack,
- FT_Memory memory,
- FT_Error* error,
- size_t sizeItem )
- {
- FT_ASSERT( arrstack != NULL );
-
- /* initialize the structure */
- arrstack->memory = memory;
- arrstack->error = error;
- arrstack->sizeItem = sizeItem;
- arrstack->allocated = 0;
- arrstack->chunk = 10; /* chunks of 10 items */
- arrstack->count = 0;
- arrstack->totalSize = 0;
- arrstack->ptr = NULL;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_arrstack_finalize( CF2_ArrStack arrstack )
- {
- FT_Memory memory = arrstack->memory; /* for FT_FREE */
-
-
- FT_ASSERT( arrstack != NULL );
-
- 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 != NULL );
-
- {
- FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
- FT_Memory memory = arrstack->memory; /* for FT_REALLOC */
-
- size_t newSize = numElements * arrstack->sizeItem;
-
-
- if ( numElements > FT_LONG_MAX / arrstack->sizeItem )
- goto exit;
-
-
- FT_ASSERT( newSize > 0 ); /* avoid realloc with zero size */
-
- if ( !FT_REALLOC( arrstack->ptr, arrstack->totalSize, newSize ) )
- {
- arrstack->allocated = numElements;
- arrstack->totalSize = newSize;
-
- if ( arrstack->count > numElements )
- {
- /* we truncated the list! */
- CF2_SET_ERROR( arrstack->error, Stack_Overflow );
- arrstack->count = numElements;
- return FALSE;
- }
-
- return TRUE; /* success */
- }
- }
-
- exit:
- /* if there's not already an error, store this one */
- CF2_SET_ERROR( arrstack->error, Out_Of_Memory );
-
- return FALSE;
- }
-
-
- /* set the count, ensuring allocation is sufficient */
- FT_LOCAL_DEF( void )
- cf2_arrstack_setCount( CF2_ArrStack arrstack,
- size_t numElements )
- {
- FT_ASSERT( arrstack != NULL );
-
- 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 != NULL );
-
- arrstack->count = 0;
- }
-
-
- /* current number of items */
- FT_LOCAL_DEF( size_t )
- cf2_arrstack_size( const CF2_ArrStack arrstack )
- {
- FT_ASSERT( arrstack != NULL );
-
- return arrstack->count;
- }
-
-
- FT_LOCAL_DEF( void* )
- cf2_arrstack_getBuffer( const CF2_ArrStack arrstack )
- {
- FT_ASSERT( arrstack != NULL );
-
- 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 != NULL );
-
- 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 != NULL );
-
- if ( arrstack->count == arrstack->allocated )
- {
- /* grow the buffer by one chunk */
- if ( !cf2_arrstack_setNumElements(
- arrstack, arrstack->allocated + arrstack->chunk ) )
- {
- /* on error, ignore the push */
- return;
- }
- }
-
- FT_ASSERT( ptr != NULL );
-
- {
- size_t offset = arrstack->count * arrstack->sizeItem;
- void* newPtr = (FT_Byte*)arrstack->ptr + offset;
-
-
- FT_MEM_COPY( newPtr, ptr, arrstack->sizeItem );
- arrstack->count += 1;
- }
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2arrst.h b/src/3rdparty/freetype/src/cff/cf2arrst.h
deleted file mode 100644
index ff5ad8b126..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2arrst.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2arrst.h */
-/* */
-/* Adobe's code for Array Stacks (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2ARRST_H__
-#define __CF2ARRST_H__
-
-
-#include "cf2error.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* need to define the struct here (not opaque) so it can be allocated by */
- /* clients */
- typedef struct CF2_ArrStackRec_
- {
- FT_Memory memory;
- FT_Error* error;
-
- size_t sizeItem; /* bytes per element */
- size_t allocated; /* items allocated */
- size_t chunk; /* allocation increment in items */
- size_t count; /* number of elements allocated */
- size_t totalSize; /* total bytes allocated */
-
- void* ptr; /* ptr to data */
-
- } CF2_ArrStackRec, *CF2_ArrStack;
-
-
- FT_LOCAL( void )
- cf2_arrstack_init( CF2_ArrStack arrstack,
- FT_Memory memory,
- FT_Error* error,
- size_t sizeItem );
- FT_LOCAL( void )
- cf2_arrstack_finalize( CF2_ArrStack arrstack );
-
- FT_LOCAL( void )
- cf2_arrstack_setCount( CF2_ArrStack arrstack,
- size_t numElements );
- FT_LOCAL( void )
- cf2_arrstack_clear( CF2_ArrStack arrstack );
- FT_LOCAL( size_t )
- cf2_arrstack_size( const CF2_ArrStack arrstack );
-
- FT_LOCAL( void* )
- cf2_arrstack_getBuffer( const CF2_ArrStack arrstack );
- FT_LOCAL( void* )
- cf2_arrstack_getPointer( const CF2_ArrStack arrstack,
- size_t idx );
-
- FT_LOCAL( void )
- cf2_arrstack_push( CF2_ArrStack arrstack,
- const void* ptr );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2ARRST_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2blues.c b/src/3rdparty/freetype/src/cff/cf2blues.c
deleted file mode 100644
index 250f89e0df..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2blues.c
+++ /dev/null
@@ -1,579 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2blues.c */
-/* */
-/* Adobe's code for handling Blue Zones (body). */
-/* */
-/* Copyright 2009-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2blues.h"
-#include "cf2hints.h"
-#include "cf2font.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2blues
-
-
- /*
- * For blue values, the FreeType parser produces an array of integers,
- * while the Adobe CFF engine produces an array of fixed.
- * Define a macro to convert FreeType to fixed.
- */
-#define cf2_blueToFixed( x ) cf2_intToFixed( x )
-
-
- FT_LOCAL_DEF( void )
- cf2_blues_init( CF2_Blues blues,
- CF2_Font font )
- {
- /* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
-
- CF2_Fixed zoneHeight;
- CF2_Fixed maxZoneHeight = 0;
- CF2_Fixed csUnitsPerPixel;
-
- size_t numBlueValues;
- size_t numOtherBlues;
- size_t numFamilyBlues;
- size_t numFamilyOtherBlues;
-
- FT_Pos* blueValues;
- FT_Pos* otherBlues;
- FT_Pos* familyBlues;
- FT_Pos* familyOtherBlues;
-
- size_t i;
- CF2_Fixed emBoxBottom, emBoxTop;
-
-#if 0
- CF2_Int unitsPerEm = font->unitsPerEm;
-
-
- if ( unitsPerEm == 0 )
- unitsPerEm = 1000;
-#endif
-
- FT_ZERO( blues );
- blues->scale = font->innerTransform.d;
-
- cf2_getBlueMetrics( decoder,
- &blues->blueScale,
- &blues->blueShift,
- &blues->blueFuzz );
-
- cf2_getBlueValues( decoder, &numBlueValues, &blueValues );
- cf2_getOtherBlues( decoder, &numOtherBlues, &otherBlues );
- cf2_getFamilyBlues( decoder, &numFamilyBlues, &familyBlues );
- cf2_getFamilyOtherBlues( decoder, &numFamilyOtherBlues, &familyOtherBlues );
-
- /*
- * synthetic em box hint heuristic
- *
- * Apply this when ideographic dictionary (LanguageGroup 1) has no
- * real alignment zones. Adobe tools generate dummy zones at -250 and
- * 1100 for a 1000 unit em. Fonts with ICF-based alignment zones
- * should not enable the heuristic. When the heuristic is enabled,
- * the font's blue zones are ignored.
- *
- */
-
- /* get em box from OS/2 typoAscender/Descender */
- /* TODO: FreeType does not parse these metrics. Skip them for now. */
-#if 0
- FCM_getHorizontalLineMetrics( &e,
- font->font,
- &ascender,
- &descender,
- &linegap );
- if ( ascender - descender == unitsPerEm )
- {
- emBoxBottom = cf2_intToFixed( descender );
- emBoxTop = cf2_intToFixed( ascender );
- }
- else
-#endif
- {
- emBoxBottom = CF2_ICF_Bottom;
- emBoxTop = CF2_ICF_Top;
- }
-
- if ( cf2_getLanguageGroup( decoder ) == 1 &&
- ( numBlueValues == 0 ||
- ( numBlueValues == 4 &&
- cf2_blueToFixed( blueValues[0] ) < emBoxBottom &&
- cf2_blueToFixed( blueValues[1] ) < emBoxBottom &&
- cf2_blueToFixed( blueValues[2] ) > emBoxTop &&
- cf2_blueToFixed( blueValues[3] ) > emBoxTop ) ) )
- {
- /*
- * Construct hint edges suitable for synthetic ghost hints at top
- * and bottom of em box. +-CF2_MIN_COUNTER allows for unhinted
- * features above or below the last hinted edge. This also gives a
- * net 1 pixel boost to the height of ideographic glyphs.
- *
- * Note: Adjust synthetic hints outward by epsilon (0x.0001) to
- * avoid interference. E.g., some fonts have real hints at
- * 880 and -120.
- */
-
- blues->emBoxBottomEdge.csCoord = emBoxBottom - CF2_FIXED_EPSILON;
- blues->emBoxBottomEdge.dsCoord = cf2_fixedRound(
- FT_MulFix(
- blues->emBoxBottomEdge.csCoord,
- blues->scale ) ) -
- CF2_MIN_COUNTER;
- blues->emBoxBottomEdge.scale = blues->scale;
- blues->emBoxBottomEdge.flags = CF2_GhostBottom |
- CF2_Locked |
- CF2_Synthetic;
-
- blues->emBoxTopEdge.csCoord = emBoxTop + CF2_FIXED_EPSILON +
- 2 * font->darkenY;
- blues->emBoxTopEdge.dsCoord = cf2_fixedRound(
- FT_MulFix(
- blues->emBoxTopEdge.csCoord,
- blues->scale ) ) +
- CF2_MIN_COUNTER;
- blues->emBoxTopEdge.scale = blues->scale;
- blues->emBoxTopEdge.flags = CF2_GhostTop |
- CF2_Locked |
- CF2_Synthetic;
-
- blues->doEmBoxHints = TRUE; /* enable the heuristic */
-
- return;
- }
-
- /* copy `BlueValues' and `OtherBlues' to a combined array of top and */
- /* bottom zones */
- for ( i = 0; i < numBlueValues; i += 2 )
- {
- blues->zone[blues->count].csBottomEdge =
- cf2_blueToFixed( blueValues[i] );
- blues->zone[blues->count].csTopEdge =
- cf2_blueToFixed( blueValues[i + 1] );
-
- zoneHeight = blues->zone[blues->count].csTopEdge -
- blues->zone[blues->count].csBottomEdge;
-
- if ( zoneHeight < 0 )
- {
- FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" ));
- continue; /* reject this zone */
- }
-
- if ( zoneHeight > maxZoneHeight )
- {
- /* take maximum before darkening adjustment */
- /* so overshoot suppression point doesn't change */
- maxZoneHeight = zoneHeight;
- }
-
- /* adjust both edges of top zone upward by twice darkening amount */
- if ( i != 0 )
- {
- blues->zone[blues->count].csTopEdge += 2 * font->darkenY;
- blues->zone[blues->count].csBottomEdge += 2 * font->darkenY;
- }
-
- /* first `BlueValue' is bottom zone; others are top */
- if ( i == 0 )
- {
- blues->zone[blues->count].bottomZone =
- TRUE;
- blues->zone[blues->count].csFlatEdge =
- blues->zone[blues->count].csTopEdge;
- }
- else
- {
- blues->zone[blues->count].bottomZone =
- FALSE;
- blues->zone[blues->count].csFlatEdge =
- blues->zone[blues->count].csBottomEdge;
- }
-
- blues->count += 1;
- }
-
- for ( i = 0; i < numOtherBlues; i += 2 )
- {
- blues->zone[blues->count].csBottomEdge =
- cf2_blueToFixed( otherBlues[i] );
- blues->zone[blues->count].csTopEdge =
- cf2_blueToFixed( otherBlues[i + 1] );
-
- zoneHeight = blues->zone[blues->count].csTopEdge -
- blues->zone[blues->count].csBottomEdge;
-
- if ( zoneHeight < 0 )
- {
- FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" ));
- continue; /* reject this zone */
- }
-
- if ( zoneHeight > maxZoneHeight )
- {
- /* take maximum before darkening adjustment */
- /* so overshoot suppression point doesn't change */
- maxZoneHeight = zoneHeight;
- }
-
- /* Note: bottom zones are not adjusted for darkening amount */
-
- /* all OtherBlues are bottom zone */
- blues->zone[blues->count].bottomZone =
- TRUE;
- blues->zone[blues->count].csFlatEdge =
- blues->zone[blues->count].csTopEdge;
-
- blues->count += 1;
- }
-
- /* Adjust for FamilyBlues */
-
- /* Search for the nearest flat edge in `FamilyBlues' or */
- /* `FamilyOtherBlues'. According to the Black Book, any matching edge */
- /* must be within one device pixel */
-
- csUnitsPerPixel = FT_DivFix( cf2_intToFixed( 1 ), blues->scale );
-
- /* loop on all zones in this font */
- for ( i = 0; i < blues->count; i++ )
- {
- size_t j;
- CF2_Fixed minDiff;
- CF2_Fixed flatFamilyEdge, diff;
- /* value for this font */
- CF2_Fixed flatEdge = blues->zone[i].csFlatEdge;
-
-
- if ( blues->zone[i].bottomZone )
- {
- /* In a bottom zone, the top edge is the flat edge. */
- /* Search `FamilyOtherBlues' for bottom zones; look for closest */
- /* Family edge that is within the one pixel threshold. */
-
- minDiff = CF2_FIXED_MAX;
-
- for ( j = 0; j < numFamilyOtherBlues; j += 2 )
- {
- /* top edge */
- flatFamilyEdge = cf2_blueToFixed( familyOtherBlues[j + 1] );
-
- diff = cf2_fixedAbs( flatEdge - flatFamilyEdge );
-
- if ( diff < minDiff && diff < csUnitsPerPixel )
- {
- blues->zone[i].csFlatEdge = flatFamilyEdge;
- minDiff = diff;
-
- if ( diff == 0 )
- break;
- }
- }
-
- /* check the first member of FamilyBlues, which is a bottom zone */
- if ( numFamilyBlues >= 2 )
- {
- /* top edge */
- flatFamilyEdge = cf2_blueToFixed( familyBlues[1] );
-
- diff = cf2_fixedAbs( flatEdge - flatFamilyEdge );
-
- if ( diff < minDiff && diff < csUnitsPerPixel )
- blues->zone[i].csFlatEdge = flatFamilyEdge;
- }
- }
- else
- {
- /* In a top zone, the bottom edge is the flat edge. */
- /* Search `FamilyBlues' for top zones; skip first zone, which is a */
- /* bottom zone; look for closest Family edge that is within the */
- /* one pixel threshold */
-
- minDiff = CF2_FIXED_MAX;
-
- for ( j = 2; j < numFamilyBlues; j += 2 )
- {
- /* bottom edge */
- flatFamilyEdge = cf2_blueToFixed( familyBlues[j] );
-
- /* adjust edges of top zone upward by twice darkening amount */
- flatFamilyEdge += 2 * font->darkenY; /* bottom edge */
-
- diff = cf2_fixedAbs( 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_floatToFixed( .6 ) -
- FT_MulDiv( cf2_floatToFixed ( .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 ( ( blues->zone[i].csBottomEdge - csFuzz ) <=
- bottomHintEdge->csCoord &&
- bottomHintEdge->csCoord <=
- ( blues->zone[i].csTopEdge + csFuzz ) )
- {
- /* bottom edge captured by bottom zone */
-
- if ( blues->suppressOvershoot )
- dsNew = blues->zone[i].dsFlatEdge;
-
- else if ( ( blues->zone[i].csTopEdge - bottomHintEdge->csCoord ) >=
- blues->blueShift )
- {
- /* guarantee minimum of 1 pixel overshoot */
- dsNew = FT_MIN(
- cf2_fixedRound( bottomHintEdge->dsCoord ),
- blues->zone[i].dsFlatEdge - cf2_intToFixed( 1 ) );
- }
-
- else
- {
- /* simply round captured edge */
- dsNew = cf2_fixedRound( bottomHintEdge->dsCoord );
- }
-
- dsMove = dsNew - bottomHintEdge->dsCoord;
- captured = TRUE;
-
- break;
- }
- }
-
- if ( !blues->zone[i].bottomZone && cf2_hint_isTop( topHintEdge ) )
- {
- if ( ( blues->zone[i].csBottomEdge - csFuzz ) <=
- topHintEdge->csCoord &&
- topHintEdge->csCoord <=
- ( blues->zone[i].csTopEdge + csFuzz ) )
- {
- /* top edge captured by top zone */
-
- if ( blues->suppressOvershoot )
- dsNew = blues->zone[i].dsFlatEdge;
-
- else if ( ( topHintEdge->csCoord - blues->zone[i].csBottomEdge ) >=
- blues->blueShift )
- {
- /* guarantee minimum of 1 pixel overshoot */
- dsNew = FT_MAX(
- cf2_fixedRound( topHintEdge->dsCoord ),
- blues->zone[i].dsFlatEdge + cf2_intToFixed( 1 ) );
- }
-
- else
- {
- /* simply round captured edge */
- dsNew = cf2_fixedRound( topHintEdge->dsCoord );
- }
-
- dsMove = dsNew - topHintEdge->dsCoord;
- captured = TRUE;
-
- break;
- }
- }
- }
-
- if ( captured )
- {
- /* move both edges and flag them `locked' */
- if ( cf2_hint_isValid( bottomHintEdge ) )
- {
- bottomHintEdge->dsCoord += dsMove;
- cf2_hint_lock( bottomHintEdge );
- }
-
- if ( cf2_hint_isValid( topHintEdge ) )
- {
- topHintEdge->dsCoord += dsMove;
- cf2_hint_lock( topHintEdge );
- }
- }
-
- return captured;
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2blues.h b/src/3rdparty/freetype/src/cff/cf2blues.h
deleted file mode 100644
index 2f38fcad8f..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2blues.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2blues.h */
-/* */
-/* Adobe's code for handling Blue Zones (specification). */
-/* */
-/* Copyright 2009-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
- /*
- * A `CF2_Blues' object stores the blue zones (horizontal alignment
- * zones) of a font. These are specified in the CFF private dictionary
- * by `BlueValues', `OtherBlues', `FamilyBlues', and `FamilyOtherBlues'.
- * Each zone is defined by a top and bottom edge in character space.
- * Further, each zone is either a top zone or a bottom zone, as recorded
- * by `bottomZone'.
- *
- * The maximum number of `BlueValues' and `FamilyBlues' is 7 each.
- * However, these are combined to produce a total of 7 zones.
- * Similarly, the maximum number of `OtherBlues' and `FamilyOtherBlues'
- * is 5 and these are combined to produce an additional 5 zones.
- *
- * Blue zones are used to `capture' hints and force them to a common
- * alignment point. This alignment is recorded in device space in
- * `dsFlatEdge'. Except for this value, a `CF2_Blues' object could be
- * constructed independently of scaling. Construction may occur once
- * the matrix is known. Other features implemented in the Capture
- * method are overshoot suppression, overshoot enforcement, and Blue
- * Boost.
- *
- * Capture is determined by `BlueValues' and `OtherBlues', but the
- * alignment point may be adjusted to the scaled flat edge of
- * `FamilyBlues' or `FamilyOtherBlues'. No alignment is done to the
- * curved edge of a zone.
- *
- */
-
-
-#ifndef __CF2BLUES_H__
-#define __CF2BLUES_H__
-
-
-#include "cf2glue.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * `CF2_Hint' is shared by `cf2hints.h' and
- * `cf2blues.h', but `cf2blues.h' depends on
- * `cf2hints.h', so define it here. Note: The typedef is in
- * `cf2glue.h'.
- *
- */
- enum
- {
- CF2_GhostBottom = 0x1, /* a single bottom edge */
- CF2_GhostTop = 0x2, /* a single top edge */
- CF2_PairBottom = 0x4, /* the bottom edge of a stem hint */
- CF2_PairTop = 0x8, /* the top edge of a stem hint */
- CF2_Locked = 0x10, /* this edge has been aligned */
- /* by a blue zone */
- CF2_Synthetic = 0x20 /* this edge was synthesized */
- };
-
-
- /*
- * Default value for OS/2 typoAscender/Descender when their difference
- * is not equal to `unitsPerEm'. The default is based on -250 and 1100
- * in `CF2_Blues', assuming 1000 units per em here.
- *
- */
- enum
- {
- CF2_ICF_Top = cf2_intToFixed( 880 ),
- CF2_ICF_Bottom = cf2_intToFixed( -120 )
- };
-
-
- /*
- * Constant used for hint adjustment and for synthetic em box hint
- * placement.
- */
-#define CF2_MIN_COUNTER cf2_floatToFixed( 0.5 )
-
-
- /* shared typedef is in cf2glue.h */
- struct CF2_HintRec_
- {
- CF2_UInt flags; /* attributes of the edge */
- size_t index; /* index in original stem hint array */
- /* (if not synthetic) */
- CF2_Fixed csCoord;
- CF2_Fixed dsCoord;
- CF2_Fixed scale;
- };
-
-
- typedef struct CF2_BlueRec_
- {
- CF2_Fixed csBottomEdge;
- CF2_Fixed csTopEdge;
- CF2_Fixed csFlatEdge; /* may be from either local or Family zones */
- CF2_Fixed dsFlatEdge; /* top edge of bottom zone or bottom edge */
- /* of top zone (rounded) */
- FT_Bool bottomZone;
-
- } CF2_BlueRec;
-
-
- /* max total blue zones is 12 */
- enum
- {
- CF2_MAX_BLUES = 7,
- CF2_MAX_OTHERBLUES = 5
- };
-
-
- typedef struct CF2_BluesRec_
- {
- CF2_Fixed scale;
- CF2_UInt count;
- FT_Bool suppressOvershoot;
- FT_Bool doEmBoxHints;
-
- CF2_Fixed blueScale;
- CF2_Fixed blueShift;
- CF2_Fixed blueFuzz;
-
- CF2_Fixed boost;
-
- CF2_HintRec emBoxTopEdge;
- CF2_HintRec emBoxBottomEdge;
-
- CF2_BlueRec zone[CF2_MAX_BLUES + CF2_MAX_OTHERBLUES];
-
- } CF2_BluesRec, *CF2_Blues;
-
-
- FT_LOCAL( void )
- cf2_blues_init( CF2_Blues blues,
- CF2_Font font );
- FT_LOCAL( FT_Bool )
- cf2_blues_capture( const CF2_Blues blues,
- CF2_Hint bottomHintEdge,
- CF2_Hint topHintEdge );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2BLUES_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2error.c b/src/3rdparty/freetype/src/cff/cf2error.c
deleted file mode 100644
index b5595a3d1f..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2error.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2error.c */
-/* */
-/* Adobe's code for error handling (body). */
-/* */
-/* Copyright 2006-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include "cf2error.h"
-
-
- FT_LOCAL_DEF( void )
- cf2_setError( FT_Error* error,
- FT_Error value )
- {
- if ( error && *error == 0 )
- *error = value;
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2error.h b/src/3rdparty/freetype/src/cff/cf2error.h
deleted file mode 100644
index 6453ebcb7b..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2error.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2error.h */
-/* */
-/* Adobe's code for error handling (specification). */
-/* */
-/* Copyright 2006-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2ERROR_H__
-#define __CF2ERROR_H__
-
-
-#include FT_MODULE_ERRORS_H
-
-#undef __FTERRORS_H__
-
-#undef FT_ERR_PREFIX
-#define FT_ERR_PREFIX CF2_Err_
-#define FT_ERR_BASE FT_Mod_Err_CF2
-
-
-#include FT_ERRORS_H
-#include "cf2ft.h"
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * A poor-man error facility.
- *
- * This code being written in vanilla C, doesn't have the luxury of a
- * language-supported exception mechanism such as the one available in
- * Java. Instead, we are stuck with using error codes that must be
- * carefully managed and preserved. However, it is convenient for us to
- * model our error mechanism on a Java-like exception mechanism.
- * When we assign an error code we are thus `throwing' an error.
- *
- * The perservation 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 propogate and be handled at the appropriate location in
- * the code.
- *
- * This allows a style of code where the error code is initialized
- * up front and a block of calls are made with the error code only
- * being checked after the block. If a new error occurs, the original
- * error will be preserved and a functional no-op should result in any
- * subsequent function that has an initial error code not equal to
- * `FT_Err_Ok'.
- *
- * Errors are encoded by calling the `FT_THROW' macro. For example,
- *
- * {
- * FT_Error e;
- *
- *
- * ...
- * e = FT_THROW( Out_Of_Memory );
- * }
- *
- */
-
-
- /* Set error code to a particular value. */
- FT_LOCAL( void )
- cf2_setError( FT_Error* error,
- FT_Error value );
-
-
- /*
- * A macro that conditionally sets an error code.
- *
- * This macro will first check whether `error' is set;
- * if not, it will set it to `e'.
- *
- */
-#define CF2_SET_ERROR( error, e ) \
- cf2_setError( error, FT_THROW( e ) )
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2ERROR_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2fixed.h b/src/3rdparty/freetype/src/cff/cf2fixed.h
deleted file mode 100644
index d6d9faf8e5..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2fixed.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2fixed.h */
-/* */
-/* Adobe's code for Fixed Point Mathematics (specification only). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2FIXED_H__
-#define __CF2FIXED_H__
-
-
-FT_BEGIN_HEADER
-
-
- /* rasterizer integer and fixed point arithmetic must be 32-bit */
-
-#define CF2_Fixed CF2_F16Dot16
- typedef FT_Int32 CF2_Frac; /* 2.30 fixed point */
-
-
-#define CF2_FIXED_MAX ( (CF2_Fixed)0x7FFFFFFFL )
-#define CF2_FIXED_MIN ( (CF2_Fixed)0x80000000L )
-#define CF2_FIXED_ONE 0x10000L
-#define CF2_FIXED_EPSILON 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_floatToFixed( f ) \
- ( (CF2_Fixed)( (f) * 65536.0 + 0.5 ) )
-#define cf2_fixedAbs( x ) \
- ( (x) < 0 ? -(x) : (x) )
-#define cf2_fixedFloor( x ) \
- ( (CF2_Fixed)( (FT_UInt32)(x) & 0xFFFF0000UL ) )
-#define cf2_fixedFraction( x ) \
- ( (x) - cf2_fixedFloor( x ) )
-#define cf2_fracToFixed( x ) \
- ( (x) < 0 ? -( ( -(x) + 0x2000 ) >> 14 ) \
- : ( ( (x) + 0x2000 ) >> 14 ) )
-
-
- /* signed numeric types */
- typedef enum CF2_NumberType_
- {
- CF2_NumberFixed, /* 16.16 */
- CF2_NumberFrac, /* 2.30 */
- CF2_NumberInt /* 32.0 */
-
- } CF2_NumberType;
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2FIXED_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2font.c b/src/3rdparty/freetype/src/cff/cf2font.c
deleted file mode 100644
index 83fd348f2d..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2font.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2font.c */
-/* */
-/* Adobe's code for font instances (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_INTERNAL_CALC_H
-
-#include "cf2ft.h"
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2error.h"
-#include "cf2intrp.h"
-
-
- /* Compute a stem darkening amount in character space. */
- static void
- cf2_computeDarkening( CF2_Fixed emRatio,
- CF2_Fixed ppem,
- CF2_Fixed stemWidth,
- CF2_Fixed* darkenAmount,
- CF2_Fixed boldenAmount,
- FT_Bool stemDarkened,
- FT_Int* darkenParams )
- {
- /*
- * Total darkening amount is computed in 1000 unit character space
- * using the modified 5 part curve as Adobe's Avalon rasterizer.
- * The darkening amount is smaller for thicker stems.
- * It becomes zero when the stem is thicker than 2.333 pixels.
- *
- * By default, we use
- *
- * darkenAmount = 0.4 pixels if scaledStem <= 0.5 pixels,
- * darkenAmount = 0.275 pixels if 1 <= scaledStem <= 1.667 pixels,
- * darkenAmount = 0 pixel if scaledStem >= 2.333 pixels,
- *
- * and piecewise linear in-between:
- *
- *
- * darkening
- * ^
- * |
- * | (x1,y1)
- * |--------+
- * | \
- * | \
- * | \ (x3,y3)
- * | +----------+
- * | (x2,y2) \
- * | \
- * | \
- * | +-----------------
- * | (x4,y4)
- * +---------------------------------------------> stem
- * thickness
- *
- *
- * This corresponds to the following values for the
- * `darkening-parameters' property:
- *
- * (x1, y1) = (500, 400)
- * (x2, y2) = (1000, 275)
- * (x3, y3) = (1667, 275)
- * (x4, y4) = (2333, 0)
- *
- */
-
- /* Internal calculations are done in units per thousand for */
- /* convenience. The x axis is scaled stem width in */
- /* thousandths of a pixel. That is, 1000 is 1 pixel. */
- /* The y axis is darkening amount in thousandths of a pixel.*/
- /* In the code, below, dividing by ppem and */
- /* adjusting for emRatio converts darkenAmount to character */
- /* space (font units). */
- CF2_Fixed stemWidthPer1000, scaledStem;
- FT_Int logBase2;
-
-
- *darkenAmount = 0;
-
- if ( boldenAmount == 0 && !stemDarkened )
- return;
-
- /* protect against range problems and divide by zero */
- if ( emRatio < cf2_floatToFixed( .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 */
-
- /* caller's transform is adjusted for subpixel positioning */
- static void
- cf2_font_setup( CF2_Font font,
- const CF2_Matrix* transform )
- {
- /* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
-
- FT_Bool needExtraSetup = FALSE;
-
- /* character space units */
- CF2_Fixed boldenX = font->syntheticEmboldeningAmountX;
- CF2_Fixed boldenY = font->syntheticEmboldeningAmountY;
-
- CFF_SubFont subFont;
- CF2_Fixed ppem;
-
-
- /* 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 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 > 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 );
- }
- }
-
-
- /* equivalent to AdobeGetOutline */
- FT_LOCAL_DEF( FT_Error )
- cf2_getGlyphOutline( CF2_Font font,
- CF2_Buffer charstring,
- const CF2_Matrix* transform,
- CF2_F16Dot16* glyphWidth )
- {
- FT_Error lastError = FT_Err_Ok;
-
- FT_Vector translation;
-
-#if 0
- FT_Vector advancePoint;
-#endif
-
- CF2_Fixed advWidth = 0;
- FT_Bool needWinding;
-
-
- /* Note: use both integer and fraction for outlines. This allows bbox */
- /* to come out directly. */
-
- translation.x = transform->tx;
- translation.y = transform->ty;
-
- /* set up values based on transform */
- cf2_font_setup( font, transform );
- if ( font->error )
- goto exit; /* setup encountered an error */
-
- /* reset darken direction */
- font->reverseWinding = FALSE;
-
- /* winding order only affects darkening */
- needWinding = font->darkened;
-
- while ( 1 )
- {
- /* reset output buffer */
- cf2_outline_reset( &font->outline );
-
- /* build the outline, passing the full translation */
- cf2_interpT2CharString( font,
- charstring,
- (CF2_OutlineCallbacks)&font->outline,
- &translation,
- FALSE,
- 0,
- 0,
- &advWidth );
-
- if ( font->error )
- goto exit;
-
- if ( !needWinding )
- break;
-
- /* check winding order */
- if ( font->outline.root.windingMomentum >= 0 ) /* CFF is CCW */
- break;
-
- /* invert darkening and render again */
- /* TODO: this should be a parameter to getOutline-computeOffset */
- font->reverseWinding = TRUE;
-
- needWinding = FALSE; /* exit after next iteration */
- }
-
- /* finish storing client outline */
- cf2_outline_close( &font->outline );
-
- exit:
- /* FreeType just wants the advance width; there is no translation */
- *glyphWidth = advWidth;
-
- /* free resources and collect errors from objects we've used */
- cf2_setError( &font->error, lastError );
-
- return font->error;
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2font.h b/src/3rdparty/freetype/src/cff/cf2font.h
deleted file mode 100644
index 86cf02f49d..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2font.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2font.h */
-/* */
-/* Adobe's code for font instances (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2FONT_H__
-#define __CF2FONT_H__
-
-
-#include "cf2ft.h"
-#include "cf2blues.h"
-
-
-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 */
-
-
- /* typedef is in `cf2glue.h' */
- struct CF2_FontRec_
- {
- FT_Memory memory;
- FT_Error error; /* shared error for this instance */
-
- 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 */
-
- CF2_Int unitsPerEm;
-
- CF2_Fixed syntheticEmboldeningAmountX; /* character space units */
- CF2_Fixed syntheticEmboldeningAmountY; /* character space units */
-
- /* FreeType related members */
- CF2_OutlineRec outline; /* freetype glyph outline functions */
- CFF_Decoder* decoder;
- CFF_SubFont lastSubfont; /* FreeType parsed data; */
- /* top font or subfont */
-
- /* these flags can vary from one call to the next */
- FT_Bool hinted;
- FT_Bool darkened; /* true if stemDarkened or synthetic bold */
- /* i.e. darkenX != 0 || darkenY != 0 */
- FT_Bool stemDarkened;
-
- FT_Int darkenParams[8]; /* 1000 unit character space */
-
- /* variables that depend on both FontDict and Transform */
- CF2_Fixed stdVW; /* in character space; depends on dict entry */
- CF2_Fixed stdHW; /* in character space; depends on dict entry */
- CF2_Fixed darkenX; /* character space units */
- CF2_Fixed darkenY; /* depends on transform */
- /* and private dict (StdVW) */
- FT_Bool reverseWinding; /* darken assuming */
- /* counterclockwise winding */
-
- CF2_BluesRec blues; /* computed zone data */
- };
-
-
- FT_LOCAL( FT_Error )
- cf2_getGlyphOutline( CF2_Font font,
- CF2_Buffer charstring,
- const CF2_Matrix* transform,
- CF2_F16Dot16* glyphWidth );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2FONT_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2ft.c b/src/3rdparty/freetype/src/cff/cf2ft.c
deleted file mode 100644
index d2544a2345..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2ft.c
+++ /dev/null
@@ -1,700 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2ft.c */
-/* */
-/* FreeType Glue Component to Adobe's Interpreter (body). */
-/* */
-/* Copyright 2013-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2font.h"
-#include "cf2error.h"
-
-
-#define CF2_MAX_SIZE cf2_intToFixed( 2000 ) /* max ppem */
-
-
- /*
- * This check should avoid most internal overflow cases. Clients should
- * generally respond to `Glyph_Too_Big' by getting a glyph outline
- * at EM size, scaling it and filling it as a graphics operation.
- *
- */
- static FT_Error
- cf2_checkTransform( const CF2_Matrix* transform,
- CF2_Int unitsPerEm )
- {
- CF2_Fixed maxScale;
-
-
- FT_ASSERT( unitsPerEm > 0 );
-
- if ( transform->a <= 0 || transform->d <= 0 )
- return FT_THROW( Invalid_Size_Handle );
-
- FT_ASSERT( transform->b == 0 && transform->c == 0 );
- FT_ASSERT( transform->tx == 0 && transform->ty == 0 );
-
- if ( unitsPerEm > 0x7FFF )
- return FT_THROW( Glyph_Too_Big );
-
- maxScale = FT_DivFix( CF2_MAX_SIZE, cf2_intToFixed( unitsPerEm ) );
-
- if ( transform->a > maxScale || transform->d > maxScale )
- return FT_THROW( Glyph_Too_Big );
-
- return FT_Err_Ok;
- }
-
-
- static void
- cf2_setGlyphWidth( CF2_Outline outline,
- CF2_Fixed width )
- {
- CFF_Decoder* decoder = outline->decoder;
-
-
- FT_ASSERT( decoder );
-
- decoder->glyph_width = cf2_fixedToInt( width );
- }
-
-
- /* Clean up font instance. */
- static void
- cf2_free_instance( void* ptr )
- {
- CF2_Font font = (CF2_Font)ptr;
-
-
- if ( font )
- {
- FT_Memory memory = font->memory;
-
-
- (void)memory;
- }
- }
-
-
- /********************************************/
- /* */
- /* functions for handling client outline; */
- /* FreeType uses coordinates in 26.6 format */
- /* */
- /********************************************/
-
- static void
- cf2_builder_moveTo( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params )
- {
- /* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
-
- (void)params; /* only used in debug mode */
-
-
- FT_ASSERT( outline && outline->decoder );
- FT_ASSERT( params->op == CF2_PathOpMoveTo );
-
- builder = &outline->decoder->builder;
-
- /* note: two successive moves simply close the contour twice */
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- }
-
-
- static void
- cf2_builder_lineTo( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params )
- {
- FT_Error error;
-
- /* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
-
-
- FT_ASSERT( outline && outline->decoder );
- FT_ASSERT( params->op == CF2_PathOpLineTo );
-
- builder = &outline->decoder->builder;
-
- if ( !builder->path_begun )
- {
- /* record the move before the line; also check points and set */
- /* `path_begun' */
- error = cff_builder_start_point( builder,
- params->pt0.x,
- params->pt0.y );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
- }
-
- /* `cff_builder_add_point1' includes a check_points call for one point */
- error = cff_builder_add_point1( builder,
- params->pt1.x,
- params->pt1.y );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
- }
-
-
- static void
- cf2_builder_cubeTo( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params )
- {
- FT_Error error;
-
- /* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
-
-
- FT_ASSERT( outline && outline->decoder );
- FT_ASSERT( params->op == CF2_PathOpCubeTo );
-
- builder = &outline->decoder->builder;
-
- if ( !builder->path_begun )
- {
- /* record the move before the line; also check points and set */
- /* `path_begun' */
- error = cff_builder_start_point( builder,
- params->pt0.x,
- params->pt0.y );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
- }
-
- /* prepare room for 3 points: 2 off-curve, 1 on-curve */
- error = cff_check_points( builder, 3 );
- if ( error )
- {
- if ( !*callbacks->error )
- *callbacks->error = error;
- return;
- }
-
- cff_builder_add_point( builder,
- params->pt1.x,
- params->pt1.y, 0 );
- cff_builder_add_point( builder,
- params->pt2.x,
- params->pt2.y, 0 );
- cff_builder_add_point( builder,
- params->pt3.x,
- params->pt3.y, 1 );
- }
-
-
- static void
- cf2_outline_init( CF2_Outline outline,
- FT_Memory memory,
- FT_Error* error )
- {
- FT_MEM_ZERO( outline, sizeof ( CF2_OutlineRec ) );
-
- outline->root.memory = memory;
- outline->root.error = error;
-
- outline->root.moveTo = cf2_builder_moveTo;
- outline->root.lineTo = cf2_builder_lineTo;
- outline->root.cubeTo = cf2_builder_cubeTo;
- }
-
-
- /* get scaling and hint flag from GlyphSlot */
- static void
- cf2_getScaleAndHintFlag( CFF_Decoder* decoder,
- CF2_Fixed* x_scale,
- CF2_Fixed* y_scale,
- FT_Bool* hinted,
- FT_Bool* scaled )
- {
- FT_ASSERT( decoder && decoder->builder.glyph );
-
- /* note: FreeType scale includes a factor of 64 */
- *hinted = decoder->builder.glyph->hint;
- *scaled = decoder->builder.glyph->scaled;
-
- if ( *hinted )
- {
- *x_scale = ( decoder->builder.glyph->x_scale + 32 ) / 64;
- *y_scale = ( decoder->builder.glyph->y_scale + 32 ) / 64;
- }
- else
- {
- /* for unhinted outlines, `cff_slot_load' does the scaling, */
- /* thus render at `unity' scale */
-
- *x_scale = 0x0400; /* 1/64 as 16.16 */
- *y_scale = 0x0400;
- }
- }
-
-
- /* get units per em from `FT_Face' */
- /* TODO: should handle font matrix concatenation? */
- static FT_UShort
- cf2_getUnitsPerEm( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->builder.face );
- FT_ASSERT( decoder->builder.face->root.units_per_EM );
-
- return decoder->builder.face->root.units_per_EM;
- }
-
-
- /* Main entry point: Render one glyph. */
- FT_LOCAL_DEF( FT_Error )
- cf2_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len )
- {
- FT_Memory memory;
- FT_Error error = FT_Err_Ok;
- CF2_Font font;
-
-
- FT_ASSERT( decoder && decoder->cff );
-
- memory = decoder->builder.memory;
-
- /* CF2 data is saved here across glyphs */
- font = (CF2_Font)decoder->cff->cf2_instance.data;
-
- /* on first glyph, allocate instance structure */
- if ( decoder->cff->cf2_instance.data == NULL )
- {
- decoder->cff->cf2_instance.finalizer =
- (FT_Generic_Finalizer)cf2_free_instance;
-
- if ( FT_ALLOC( decoder->cff->cf2_instance.data,
- sizeof ( CF2_FontRec ) ) )
- return FT_THROW( Out_Of_Memory );
-
- font = (CF2_Font)decoder->cff->cf2_instance.data;
-
- font->memory = memory;
-
- /* initialize a client outline, to be shared by each glyph rendered */
- cf2_outline_init( &font->outline, font->memory, &font->error );
- }
-
- /* save decoder; it is a stack variable and will be different on each */
- /* call */
- font->decoder = decoder;
- font->outline.decoder = decoder;
-
- {
- /* build parameters for Adobe engine */
-
- CFF_Builder* builder = &decoder->builder;
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( builder->face );
-
- /* local error */
- FT_Error error2 = FT_Err_Ok;
- CF2_BufferRec buf;
- CF2_Matrix transform;
- CF2_F16Dot16 glyphWidth;
-
- FT_Bool hinted;
- FT_Bool scaled;
-
-
- /* FreeType has already looked up the GID; convert to */
- /* `RegionBuffer', assuming that the input has been validated */
- FT_ASSERT( charstring_base + charstring_len >= charstring_base );
-
- FT_ZERO( &buf );
- buf.start =
- buf.ptr = charstring_base;
- buf.end = charstring_base + charstring_len;
-
- FT_ZERO( &transform );
-
- cf2_getScaleAndHintFlag( decoder,
- &transform.a,
- &transform.d,
- &hinted,
- &scaled );
-
- font->renderingFlags = 0;
- if ( hinted )
- font->renderingFlags |= CF2_FlagsHinted;
- if ( scaled && !driver->no_stem_darkening )
- font->renderingFlags |= CF2_FlagsDarkened;
-
- font->darkenParams[0] = driver->darken_params[0];
- font->darkenParams[1] = driver->darken_params[1];
- font->darkenParams[2] = driver->darken_params[2];
- font->darkenParams[3] = driver->darken_params[3];
- font->darkenParams[4] = driver->darken_params[4];
- font->darkenParams[5] = driver->darken_params[5];
- font->darkenParams[6] = driver->darken_params[6];
- font->darkenParams[7] = driver->darken_params[7];
-
- /* now get an outline for this glyph; */
- /* also get units per em to validate scale */
- font->unitsPerEm = (CF2_Int)cf2_getUnitsPerEm( decoder );
-
- if ( scaled )
- {
- error2 = cf2_checkTransform( &transform, font->unitsPerEm );
- if ( error2 )
- return error2;
- }
-
- error2 = cf2_getGlyphOutline( font, &buf, &transform, &glyphWidth );
- if ( error2 )
- return FT_ERR( Invalid_File_Format );
-
- cf2_setGlyphWidth( &font->outline, glyphWidth );
-
- return FT_Err_Ok;
- }
- }
-
-
- /* get pointer to current FreeType subfont (based on current glyphID) */
- FT_LOCAL_DEF( CFF_SubFont )
- cf2_getSubfont( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return decoder->current_subfont;
- }
-
-
- /* get `y_ppem' from `CFF_Size' */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getPpemY( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder &&
- decoder->builder.face &&
- decoder->builder.face->root.size );
-
- /*
- * Note that `y_ppem' can be zero if there wasn't a call to
- * `FT_Set_Char_Size' or something similar. However, this isn't a
- * problem since we come to this place in the code only if
- * FT_LOAD_NO_SCALE is set (the other case gets caught by
- * `cf2_checkTransform'). The ppem value is needed to compute the stem
- * darkening, which is disabled for getting the unscaled outline.
- *
- */
- return cf2_intToFixed(
- decoder->builder.face->root.size->metrics.y_ppem );
- }
-
-
- /* get standard stem widths for the current subfont; */
- /* FreeType stores these as integer font units */
- /* (note: variable names seem swapped) */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getStdVW( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.standard_height );
- }
-
-
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getStdHW( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.standard_width );
- }
-
-
- /* note: FreeType stores 1000 times the actual value for `BlueScale' */
- FT_LOCAL_DEF( void )
- cf2_getBlueMetrics( CFF_Decoder* decoder,
- CF2_Fixed* blueScale,
- CF2_Fixed* blueShift,
- CF2_Fixed* blueFuzz )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *blueScale = FT_DivFix(
- decoder->current_subfont->private_dict.blue_scale,
- cf2_intToFixed( 1000 ) );
- *blueShift = cf2_intToFixed(
- decoder->current_subfont->private_dict.blue_shift );
- *blueFuzz = cf2_intToFixed(
- decoder->current_subfont->private_dict.blue_fuzz );
- }
-
-
- /* get blue values counts and arrays; the FreeType parser has validated */
- /* the counts and verified that each is an even number */
- FT_LOCAL_DEF( void )
- cf2_getBlueValues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_blue_values;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.blue_values;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_getOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_other_blues;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.other_blues;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_getFamilyBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_family_blues;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.family_blues;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_getFamilyOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- *count = decoder->current_subfont->private_dict.num_family_other_blues;
- *data = (FT_Pos*)
- &decoder->current_subfont->private_dict.family_other_blues;
- }
-
-
- FT_LOCAL_DEF( CF2_Int )
- cf2_getLanguageGroup( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return decoder->current_subfont->private_dict.language_group;
- }
-
-
- /* convert unbiased subroutine index to `CF2_Buffer' and */
- /* return 0 on success */
- FT_LOCAL_DEF( CF2_Int )
- cf2_initGlobalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf )
- {
- FT_ASSERT( decoder );
-
- FT_ZERO( buf );
-
- idx += (CF2_UInt)decoder->globals_bias;
- if ( idx >= decoder->num_globals )
- return TRUE; /* error */
-
- FT_ASSERT( decoder->globals );
-
- buf->start =
- buf->ptr = decoder->globals[idx];
- buf->end = decoder->globals[idx + 1];
-
- return FALSE; /* success */
- }
-
-
- /* convert AdobeStandardEncoding code to CF2_Buffer; */
- /* used for seac component */
- FT_LOCAL_DEF( FT_Error )
- cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_Int code,
- CF2_Buffer buf )
- {
- CF2_Int gid;
- FT_Byte* charstring;
- FT_ULong len;
- FT_Error error;
-
-
- FT_ASSERT( decoder );
-
- FT_ZERO( buf );
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* Incremental fonts don't necessarily have valid charsets. */
- /* They use the character code, not the glyph index, in this case. */
- if ( decoder->builder.face->root.internal->incremental_interface )
- gid = code;
- else
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- {
- gid = cff_lookup_glyph_by_stdcharcode( decoder->cff, code );
- if ( gid < 0 )
- return FT_THROW( Invalid_Glyph_Format );
- }
-
- error = cff_get_glyph_data( decoder->builder.face,
- (CF2_UInt)gid,
- &charstring,
- &len );
- /* TODO: for now, just pass the FreeType error through */
- if ( error )
- return error;
-
- /* assume input has been validated */
- FT_ASSERT( charstring + len >= charstring );
-
- buf->start = charstring;
- buf->end = charstring + len;
- buf->ptr = buf->start;
-
- return FT_Err_Ok;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_freeSeacComponent( CFF_Decoder* decoder,
- CF2_Buffer buf )
- {
- FT_ASSERT( decoder );
-
- cff_free_glyph_data( decoder->builder.face,
- (FT_Byte**)&buf->start,
- (FT_ULong)( buf->end - buf->start ) );
- }
-
-
- FT_LOCAL_DEF( CF2_Int )
- cf2_initLocalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf )
- {
- FT_ASSERT( decoder );
-
- FT_ZERO( buf );
-
- idx += (CF2_UInt)decoder->locals_bias;
- if ( idx >= decoder->num_locals )
- return TRUE; /* error */
-
- FT_ASSERT( decoder->locals );
-
- buf->start =
- buf->ptr = decoder->locals[idx];
- buf->end = decoder->locals[idx + 1];
-
- return FALSE; /* success */
- }
-
-
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getDefaultWidthX( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.default_width );
- }
-
-
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_getNominalWidthX( CFF_Decoder* decoder )
- {
- FT_ASSERT( decoder && decoder->current_subfont );
-
- return cf2_intToFixed(
- decoder->current_subfont->private_dict.nominal_width );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_outline_reset( CF2_Outline outline )
- {
- CFF_Decoder* decoder = outline->decoder;
-
-
- FT_ASSERT( decoder );
-
- outline->root.windingMomentum = 0;
-
- FT_GlyphLoader_Rewind( decoder->builder.loader );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_outline_close( CF2_Outline outline )
- {
- CFF_Decoder* decoder = outline->decoder;
-
-
- FT_ASSERT( decoder );
-
- cff_builder_close_contour( &decoder->builder );
-
- FT_GlyphLoader_Add( decoder->builder.loader );
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2ft.h b/src/3rdparty/freetype/src/cff/cf2ft.h
deleted file mode 100644
index 3073df382f..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2ft.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2ft.h */
-/* */
-/* FreeType Glue Component to Adobe's Interpreter (specification). */
-/* */
-/* Copyright 2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2FT_H__
-#define __CF2FT_H__
-
-
-#include "cf2types.h"
-
-
- /* TODO: disable asserts for now */
-#define CF2_NDEBUG
-
-
-#include FT_SYSTEM_H
-
-#include "cf2glue.h"
-#include "cffgload.h" /* for CFF_Decoder */
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- cf2_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len );
-
- FT_LOCAL( CFF_SubFont )
- cf2_getSubfont( CFF_Decoder* decoder );
-
-
- FT_LOCAL( CF2_Fixed )
- cf2_getPpemY( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getStdVW( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getStdHW( CFF_Decoder* decoder );
-
- FT_LOCAL( void )
- cf2_getBlueMetrics( CFF_Decoder* decoder,
- CF2_Fixed* blueScale,
- CF2_Fixed* blueShift,
- CF2_Fixed* blueFuzz );
- FT_LOCAL( void )
- cf2_getBlueValues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getFamilyBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getFamilyOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
-
- FT_LOCAL( CF2_Int )
- cf2_getLanguageGroup( CFF_Decoder* decoder );
-
- FT_LOCAL( CF2_Int )
- cf2_initGlobalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf );
- FT_LOCAL( FT_Error )
- cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_Int code,
- CF2_Buffer buf );
- FT_LOCAL( void )
- cf2_freeSeacComponent( CFF_Decoder* decoder,
- CF2_Buffer buf );
- FT_LOCAL( CF2_Int )
- cf2_initLocalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf );
-
- FT_LOCAL( CF2_Fixed )
- cf2_getDefaultWidthX( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getNominalWidthX( CFF_Decoder* decoder );
-
-
- /*
- * FreeType client outline
- *
- * process output from the charstring interpreter
- */
- typedef struct CF2_OutlineRec_
- {
- CF2_OutlineCallbacksRec root; /* base class must be first */
- CFF_Decoder* decoder;
-
- } CF2_OutlineRec, *CF2_Outline;
-
-
- FT_LOCAL( void )
- cf2_outline_reset( CF2_Outline outline );
- FT_LOCAL( void )
- cf2_outline_close( CF2_Outline outline );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2FT_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2glue.h b/src/3rdparty/freetype/src/cff/cf2glue.h
deleted file mode 100644
index a24da39e93..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2glue.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2glue.h */
-/* */
-/* Adobe's code for shared stuff (specification only). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2GLUE_H__
-#define __CF2GLUE_H__
-
-
-/* common includes for other modules */
-#include "cf2error.h"
-#include "cf2fixed.h"
-#include "cf2arrst.h"
-#include "cf2read.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* rendering parameters */
-
- /* apply hints to rendered glyphs */
-#define CF2_FlagsHinted 1
- /* for testing */
-#define CF2_FlagsDarkened 2
-
- /* type for holding the flags */
- typedef CF2_Int CF2_RenderingFlags;
-
-
- /* elements of a glyph outline */
- typedef enum CF2_PathOp_
- {
- CF2_PathOpMoveTo = 1, /* change the current point */
- CF2_PathOpLineTo = 2, /* line */
- CF2_PathOpQuadTo = 3, /* quadratic curve */
- CF2_PathOpCubeTo = 4 /* cubic curve */
-
- } CF2_PathOp;
-
-
- /* a matrix of fixed point values */
- typedef struct CF2_Matrix_
- {
- CF2_F16Dot16 a;
- CF2_F16Dot16 b;
- CF2_F16Dot16 c;
- CF2_F16Dot16 d;
- CF2_F16Dot16 tx;
- CF2_F16Dot16 ty;
-
- } CF2_Matrix;
-
-
- /* these typedefs are needed by more than one header file */
- /* and gcc compiler doesn't allow redefinition */
- typedef struct CF2_FontRec_ CF2_FontRec, *CF2_Font;
- typedef struct CF2_HintRec_ CF2_HintRec, *CF2_Hint;
-
-
- /* A common structure for all callback parameters. */
- /* */
- /* Some members may be unused. For example, `pt0' is not used for */
- /* `moveTo' and `pt3' is not used for `quadTo'. The initial point `pt0' */
- /* is included for each path element for generality; curve conversions */
- /* need it. The `op' parameter allows one function to handle multiple */
- /* element types. */
-
- typedef struct CF2_CallbackParamsRec_
- {
- FT_Vector pt0;
- FT_Vector pt1;
- FT_Vector pt2;
- FT_Vector pt3;
-
- CF2_Int op;
-
- } CF2_CallbackParamsRec, *CF2_CallbackParams;
-
-
- /* forward reference */
- typedef struct CF2_OutlineCallbacksRec_ CF2_OutlineCallbacksRec,
- *CF2_OutlineCallbacks;
-
- /* callback function pointers */
- typedef void
- (*CF2_Callback_Type)( CF2_OutlineCallbacks callbacks,
- const CF2_CallbackParams params );
-
-
- struct CF2_OutlineCallbacksRec_
- {
- CF2_Callback_Type moveTo;
- CF2_Callback_Type lineTo;
- CF2_Callback_Type quadTo;
- CF2_Callback_Type cubeTo;
-
- CF2_Int windingMomentum; /* for winding order detection */
-
- FT_Memory memory;
- FT_Error* error;
- };
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2GLUE_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2hints.c b/src/3rdparty/freetype/src/cff/cf2hints.c
deleted file mode 100644
index 0e27000210..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2hints.c
+++ /dev/null
@@ -1,1847 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2hints.c */
-/* */
-/* Adobe's code for handling CFF hints (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2hints.h"
-#include "cf2intrp.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2hints
-
-
- typedef struct CF2_HintMoveRec_
- {
- size_t j; /* index of upper hint map edge */
- CF2_Fixed moveUp; /* adjustment to optimum position */
-
- } CF2_HintMoveRec, *CF2_HintMove;
-
-
- /* Compute angular momentum for winding order detection. It is called */
- /* for all lines and curves, but not necessarily in element order. */
- static CF2_Int
- cf2_getWindingMomentum( CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2 )
- {
- /* cross product of pt1 position from origin with pt2 position from */
- /* pt1; we reduce the precision so that the result fits into 32 bits */
-
- return ( x1 >> 16 ) * ( ( y2 - y1 ) >> 16 ) -
- ( y1 >> 16 ) * ( ( 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 = 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 += 2 * font->darkenY;
-
- hint->csCoord += hintOrigin;
- hint->scale = scale;
- hint->index = indexStemHint; /* index in original stem hint array */
-
- /* if original stem hint has been used, use the same position */
- if ( hint->flags != 0 && stemHint->used )
- {
- if ( cf2_hint_isTop( hint ) )
- hint->dsCoord = stemHint->maxDS;
- else
- hint->dsCoord = stemHint->minDS;
-
- cf2_hint_lock( hint );
- }
- else
- hint->dsCoord = FT_MulFix( hint->csCoord, scale );
- }
-
-
- /* initialize an invalid hint map element */
- static void
- cf2_hint_initZero( CF2_Hint hint )
- {
- FT_ZERO( hint );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hint_isValid( const CF2_Hint hint )
- {
- return (FT_Bool)( hint->flags != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isPair( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairBottom | CF2_PairTop ) ) != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isPairTop( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags & CF2_PairTop ) != 0 );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hint_isTop( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairTop | CF2_GhostTop ) ) != 0 );
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hint_isBottom( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags &
- ( CF2_PairBottom | CF2_GhostBottom ) ) != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isLocked( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags & CF2_Locked ) != 0 );
- }
-
-
- static FT_Bool
- cf2_hint_isSynthetic( const CF2_Hint hint )
- {
- return (FT_Bool)( ( hint->flags & CF2_Synthetic ) != 0 );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hint_lock( CF2_Hint hint )
- {
- hint->flags |= CF2_Locked;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmap_init( CF2_HintMap hintmap,
- CF2_Font font,
- CF2_HintMap initialMap,
- CF2_ArrStack hintMoves,
- CF2_Fixed scale )
- {
- FT_ZERO( hintmap );
-
- /* copy parameters from font instance */
- hintmap->hinted = font->hinted;
- hintmap->scale = scale;
- hintmap->font = font;
- hintmap->initialHintMap = initialMap;
- /* will clear in `cf2_hintmap_adjustHints' */
- hintmap->hintMoves = hintMoves;
- }
-
-
- static FT_Bool
- cf2_hintmap_isValid( const CF2_HintMap hintmap )
- {
- return hintmap->isValid;
- }
-
-
- /* transform character space coordinate to device space using hint map */
- static CF2_Fixed
- cf2_hintmap_map( CF2_HintMap hintmap,
- CF2_Fixed csCoord )
- {
- if ( hintmap->count == 0 || ! hintmap->hinted )
- {
- /* there are no hints; use uniform scale and zero offset */
- return FT_MulFix( csCoord, hintmap->scale );
- }
- else
- {
- /* start linear search from last hit */
- CF2_UInt i = hintmap->lastIndex;
-
- FT_ASSERT( hintmap->lastIndex < CF2_MAX_HINT_EDGES );
-
- /* search up */
- while ( i < hintmap->count - 1 &&
- csCoord >= hintmap->edge[i + 1].csCoord )
- i += 1;
-
- /* search down */
- while ( i > 0 && csCoord < hintmap->edge[i].csCoord )
- i -= 1;
-
- hintmap->lastIndex = i;
-
- if ( i == 0 && csCoord < hintmap->edge[0].csCoord )
- {
- /* special case for points below first edge: use uniform scale */
- return FT_MulFix( 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 FT_MulFix( csCoord - hintmap->edge[i].csCoord,
- hintmap->edge[i].scale ) +
- hintmap->edge[i].dsCoord;
- }
- }
- }
-
-
- /*
- * This hinting policy moves a hint pair in device space so that one of
- * its two edges is on a device pixel boundary (its fractional part is
- * zero). `cf2_hintmap_insertHint' guarantees no overlap in CS
- * space. Ensure here that there is no overlap in DS.
- *
- * In the first pass, edges are adjusted relative to adjacent hints.
- * Those that are below have already been adjusted. Those that are
- * above have not yet been adjusted. If a hint above blocks an
- * adjustment to an optimal position, we will try again in a second
- * pass. The second pass is top-down.
- *
- */
-
- static void
- cf2_hintmap_adjustHints( CF2_HintMap hintmap )
- {
- size_t i, j;
-
-
- cf2_arrstack_clear( hintmap->hintMoves ); /* working storage */
-
- /*
- * First pass is bottom-up (font hint order) without look-ahead.
- * Locked edges are already adjusted.
- * Unlocked edges begin with dsCoord from `initialHintMap'.
- * Save edges that are not optimally adjusted in `hintMoves' array,
- * and process them in second pass.
- */
-
- for ( i = 0; i < hintmap->count; i++ )
- {
- FT_Bool isPair = cf2_hint_isPair( &hintmap->edge[i] );
-
-
- /* index of upper edge (same value for ghost hint) */
- j = isPair ? i + 1 : i;
-
- FT_ASSERT( j < hintmap->count );
- FT_ASSERT( cf2_hint_isValid( &hintmap->edge[i] ) );
- FT_ASSERT( cf2_hint_isValid( &hintmap->edge[j] ) );
- FT_ASSERT( cf2_hint_isLocked( &hintmap->edge[i] ) ==
- cf2_hint_isLocked( &hintmap->edge[j] ) );
-
- if ( !cf2_hint_isLocked( &hintmap->edge[i] ) )
- {
- /* hint edge is not locked, we can adjust it */
- CF2_Fixed fracDown = cf2_fixedFraction( hintmap->edge[i].dsCoord );
- CF2_Fixed fracUp = cf2_fixedFraction( hintmap->edge[j].dsCoord );
-
- /* calculate all four possibilities; moves down are negative */
- CF2_Fixed downMoveDown = 0 - fracDown;
- CF2_Fixed upMoveDown = 0 - fracUp;
- CF2_Fixed downMoveUp = fracDown == 0
- ? 0
- : cf2_intToFixed( 1 ) - fracDown;
- CF2_Fixed upMoveUp = fracUp == 0
- ? 0
- : cf2_intToFixed( 1 ) - fracUp;
-
- /* smallest move up */
- CF2_Fixed moveUp = FT_MIN( downMoveUp, upMoveUp );
- /* smallest move down */
- CF2_Fixed moveDown = FT_MAX( downMoveDown, upMoveDown );
-
- /* final amount to move edge or edge pair */
- CF2_Fixed move;
-
- CF2_Fixed downMinCounter = CF2_MIN_COUNTER;
- CF2_Fixed upMinCounter = CF2_MIN_COUNTER;
- FT_Bool saveEdge = FALSE;
-
-
- /* minimum counter constraint doesn't apply when adjacent edges */
- /* are synthetic */
- /* TODO: doesn't seem a big effect; for now, reduce the code */
-#if 0
- if ( i == 0 ||
- cf2_hint_isSynthetic( &hintmap->edge[i - 1] ) )
- downMinCounter = 0;
-
- if ( j >= hintmap->count - 1 ||
- cf2_hint_isSynthetic( &hintmap->edge[j + 1] ) )
- upMinCounter = 0;
-#endif
-
- /* is there room to move up? */
- /* there is if we are at top of array or the next edge is at or */
- /* beyond proposed move up? */
- if ( j >= hintmap->count - 1 ||
- hintmap->edge[j + 1].dsCoord >=
- hintmap->edge[j].dsCoord + moveUp + upMinCounter )
- {
- /* there is room to move up; is there also room to move down? */
- if ( i == 0 ||
- hintmap->edge[i - 1].dsCoord <=
- hintmap->edge[i].dsCoord + moveDown - downMinCounter )
- {
- /* move smaller absolute amount */
- move = ( -moveDown < moveUp ) ? moveDown : moveUp; /* optimum */
- }
- else
- move = moveUp;
- }
- else
- {
- /* is there room to move down? */
- if ( i == 0 ||
- hintmap->edge[i - 1].dsCoord <=
- hintmap->edge[i].dsCoord + moveDown - downMinCounter )
- {
- move = moveDown;
- /* true if non-optimum move */
- saveEdge = (FT_Bool)( moveUp < -moveDown );
- }
- else
- {
- /* no room to move either way without overlapping or reducing */
- /* the counter too much */
- move = 0;
- saveEdge = TRUE;
- }
- }
-
- /* Identify non-moves and moves down that aren't optimal, and save */
- /* them for second pass. */
- /* Do this only if there is an unlocked edge above (which could */
- /* possibly move). */
- if ( saveEdge &&
- j < hintmap->count - 1 &&
- !cf2_hint_isLocked( &hintmap->edge[j + 1] ) )
- {
- CF2_HintMoveRec savedMove;
-
-
- savedMove.j = j;
- /* desired adjustment in second pass */
- savedMove.moveUp = moveUp - move;
-
- cf2_arrstack_push( hintmap->hintMoves, &savedMove );
- }
-
- /* move the edge(s) */
- hintmap->edge[i].dsCoord += move;
- if ( isPair )
- hintmap->edge[j].dsCoord += move;
- }
-
- /* assert there are no overlaps in device space */
- FT_ASSERT( i == 0 ||
- hintmap->edge[i - 1].dsCoord <= hintmap->edge[i].dsCoord );
- FT_ASSERT( i < j ||
- hintmap->edge[i].dsCoord <= hintmap->edge[j].dsCoord );
-
- /* adjust the scales, avoiding divide by zero */
- if ( i > 0 )
- {
- if ( hintmap->edge[i].csCoord != hintmap->edge[i - 1].csCoord )
- hintmap->edge[i - 1].scale =
- FT_DivFix(
- hintmap->edge[i].dsCoord - hintmap->edge[i - 1].dsCoord,
- 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(
- hintmap->edge[j].dsCoord - hintmap->edge[j - 1].dsCoord,
- 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 >=
- hintmap->edge[j].dsCoord + hintMove->moveUp + CF2_MIN_COUNTER )
- {
- /* there is more room now, move edge up */
- hintmap->edge[j].dsCoord += hintMove->moveUp;
-
- if ( cf2_hint_isPair( &hintmap->edge[j] ) )
- {
- FT_ASSERT( j > 0 );
- 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 */
- FT_ASSERT( !isPair ||
- topHintEdge->csCoord >= bottomHintEdge->csCoord );
-
- /* linear search to find index value of insertion point */
- indexInsert = 0;
- for ( ; indexInsert < hintmap->count; indexInsert++ )
- {
- if ( hintmap->edge[indexInsert].csCoord >= firstHintEdge->csCoord )
- break;
- }
-
- /*
- * Discard any hints that overlap in character space. Most often, this
- * is while building the initial map, where captured hints from all
- * zones are combined. Define overlap to include hints that `touch'
- * (overlap zero). Hiragino Sans/Gothic fonts have numerous hints that
- * touch. Some fonts have non-ideographic glyphs that overlap our
- * synthetic hints.
- *
- * Overlap also occurs when darkening stem hints that are close.
- *
- */
- if ( indexInsert < hintmap->count )
- {
- /* we are inserting before an existing edge: */
- /* verify that an existing edge is not the same */
- if ( hintmap->edge[indexInsert].csCoord == firstHintEdge->csCoord )
- return; /* ignore overlapping stem hint */
-
- /* verify that a new pair does not straddle the next edge */
- if ( isPair &&
- hintmap->edge[indexInsert].csCoord <= secondHintEdge->csCoord )
- return; /* ignore overlapping stem hint */
-
- /* verify that we are not inserting between paired edges */
- if ( cf2_hint_isPairTop( &hintmap->edge[indexInsert] ) )
- return; /* ignore overlapping stem hint */
- }
-
- /* recompute device space locations using initial hint map */
- if ( cf2_hintmap_isValid( hintmap->initialHintMap ) &&
- !cf2_hint_isLocked( firstHintEdge ) )
- {
- if ( isPair )
- {
- /* Use hint map to position the center of stem, and nominal scale */
- /* to position the two edges. This preserves the stem width. */
- CF2_Fixed midpoint = cf2_hintmap_map(
- hintmap->initialHintMap,
- ( secondHintEdge->csCoord +
- firstHintEdge->csCoord ) / 2 );
- CF2_Fixed halfWidth = FT_MulFix(
- ( secondHintEdge->csCoord -
- firstHintEdge->csCoord ) / 2,
- hintmap->scale );
-
-
- firstHintEdge->dsCoord = midpoint - halfWidth;
- secondHintEdge->dsCoord = midpoint + halfWidth;
- }
- else
- firstHintEdge->dsCoord = cf2_hintmap_map( hintmap->initialHintMap,
- firstHintEdge->csCoord );
- }
-
- /*
- * Discard any hints that overlap in device space; this can occur
- * because locked hints have been moved to align with blue zones.
- *
- * TODO: Although we might correct this later during adjustment, we
- * don't currently have a way to delete a conflicting hint once it has
- * been inserted. See v2.030 MinionPro-Regular, 12 ppem darkened,
- * initial hint map for second path, glyph 945 (the perispomeni (tilde)
- * in U+1F6E, Greek omega with psili and perispomeni). Darkening is
- * 25. Pair 667,747 initially conflicts in design space with top edge
- * 660. This is because 667 maps to 7.87, and the top edge was
- * captured by a zone at 8.0. The pair is later successfully inserted
- * in a zone without the top edge. In this zone it is adjusted to 8.0,
- * and no longer conflicts with the top edge in design space. This
- * means it can be included in yet a later zone which does have the top
- * edge hint. This produces a small mismatch between the first and
- * last points of this path, even though the hint masks are the same.
- * The density map difference is tiny (1/256).
- *
- */
-
- if ( indexInsert > 0 )
- {
- /* we are inserting after an existing edge */
- if ( firstHintEdge->dsCoord < hintmap->edge[indexInsert - 1].dsCoord )
- return;
- }
-
- if ( indexInsert < hintmap->count )
- {
- /* we are inserting before an existing edge */
- if ( isPair )
- {
- if ( secondHintEdge->dsCoord > hintmap->edge[indexInsert].dsCoord )
- return;
- }
- else
- {
- if ( firstHintEdge->dsCoord > hintmap->edge[indexInsert].dsCoord )
- return;
- }
- }
-
- /* make room to insert */
- {
- CF2_UInt iSrc = hintmap->count - 1;
- CF2_UInt iDst = isPair ? hintmap->count + 1 : hintmap->count;
-
- CF2_UInt count = hintmap->count - indexInsert;
-
-
- if ( iDst >= CF2_MAX_HINT_EDGES )
- {
- FT_TRACE4(( "cf2_hintmap_insertHint: too many hintmaps\n" ));
- return;
- }
-
- while ( count-- )
- hintmap->edge[iDst--] = hintmap->edge[iSrc--];
-
- /* insert first edge */
- hintmap->edge[indexInsert] = *firstHintEdge; /* copy struct */
- hintmap->count += 1;
-
- if ( isPair )
- {
- /* insert second edge */
- hintmap->edge[indexInsert + 1] = *secondHintEdge; /* copy struct */
- hintmap->count += 1;
- }
- }
-
- return;
- }
-
-
- /*
- * Build a map from hints and mask.
- *
- * This function may recur one level if `hintmap->initialHintMap' is not yet
- * valid.
- * If `initialMap' is true, simply build initial map.
- *
- * Synthetic hints are used in two ways. A hint at zero is inserted, if
- * needed, in the initial hint map, to prevent translations from
- * propagating across the origin. If synthetic em box hints are enabled
- * for ideographic dictionaries, then they are inserted in all hint
- * maps, including the initial one.
- *
- */
- FT_LOCAL_DEF( void )
- cf2_hintmap_build( CF2_HintMap hintmap,
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOrigin,
- FT_Bool initialMap )
- {
- FT_Byte* maskPtr;
-
- CF2_Font font = hintmap->font;
- CF2_HintMaskRec tempHintMask;
-
- size_t bitCount, i;
- FT_Byte maskByte;
-
-
- /* check whether initial map is constructed */
- if ( !initialMap && !cf2_hintmap_isValid( hintmap->initialHintMap ) )
- {
- /* make recursive call with initialHintMap and temporary mask; */
- /* temporary mask will get all bits set, below */
- cf2_hintmask_init( &tempHintMask, hintMask->error );
- cf2_hintmap_build( hintmap->initialHintMap,
- hStemHintArray,
- vStemHintArray,
- &tempHintMask,
- hintOrigin,
- TRUE );
- }
-
- if ( !cf2_hintmask_isValid( hintMask ) )
- {
- /* without a hint mask, assume all hints are active */
- cf2_hintmask_setAll( hintMask,
- cf2_arrstack_size( hStemHintArray ) +
- cf2_arrstack_size( vStemHintArray ) );
- if ( !cf2_hintmask_isValid( hintMask ) )
- return; /* too many stem hints */
- }
-
- /* begin by clearing the map */
- hintmap->count = 0;
- hintmap->lastIndex = 0;
-
- /* make a copy of the hint mask so we can modify it */
- tempHintMask = *hintMask;
- maskPtr = cf2_hintmask_getMaskPtr( &tempHintMask );
-
- /* use the hStem hints only, which are first in the mask */
- bitCount = cf2_arrstack_size( hStemHintArray );
-
- /* Defense-in-depth. Should never return here. */
- if ( bitCount > hintMask->bitCount )
- return;
-
- /* synthetic embox hints get highest priority */
- if ( font->blues.doEmBoxHints )
- {
- CF2_HintRec dummy;
-
-
- cf2_hint_initZero( &dummy ); /* invalid hint map element */
-
- /* ghost bottom */
- cf2_hintmap_insertHint( hintmap,
- &font->blues.emBoxBottomEdge,
- &dummy );
- /* ghost top */
- cf2_hintmap_insertHint( hintmap,
- &dummy,
- &font->blues.emBoxTopEdge );
- }
-
- /* insert hints captured by a blue zone or already locked (higher */
- /* priority) */
- for ( i = 0, maskByte = 0x80; i < bitCount; i++ )
- {
- if ( maskByte & *maskPtr )
- {
- /* expand StemHint into two `CF2_Hint' elements */
- CF2_HintRec bottomHintEdge, topHintEdge;
-
-
- cf2_hint_init( &bottomHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- TRUE /* bottom */ );
- cf2_hint_init( &topHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- FALSE /* top */ );
-
- if ( cf2_hint_isLocked( &bottomHintEdge ) ||
- cf2_hint_isLocked( &topHintEdge ) ||
- cf2_blues_capture( &font->blues,
- &bottomHintEdge,
- &topHintEdge ) )
- {
- /* insert captured hint into map */
- cf2_hintmap_insertHint( hintmap, &bottomHintEdge, &topHintEdge );
-
- *maskPtr &= ~maskByte; /* turn off the bit for this hint */
- }
- }
-
- if ( ( i & 7 ) == 7 )
- {
- /* move to next mask byte */
- maskPtr++;
- maskByte = 0x80;
- }
- else
- maskByte >>= 1;
- }
-
- /* initial hint map includes only captured hints plus maybe one at 0 */
-
- /*
- * TODO: There is a problem here because we are trying to build a
- * single hint map containing all captured hints. It is
- * possible for there to be conflicts between captured hints,
- * either because of darkening or because the hints are in
- * separate hint zones (we are ignoring hint zones for the
- * initial map). An example of the latter is MinionPro-Regular
- * v2.030 glyph 883 (Greek Capital Alpha with Psili) at 15ppem.
- * A stem hint for the psili conflicts with the top edge hint
- * for the base character. The stem hint gets priority because
- * of its sort order. In glyph 884 (Greek Capital Alpha with
- * Psili and Oxia), the top of the base character gets a stem
- * hint, and the psili does not. This creates different initial
- * maps for the two glyphs resulting in different renderings of
- * the base character. Will probably defer this either as not
- * worth the cost or as a font bug. I don't think there is any
- * good reason for an accent to be captured by an alignment
- * zone. -darnold 2/12/10
- */
-
- if ( initialMap )
- {
- /* Apply a heuristic that inserts a point for (0,0), unless it's */
- /* already covered by a mapping. This locks the baseline for glyphs */
- /* that have no baseline hints. */
-
- if ( hintmap->count == 0 ||
- hintmap->edge[0].csCoord > 0 ||
- hintmap->edge[hintmap->count - 1].csCoord < 0 )
- {
- /* all edges are above 0 or all edges are below 0; */
- /* construct a locked edge hint at 0 */
-
- CF2_HintRec edge, invalid;
-
-
- cf2_hint_initZero( &edge );
-
- edge.flags = CF2_GhostBottom |
- CF2_Locked |
- CF2_Synthetic;
- edge.scale = hintmap->scale;
-
- cf2_hint_initZero( &invalid );
- cf2_hintmap_insertHint( hintmap, &edge, &invalid );
- }
- }
- else
- {
- /* insert remaining hints */
-
- maskPtr = cf2_hintmask_getMaskPtr( &tempHintMask );
-
- for ( i = 0, maskByte = 0x80; i < bitCount; i++ )
- {
- if ( maskByte & *maskPtr )
- {
- CF2_HintRec bottomHintEdge, topHintEdge;
-
-
- cf2_hint_init( &bottomHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- TRUE /* bottom */ );
- cf2_hint_init( &topHintEdge,
- hStemHintArray,
- i,
- font,
- hintOrigin,
- hintmap->scale,
- FALSE /* top */ );
-
- cf2_hintmap_insertHint( hintmap, &bottomHintEdge, &topHintEdge );
- }
-
- if ( ( i & 7 ) == 7 )
- {
- /* move to next mask byte */
- maskPtr++;
- maskByte = 0x80;
- }
- else
- maskByte >>= 1;
- }
- }
-
- /*
- * Note: The following line is a convenient place to break when
- * debugging hinting. Examine `hintmap->edge' for the list of
- * enabled hints, then step over the call to see the effect of
- * adjustment. We stop here first on the recursive call that
- * creates the initial map, and then on each counter group and
- * hint zone.
- */
-
- /* adjust positions of hint edges that are not locked to blue zones */
- cf2_hintmap_adjustHints( hintmap );
-
- /* save the position of all hints that were used in this hint map; */
- /* if we use them again, we'll locate them in the same position */
- if ( !initialMap )
- {
- for ( i = 0; i < hintmap->count; i++ )
- {
- if ( !cf2_hint_isSynthetic( &hintmap->edge[i] ) )
- {
- /* Note: include both valid and invalid edges */
- /* Note: top and bottom edges are copied back separately */
- CF2_StemHint stemhint = (CF2_StemHint)
- cf2_arrstack_getPointer( hStemHintArray,
- hintmap->edge[i].index );
-
-
- if ( cf2_hint_isTop( &hintmap->edge[i] ) )
- stemhint->maxDS = hintmap->edge[i].dsCoord;
- else
- stemhint->minDS = hintmap->edge[i].dsCoord;
-
- stemhint->used = TRUE;
- }
- }
- }
-
- /* hint map is ready to use */
- hintmap->isValid = TRUE;
-
- /* remember this mask has been used */
- cf2_hintmask_setNew( hintMask, FALSE );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_init( CF2_GlyphPath glyphpath,
- CF2_Font font,
- CF2_OutlineCallbacks callbacks,
- CF2_Fixed scaleY,
- /* CF2_Fixed hShift, */
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOriginY,
- const CF2_Blues blues,
- const FT_Vector* fractionalTranslation )
- {
- FT_ZERO( glyphpath );
-
- glyphpath->font = font;
- glyphpath->callbacks = callbacks;
-
- cf2_arrstack_init( &glyphpath->hintMoves,
- font->memory,
- &font->error,
- sizeof ( CF2_HintMoveRec ) );
-
- cf2_hintmap_init( &glyphpath->initialHintMap,
- font,
- &glyphpath->initialHintMap,
- &glyphpath->hintMoves,
- scaleY );
- cf2_hintmap_init( &glyphpath->firstHintMap,
- font,
- &glyphpath->initialHintMap,
- &glyphpath->hintMoves,
- scaleY );
- cf2_hintmap_init( &glyphpath->hintMap,
- font,
- &glyphpath->initialHintMap,
- &glyphpath->hintMoves,
- scaleY );
-
- glyphpath->scaleX = font->innerTransform.a;
- glyphpath->scaleC = font->innerTransform.c;
- glyphpath->scaleY = font->innerTransform.d;
-
- glyphpath->fractionalTranslation = *fractionalTranslation;
-
-#if 0
- glyphpath->hShift = hShift; /* for fauxing */
-#endif
-
- glyphpath->hStemHintArray = hStemHintArray;
- glyphpath->vStemHintArray = vStemHintArray;
- glyphpath->hintMask = hintMask; /* ptr to current mask */
- glyphpath->hintOriginY = hintOriginY;
- glyphpath->blues = blues;
- glyphpath->darken = font->darkened; /* TODO: should we make copies? */
- glyphpath->xOffset = font->darkenX;
- glyphpath->yOffset = font->darkenY;
- glyphpath->miterLimit = 2 * FT_MAX(
- cf2_fixedAbs( glyphpath->xOffset ),
- cf2_fixedAbs( glyphpath->yOffset ) );
-
- /* .1 character space unit */
- glyphpath->snapThreshold = cf2_floatToFixed( 0.1f );
-
- 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 = FT_MulFix( glyphpath->scaleX, x ) +
- FT_MulFix( glyphpath->scaleC, y );
- pt.y = cf2_hintmap_map( hintmap, y );
-
- ppt->x = FT_MulFix( glyphpath->font->outerTransform.a, pt.x ) +
- FT_MulFix( glyphpath->font->outerTransform.c, pt.y ) +
- glyphpath->fractionalTranslation.x;
- ppt->y = FT_MulFix( glyphpath->font->outerTransform.b, pt.x ) +
- FT_MulFix( glyphpath->font->outerTransform.d, pt.y ) +
- glyphpath->fractionalTranslation.y;
- }
-
-
- /*
- * From two line segments, (u1,u2) and (v1,v2), compute a point of
- * intersection on the corresponding lines.
- * Return false if no intersection is found, or if the intersection is
- * too far away from the ends of the line segments, u2 and v1.
- *
- */
- static FT_Bool
- cf2_glyphpath_computeIntersection( CF2_GlyphPath glyphpath,
- const FT_Vector* u1,
- const FT_Vector* u2,
- const FT_Vector* v1,
- const FT_Vector* v2,
- FT_Vector* intersection )
- {
- /*
- * Let `u' be a zero-based vector from the first segment, `v' from the
- * second segment.
- * Let `w 'be the zero-based vector from `u1' to `v1'.
- * `perp' is the `perpendicular dot product'; see
- * http://mathworld.wolfram.com/PerpDotProduct.html.
- * `s' is the parameter for the parametric line for the first segment
- * (`u').
- *
- * See notation in
- * http://softsurfer.com/Archive/algorithm_0104/algorithm_0104B.htm.
- * Calculations are done in 16.16, but must handle the squaring of
- * line lengths in character space. We scale all vectors by 1/32 to
- * avoid overflow. This allows values up to 4095 to be squared. The
- * scale factor cancels in the divide.
- *
- * TODO: the scale factor could be computed from UnitsPerEm.
- *
- */
-
-#define cf2_perp( a, b ) \
- ( FT_MulFix( a.x, b.y ) - FT_MulFix( a.y, b.x ) )
-
- /* round and divide by 32 */
-#define CF2_CS_SCALE( x ) \
- ( ( (x) + 0x10 ) >> 5 )
-
- FT_Vector u, v, w; /* scaled vectors */
- CF2_Fixed denominator, s;
-
-
- u.x = CF2_CS_SCALE( u2->x - u1->x );
- u.y = CF2_CS_SCALE( u2->y - u1->y );
- v.x = CF2_CS_SCALE( v2->x - v1->x );
- v.y = CF2_CS_SCALE( v2->y - v1->y );
- w.x = CF2_CS_SCALE( v1->x - u1->x );
- w.y = CF2_CS_SCALE( 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 = u1->x + FT_MulFix( s, u2->x - u1->x );
- intersection->y = u1->y + FT_MulFix( s, 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( intersection->x - u1->x ) < glyphpath->snapThreshold )
- intersection->x = u1->x;
- if ( u1->y == u2->y &&
- cf2_fixedAbs( intersection->y - u1->y ) < glyphpath->snapThreshold )
- intersection->y = u1->y;
-
- if ( v1->x == v2->x &&
- cf2_fixedAbs( intersection->x - v1->x ) < glyphpath->snapThreshold )
- intersection->x = v1->x;
- if ( v1->y == v2->y &&
- cf2_fixedAbs( 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 - ( u2->x + v1->x ) / 2 ) >
- glyphpath->miterLimit ||
- cf2_fixedAbs( intersection->y - ( u2->y + v1->y ) / 2 ) >
- glyphpath->miterLimit )
- return FALSE;
-
- return TRUE;
- }
-
-
- /*
- * Push the cached element (glyphpath->prevElem*) to the outline
- * consumer. When a darkening offset is used, the end point of the
- * cached element may be adjusted to an intersection point or we may
- * synthesize a connecting line to the current element. If we are
- * closing a subpath, we may also generate a connecting line to the start
- * point.
- *
- * This is where Character Space (CS) is converted to Device Space (DS)
- * using a hint map. This calculation must use a HintMap that was valid
- * at the time the element was saved. For the first point in a subpath,
- * that is a saved HintMap. For most elements, it just means the caller
- * has delayed building a HintMap from the current HintMask.
- *
- * Transform each point with outerTransform and call the outline
- * callbacks. This is a general 3x3 transform:
- *
- * x' = a*x + c*y + tx, y' = b*x + d*y + ty
- *
- * but it uses 4 elements from CF2_Font and the translation part
- * from CF2_GlyphPath.
- *
- */
- static void
- cf2_glyphpath_pushPrevElem( CF2_GlyphPath glyphpath,
- CF2_HintMap hintmap,
- FT_Vector* nextP0,
- FT_Vector nextP1,
- FT_Bool close )
- {
- CF2_CallbackParamsRec params;
-
- FT_Vector* prevP0;
- FT_Vector* prevP1;
-
- FT_Vector intersection = { 0, 0 };
- FT_Bool useIntersection = FALSE;
-
-
- FT_ASSERT( glyphpath->prevElemOp == CF2_PathOpLineTo ||
- glyphpath->prevElemOp == CF2_PathOpCubeTo );
-
- if ( glyphpath->prevElemOp == CF2_PathOpLineTo )
- {
- prevP0 = &glyphpath->prevElemP0;
- prevP1 = &glyphpath->prevElemP1;
- }
- else
- {
- prevP0 = &glyphpath->prevElemP2;
- prevP1 = &glyphpath->prevElemP3;
- }
-
- /* optimization: if previous and next elements are offset by the same */
- /* amount, then there will be no gap, and no need to compute an */
- /* intersection. */
- if ( prevP1->x != nextP0->x || prevP1->y != nextP0->y )
- {
- /* previous element does not join next element: */
- /* adjust end point of previous element to the intersection */
- useIntersection = cf2_glyphpath_computeIntersection( glyphpath,
- prevP0,
- prevP1,
- nextP0,
- &nextP1,
- &intersection );
- if ( useIntersection )
- {
- /* modify the last point of the cached element (either line or */
- /* curve) */
- *prevP1 = intersection;
- }
- }
-
- params.pt0 = glyphpath->currentDS;
-
- switch( glyphpath->prevElemOp )
- {
- case CF2_PathOpLineTo:
- params.op = CF2_PathOpLineTo;
-
- /* note: pt2 and pt3 are unused */
-
- if ( close )
- {
- /* use first hint map if closing */
- cf2_glyphpath_hintPoint( glyphpath,
- &glyphpath->firstHintMap,
- &params.pt1,
- glyphpath->prevElemP1.x,
- glyphpath->prevElemP1.y );
- }
- else
- {
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt1,
- glyphpath->prevElemP1.x,
- glyphpath->prevElemP1.y );
- }
-
- /* output only non-zero length lines */
- if ( params.pt0.x != params.pt1.x || params.pt0.y != params.pt1.y )
- {
- glyphpath->callbacks->lineTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt1;
- }
- break;
-
- case CF2_PathOpCubeTo:
- params.op = CF2_PathOpCubeTo;
-
- /* TODO: should we intersect the interior joins (p1-p2 and p2-p3)? */
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt1,
- glyphpath->prevElemP1.x,
- glyphpath->prevElemP1.y );
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt2,
- glyphpath->prevElemP2.x,
- glyphpath->prevElemP2.y );
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt3,
- glyphpath->prevElemP3.x,
- glyphpath->prevElemP3.y );
-
- glyphpath->callbacks->cubeTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt3;
-
- break;
- }
-
- if ( !useIntersection || close )
- {
- /* insert connecting line between end of previous element and start */
- /* of current one */
- /* note: at the end of a subpath, we might do both, so use `nextP0' */
- /* before we change it, below */
-
- if ( close )
- {
- /* if we are closing the subpath, then nextP0 is in the first */
- /* hint zone */
- cf2_glyphpath_hintPoint( glyphpath,
- &glyphpath->firstHintMap,
- &params.pt1,
- nextP0->x,
- nextP0->y );
- }
- else
- {
- cf2_glyphpath_hintPoint( glyphpath,
- hintmap,
- &params.pt1,
- nextP0->x,
- nextP0->y );
- }
-
- if ( params.pt1.x != glyphpath->currentDS.x ||
- params.pt1.y != glyphpath->currentDS.y )
- {
- /* length is nonzero */
- params.op = CF2_PathOpLineTo;
- params.pt0 = glyphpath->currentDS;
-
- /* note: pt2 and pt3 are unused */
- glyphpath->callbacks->lineTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt1;
- }
- }
-
- if ( useIntersection )
- {
- /* return intersection point to caller */
- *nextP0 = intersection;
- }
- }
-
-
- /* push a MoveTo element based on current point and offset of current */
- /* element */
- static void
- cf2_glyphpath_pushMove( CF2_GlyphPath glyphpath,
- FT_Vector start )
- {
- CF2_CallbackParamsRec params;
-
-
- params.op = CF2_PathOpMoveTo;
- params.pt0 = glyphpath->currentDS;
-
- /* Test if move has really happened yet; it would have called */
- /* `cf2_hintmap_build' to set `isValid'. */
- if ( !cf2_hintmap_isValid( &glyphpath->hintMap ) )
- {
- /* we are here iff first subpath is missing a moveto operator: */
- /* synthesize first moveTo to finish initialization of hintMap */
- cf2_glyphpath_moveTo( glyphpath,
- glyphpath->start.x,
- glyphpath->start.y );
- }
-
- cf2_glyphpath_hintPoint( glyphpath,
- &glyphpath->hintMap,
- &params.pt1,
- start.x,
- start.y );
-
- /* note: pt2 and pt3 are unused */
- glyphpath->callbacks->moveTo( glyphpath->callbacks, &params );
-
- glyphpath->currentDS = params.pt1;
- glyphpath->offsetStart0 = start;
- }
-
-
- /*
- * All coordinates are in character space.
- * On input, (x1, y1) and (x2, y2) give line segment.
- * On output, (x, y) give offset vector.
- * We use a piecewise approximation to trig functions.
- *
- * TODO: Offset true perpendicular and proper length
- * supply the y-translation for hinting here, too,
- * that adds yOffset unconditionally to *y.
- */
- static void
- cf2_glyphpath_computeOffset( CF2_GlyphPath glyphpath,
- CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2,
- CF2_Fixed* x,
- CF2_Fixed* y )
- {
- CF2_Fixed dx = x2 - x1;
- CF2_Fixed dy = y2 - y1;
-
-
- /* note: negative offsets don't work here; negate deltas to change */
- /* quadrants, below */
- if ( glyphpath->font->reverseWinding )
- {
- dx = -dx;
- dy = -dy;
- }
-
- *x = *y = 0;
-
- if ( !glyphpath->darken )
- return;
-
- /* add momentum for this path element */
- glyphpath->callbacks->windingMomentum +=
- cf2_getWindingMomentum( x1, y1, x2, y2 );
-
- /* note: allow mixed integer and fixed multiplication here */
- if ( dx >= 0 )
- {
- if ( dy >= 0 )
- {
- /* first quadrant, +x +y */
-
- if ( dx > 2 * dy )
- {
- /* +x */
- *x = 0;
- *y = 0;
- }
- else if ( dy > 2 * dx )
- {
- /* +y */
- *x = glyphpath->xOffset;
- *y = glyphpath->yOffset;
- }
- else
- {
- /* +x +y */
- *x = FT_MulFix( cf2_floatToFixed( 0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 1.0 - 0.7 ),
- glyphpath->yOffset );
- }
- }
- else
- {
- /* fourth quadrant, +x -y */
-
- if ( dx > -2 * dy )
- {
- /* +x */
- *x = 0;
- *y = 0;
- }
- else if ( -dy > 2 * dx )
- {
- /* -y */
- *x = -glyphpath->xOffset;
- *y = glyphpath->yOffset;
- }
- else
- {
- /* +x -y */
- *x = FT_MulFix( cf2_floatToFixed( -0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 1.0 - 0.7 ),
- glyphpath->yOffset );
- }
- }
- }
- else
- {
- if ( dy >= 0 )
- {
- /* second quadrant, -x +y */
-
- if ( -dx > 2 * dy )
- {
- /* -x */
- *x = 0;
- *y = 2 * glyphpath->yOffset;
- }
- else if ( dy > -2 * dx )
- {
- /* +y */
- *x = glyphpath->xOffset;
- *y = glyphpath->yOffset;
- }
- else
- {
- /* -x +y */
- *x = FT_MulFix( cf2_floatToFixed( 0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 1.0 + 0.7 ),
- glyphpath->yOffset );
- }
- }
- else
- {
- /* third quadrant, -x -y */
-
- if ( -dx > -2 * dy )
- {
- /* -x */
- *x = 0;
- *y = 2 * glyphpath->yOffset;
- }
- else if ( -dy > -2 * dx )
- {
- /* -y */
- *x = -glyphpath->xOffset;
- *y = glyphpath->yOffset;
- }
- else
- {
- /* -x -y */
- *x = FT_MulFix( cf2_floatToFixed( -0.7 ),
- glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 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 = glyphpath->currentCS.x + xOffset;
- P0.y = glyphpath->currentCS.y + yOffset;
- P1.x = x + xOffset;
- P1.y = y + yOffset;
-
- if ( glyphpath->moveIsPending )
- {
- /* emit offset 1st point as MoveTo */
- cf2_glyphpath_pushMove( glyphpath, P0 );
-
- glyphpath->moveIsPending = FALSE; /* adjust state machine */
- glyphpath->pathIsOpen = TRUE;
-
- glyphpath->offsetStart1 = P1; /* record second point */
- }
-
- if ( glyphpath->elemIsQueued )
- {
- FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ||
- glyphpath->hintMap.count == 0 );
-
- cf2_glyphpath_pushPrevElem( glyphpath,
- &glyphpath->hintMap,
- &P0,
- P1,
- FALSE );
- }
-
- /* queue the current element with offset points */
- glyphpath->elemIsQueued = TRUE;
- glyphpath->prevElemOp = CF2_PathOpLineTo;
- glyphpath->prevElemP0 = P0;
- glyphpath->prevElemP1 = P1;
-
- /* update current map */
- if ( newHintMap )
- cf2_hintmap_build( &glyphpath->hintMap,
- glyphpath->hStemHintArray,
- glyphpath->vStemHintArray,
- glyphpath->hintMask,
- glyphpath->hintOriginY,
- FALSE );
-
- glyphpath->currentCS.x = x; /* pre-offset current point */
- glyphpath->currentCS.y = y;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_curveTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2,
- CF2_Fixed x3,
- CF2_Fixed y3 )
- {
- CF2_Fixed xOffset1, yOffset1, xOffset3, yOffset3;
- FT_Vector P0, P1, P2, P3;
-
-
- /* TODO: ignore zero length portions of curve?? */
- cf2_glyphpath_computeOffset( glyphpath,
- glyphpath->currentCS.x,
- glyphpath->currentCS.y,
- x1,
- y1,
- &xOffset1,
- &yOffset1 );
- cf2_glyphpath_computeOffset( glyphpath,
- x2,
- y2,
- x3,
- y3,
- &xOffset3,
- &yOffset3 );
-
- /* add momentum from the middle segment */
- glyphpath->callbacks->windingMomentum +=
- cf2_getWindingMomentum( x1, y1, x2, y2 );
-
- /* construct offset points */
- P0.x = glyphpath->currentCS.x + xOffset1;
- P0.y = glyphpath->currentCS.y + yOffset1;
- P1.x = x1 + xOffset1;
- P1.y = y1 + yOffset1;
- /* note: preserve angle of final segment by using offset3 at both ends */
- P2.x = x2 + xOffset3;
- P2.y = y2 + yOffset3;
- P3.x = x3 + xOffset3;
- P3.y = y3 + yOffset3;
-
- if ( glyphpath->moveIsPending )
- {
- /* emit offset 1st point as MoveTo */
- cf2_glyphpath_pushMove( glyphpath, P0 );
-
- glyphpath->moveIsPending = FALSE;
- glyphpath->pathIsOpen = TRUE;
-
- glyphpath->offsetStart1 = P1; /* record second point */
- }
-
- if ( glyphpath->elemIsQueued )
- {
- FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ||
- glyphpath->hintMap.count == 0 );
-
- cf2_glyphpath_pushPrevElem( glyphpath,
- &glyphpath->hintMap,
- &P0,
- P1,
- FALSE );
- }
-
- /* queue the current element with offset points */
- glyphpath->elemIsQueued = TRUE;
- glyphpath->prevElemOp = CF2_PathOpCubeTo;
- glyphpath->prevElemP0 = P0;
- glyphpath->prevElemP1 = P1;
- glyphpath->prevElemP2 = P2;
- glyphpath->prevElemP3 = P3;
-
- /* update current map */
- if ( cf2_hintmask_isNew( glyphpath->hintMask ) )
- cf2_hintmap_build( &glyphpath->hintMap,
- glyphpath->hStemHintArray,
- glyphpath->vStemHintArray,
- glyphpath->hintMask,
- glyphpath->hintOriginY,
- FALSE );
-
- glyphpath->currentCS.x = x3; /* pre-offset current point */
- glyphpath->currentCS.y = y3;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_glyphpath_closeOpenPath( CF2_GlyphPath glyphpath )
- {
- if ( glyphpath->pathIsOpen )
- {
- /*
- * A closing line in Character Space line is always generated below
- * with `cf2_glyphPath_lineTo'. It may be ignored later if it turns
- * out to be zero length in Device Space.
- */
- glyphpath->pathIsClosing = TRUE;
-
- cf2_glyphpath_lineTo( glyphpath,
- glyphpath->start.x,
- glyphpath->start.y );
-
- /* empty the final element from the queue and close the path */
- if ( glyphpath->elemIsQueued )
- cf2_glyphpath_pushPrevElem( glyphpath,
- &glyphpath->hintMap,
- &glyphpath->offsetStart0,
- glyphpath->offsetStart1,
- TRUE );
-
- /* reset state machine */
- glyphpath->moveIsPending = TRUE;
- glyphpath->pathIsOpen = FALSE;
- glyphpath->pathIsClosing = FALSE;
- glyphpath->elemIsQueued = FALSE;
- }
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2hints.h b/src/3rdparty/freetype/src/cff/cf2hints.h
deleted file mode 100644
index f25d91bf89..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2hints.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2hints.h */
-/* */
-/* Adobe's code for handling CFF hints (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2HINTS_H__
-#define __CF2HINTS_H__
-
-
-FT_BEGIN_HEADER
-
-
- enum
- {
- CF2_MAX_HINTS = 96 /* maximum # of hints */
- };
-
-
- /*
- * A HintMask object stores a bit mask that specifies which hints in the
- * charstring are active at a given time. Hints in CFF must be declared
- * at the start, before any drawing operators, with horizontal hints
- * preceding vertical hints. The HintMask is ordered the same way, with
- * horizontal hints immediately followed by vertical hints. Clients are
- * responsible for knowing how many of each type are present.
- *
- * The maximum total number of hints is 96, as specified by the CFF
- * specification.
- *
- * A HintMask is built 0 or more times while interpreting a charstring, by
- * the HintMask operator. There is only one HintMask, but it is built or
- * rebuilt each time there is a hint substitution (HintMask operator) in
- * the charstring. A default HintMask with all bits set is built if there
- * has been no HintMask operator prior to the first drawing operator.
- *
- */
-
- typedef struct CF2_HintMaskRec_
- {
- FT_Error* error;
-
- FT_Bool isValid;
- FT_Bool isNew;
-
- size_t bitCount;
- size_t byteCount;
-
- FT_Byte mask[( CF2_MAX_HINTS + 7 ) / 8];
-
- } CF2_HintMaskRec, *CF2_HintMask;
-
-
- typedef struct CF2_StemHintRec_
- {
- FT_Bool used; /* DS positions are valid */
-
- CF2_Fixed min; /* original character space value */
- CF2_Fixed max;
-
- CF2_Fixed minDS; /* DS position after first use */
- CF2_Fixed maxDS;
-
- } CF2_StemHintRec, *CF2_StemHint;
-
-
- /*
- * A HintMap object stores a piecewise linear function for mapping
- * y-coordinates from character space to device space, providing
- * appropriate pixel alignment to stem edges.
- *
- * The map is implemented as an array of `CF2_Hint' elements, each
- * representing an edge. When edges are paired, as from stem hints, the
- * bottom edge must immediately precede the top edge in the array.
- * Element character space AND device space positions must both increase
- * monotonically in the array. `CF2_Hint' elements are also used as
- * parameters to `cf2_blues_capture'.
- *
- * The `cf2_hintmap_build' method must be called before any drawing
- * operation (beginning with a Move operator) and at each hint
- * substitution (HintMask operator).
- *
- * The `cf2_hintmap_map' method is called to transform y-coordinates at
- * each drawing operation (move, line, curve).
- *
- */
-
- /* TODO: make this a CF2_ArrStack and add a deep copy method */
- enum
- {
- CF2_MAX_HINT_EDGES = CF2_MAX_HINTS * 2
- };
-
-
- typedef struct CF2_HintMapRec_
- {
- CF2_Font font;
-
- /* initial map based on blue zones */
- struct CF2_HintMapRec_* initialHintMap;
-
- /* working storage for 2nd pass adjustHints */
- CF2_ArrStack hintMoves;
-
- FT_Bool isValid;
- FT_Bool hinted;
-
- CF2_Fixed scale;
- CF2_UInt count;
-
- /* start search from this index */
- CF2_UInt lastIndex;
-
- CF2_HintRec edge[CF2_MAX_HINT_EDGES]; /* 192 */
-
- } CF2_HintMapRec, *CF2_HintMap;
-
-
- FT_LOCAL( FT_Bool )
- cf2_hint_isValid( const CF2_Hint hint );
- FT_LOCAL( FT_Bool )
- cf2_hint_isTop( const CF2_Hint hint );
- FT_LOCAL( FT_Bool )
- cf2_hint_isBottom( const CF2_Hint hint );
- FT_LOCAL( void )
- cf2_hint_lock( CF2_Hint hint );
-
-
- FT_LOCAL( void )
- cf2_hintmap_init( CF2_HintMap hintmap,
- CF2_Font font,
- CF2_HintMap initialMap,
- CF2_ArrStack hintMoves,
- CF2_Fixed scale );
- FT_LOCAL( void )
- cf2_hintmap_build( CF2_HintMap hintmap,
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOrigin,
- FT_Bool initialMap );
-
-
- /*
- * GlyphPath is a wrapper for drawing operations that scales the
- * coordinates according to the render matrix and HintMap. It also tracks
- * open paths to control ClosePath and to insert MoveTo for broken fonts.
- *
- */
- typedef struct CF2_GlyphPathRec_
- {
- /* TODO: gather some of these into a hinting context */
-
- CF2_Font font; /* font instance */
- CF2_OutlineCallbacks callbacks; /* outline consumer */
-
-
- CF2_HintMapRec hintMap; /* current hint map */
- CF2_HintMapRec firstHintMap; /* saved copy */
- CF2_HintMapRec initialHintMap; /* based on all captured hints */
-
- CF2_ArrStackRec hintMoves; /* list of hint moves for 2nd pass */
-
- CF2_Fixed scaleX; /* matrix a */
- CF2_Fixed scaleC; /* matrix c */
- CF2_Fixed scaleY; /* matrix d */
-
- FT_Vector fractionalTranslation; /* including deviceXScale */
-#if 0
- CF2_Fixed hShift; /* character space horizontal shift */
- /* (for fauxing) */
-#endif
-
- FT_Bool pathIsOpen; /* true after MoveTo */
- FT_Bool pathIsClosing; /* true when synthesizing closepath line */
- FT_Bool darken; /* true if stem darkening */
- FT_Bool moveIsPending; /* true between MoveTo and offset MoveTo */
-
- /* references used to call `cf2_hintmap_build', if necessary */
- CF2_ArrStack hStemHintArray;
- CF2_ArrStack vStemHintArray;
- CF2_HintMask hintMask; /* ptr to the current mask */
- CF2_Fixed hintOriginY; /* copy of current origin */
- const CF2_BluesRec* blues;
-
- CF2_Fixed xOffset; /* character space offsets */
- CF2_Fixed yOffset;
-
- /* character space miter limit threshold */
- CF2_Fixed miterLimit;
- /* vertical/horzizontal snap distance in character space */
- CF2_Fixed snapThreshold;
-
- FT_Vector offsetStart0; /* first and second points of first */
- FT_Vector offsetStart1; /* element with offset applied */
-
- /* current point, character space, before offset */
- FT_Vector currentCS;
- /* current point, device space */
- FT_Vector currentDS;
- /* start point of subpath, character space */
- FT_Vector start;
-
- /* the following members constitute the `queue' of one element */
- FT_Bool elemIsQueued;
- CF2_Int prevElemOp;
-
- FT_Vector prevElemP0;
- FT_Vector prevElemP1;
- FT_Vector prevElemP2;
- FT_Vector prevElemP3;
-
- } CF2_GlyphPathRec, *CF2_GlyphPath;
-
-
- FT_LOCAL( void )
- cf2_glyphpath_init( CF2_GlyphPath glyphpath,
- CF2_Font font,
- CF2_OutlineCallbacks callbacks,
- CF2_Fixed scaleY,
- /* CF2_Fixed hShift, */
- CF2_ArrStack hStemHintArray,
- CF2_ArrStack vStemHintArray,
- CF2_HintMask hintMask,
- CF2_Fixed hintOrigin,
- const CF2_Blues blues,
- const FT_Vector* fractionalTranslation );
- FT_LOCAL( void )
- cf2_glyphpath_finalize( CF2_GlyphPath glyphpath );
-
- FT_LOCAL( void )
- cf2_glyphpath_moveTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x,
- CF2_Fixed y );
- FT_LOCAL( void )
- cf2_glyphpath_lineTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x,
- CF2_Fixed y );
- FT_LOCAL( void )
- cf2_glyphpath_curveTo( CF2_GlyphPath glyphpath,
- CF2_Fixed x1,
- CF2_Fixed y1,
- CF2_Fixed x2,
- CF2_Fixed y2,
- CF2_Fixed x3,
- CF2_Fixed y3 );
- FT_LOCAL( void )
- cf2_glyphpath_closeOpenPath( CF2_GlyphPath glyphpath );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2HINTS_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2intrp.c b/src/3rdparty/freetype/src/cff/cf2intrp.c
deleted file mode 100644
index ff3fa9aaaa..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2intrp.c
+++ /dev/null
@@ -1,1571 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2intrp.c */
-/* */
-/* Adobe's CFF Interpreter (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2stack.h"
-#include "cf2hints.h"
-#include "cf2intrp.h"
-
-#include "cf2error.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2interp
-
-
- /* some operators are not implemented yet */
-#define CF2_FIXME FT_TRACE4(( "cf2_interpT2CharString:" \
- " operator not implemented yet\n" ))
-
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_init( CF2_HintMask hintmask,
- FT_Error* error )
- {
- FT_ZERO( hintmask );
-
- hintmask->error = error;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hintmask_isValid( const CF2_HintMask hintmask )
- {
- return hintmask->isValid;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hintmask_isNew( const CF2_HintMask hintmask )
- {
- return hintmask->isNew;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_setNew( CF2_HintMask hintmask,
- FT_Bool val )
- {
- hintmask->isNew = val;
- }
-
-
- /* clients call `getMaskPtr' in order to iterate */
- /* through hint mask */
-
- FT_LOCAL_DEF( FT_Byte* )
- cf2_hintmask_getMaskPtr( CF2_HintMask hintmask )
- {
- return hintmask->mask;
- }
-
-
- static size_t
- cf2_hintmask_setCounts( CF2_HintMask hintmask,
- size_t bitCount )
- {
- if ( bitCount > CF2_MAX_HINTS )
- {
- /* total of h and v stems must be <= 96 */
- CF2_SET_ERROR( hintmask->error, Invalid_Glyph_Format );
- return 0;
- }
-
- hintmask->bitCount = bitCount;
- hintmask->byteCount = ( hintmask->bitCount + 7 ) / 8;
-
- hintmask->isValid = TRUE;
- hintmask->isNew = TRUE;
-
- return bitCount;
- }
-
-
- /* consume the hintmask bytes from the charstring, advancing the src */
- /* pointer */
- static void
- cf2_hintmask_read( CF2_HintMask hintmask,
- CF2_Buffer charstring,
- size_t bitCount )
- {
- size_t i;
-
-#ifndef CF2_NDEBUG
- /* these are the bits in the final mask byte that should be zero */
- /* Note: this variable is only used in an assert expression below */
- /* and then only if CF2_NDEBUG is not defined */
- CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
-#endif
-
-
- /* initialize counts and isValid */
- if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
- return;
-
- FT_ASSERT( hintmask->byteCount > 0 );
-
- FT_TRACE4(( " (maskbytes:" ));
-
- /* set mask and advance interpreter's charstring pointer */
- for ( i = 0; i < hintmask->byteCount; i++ )
- {
- hintmask->mask[i] = (FT_Byte)cf2_buf_readByte( charstring );
- FT_TRACE4(( " 0x%02X", hintmask->mask[i] ));
- }
-
- FT_TRACE4(( ")\n" ));
-
- /* assert any unused bits in last byte are zero unless there's a prior */
- /* error */
- /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
-#ifndef CF2_NDEBUG
- FT_ASSERT( ( hintmask->mask[hintmask->byteCount - 1] & mask ) == 0 ||
- *hintmask->error );
-#endif
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_setAll( CF2_HintMask hintmask,
- size_t bitCount )
- {
- size_t i;
- CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
-
-
- /* initialize counts and isValid */
- if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
- return;
-
- FT_ASSERT( hintmask->byteCount > 0 );
- FT_ASSERT( hintmask->byteCount <
- sizeof ( hintmask->mask ) / sizeof ( hintmask->mask[0] ) );
-
- /* set mask to all ones */
- for ( i = 0; i < hintmask->byteCount; i++ )
- hintmask->mask[i] = 0xFF;
-
- /* clear unused bits */
- /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
- hintmask->mask[hintmask->byteCount - 1] &= ~mask;
- }
-
-
- /* Type2 charstring opcodes */
- enum
- {
- cf2_cmdRESERVED_0, /* 0 */
- cf2_cmdHSTEM, /* 1 */
- cf2_cmdRESERVED_2, /* 2 */
- cf2_cmdVSTEM, /* 3 */
- cf2_cmdVMOVETO, /* 4 */
- cf2_cmdRLINETO, /* 5 */
- cf2_cmdHLINETO, /* 6 */
- cf2_cmdVLINETO, /* 7 */
- cf2_cmdRRCURVETO, /* 8 */
- cf2_cmdRESERVED_9, /* 9 */
- cf2_cmdCALLSUBR, /* 10 */
- cf2_cmdRETURN, /* 11 */
- cf2_cmdESC, /* 12 */
- cf2_cmdRESERVED_13, /* 13 */
- cf2_cmdENDCHAR, /* 14 */
- cf2_cmdRESERVED_15, /* 15 */
- cf2_cmdRESERVED_16, /* 16 */
- cf2_cmdRESERVED_17, /* 17 */
- cf2_cmdHSTEMHM, /* 18 */
- cf2_cmdHINTMASK, /* 19 */
- cf2_cmdCNTRMASK, /* 20 */
- cf2_cmdRMOVETO, /* 21 */
- cf2_cmdHMOVETO, /* 22 */
- cf2_cmdVSTEMHM, /* 23 */
- cf2_cmdRCURVELINE, /* 24 */
- cf2_cmdRLINECURVE, /* 25 */
- cf2_cmdVVCURVETO, /* 26 */
- cf2_cmdHHCURVETO, /* 27 */
- cf2_cmdEXTENDEDNMBR, /* 28 */
- cf2_cmdCALLGSUBR, /* 29 */
- cf2_cmdVHCURVETO, /* 30 */
- cf2_cmdHVCURVETO /* 31 */
- };
-
- enum
- {
- cf2_escDOTSECTION, /* 0 */
- cf2_escRESERVED_1, /* 1 */
- cf2_escRESERVED_2, /* 2 */
- cf2_escAND, /* 3 */
- cf2_escOR, /* 4 */
- cf2_escNOT, /* 5 */
- cf2_escRESERVED_6, /* 6 */
- cf2_escRESERVED_7, /* 7 */
- cf2_escRESERVED_8, /* 8 */
- cf2_escABS, /* 9 */
- cf2_escADD, /* 10 like otherADD */
- cf2_escSUB, /* 11 like otherSUB */
- cf2_escDIV, /* 12 */
- cf2_escRESERVED_13, /* 13 */
- cf2_escNEG, /* 14 */
- cf2_escEQ, /* 15 */
- cf2_escRESERVED_16, /* 16 */
- cf2_escRESERVED_17, /* 17 */
- cf2_escDROP, /* 18 */
- cf2_escRESERVED_19, /* 19 */
- cf2_escPUT, /* 20 like otherPUT */
- cf2_escGET, /* 21 like otherGET */
- cf2_escIFELSE, /* 22 like otherIFELSE */
- cf2_escRANDOM, /* 23 like otherRANDOM */
- cf2_escMUL, /* 24 like otherMUL */
- cf2_escRESERVED_25, /* 25 */
- cf2_escSQRT, /* 26 */
- cf2_escDUP, /* 27 like otherDUP */
- cf2_escEXCH, /* 28 like otherEXCH */
- cf2_escINDEX, /* 29 */
- cf2_escROLL, /* 30 */
- cf2_escRESERVED_31, /* 31 */
- cf2_escRESERVED_32, /* 32 */
- cf2_escRESERVED_33, /* 33 */
- cf2_escHFLEX, /* 34 */
- cf2_escFLEX, /* 35 */
- cf2_escHFLEX1, /* 36 */
- cf2_escFLEX1 /* 37 */
- };
-
-
- /* `stemHintArray' does not change once we start drawing the outline. */
- static void
- cf2_doStems( const CF2_Font font,
- CF2_Stack opStack,
- CF2_ArrStack stemHintArray,
- CF2_Fixed* width,
- FT_Bool* haveWidth,
- CF2_Fixed hintOffset )
- {
- CF2_UInt i;
- CF2_UInt count = cf2_stack_count( opStack );
- FT_Bool hasWidthArg = (FT_Bool)( count & 1 );
-
- /* variable accumulates delta values from operand stack */
- CF2_Fixed position = hintOffset;
-
- if ( hasWidthArg && ! *haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) +
- cf2_getNominalWidthX( font->decoder );
-
- if ( font->decoder->width_only )
- goto exit;
-
- for ( i = hasWidthArg ? 1 : 0; i < count; i += 2 )
- {
- /* construct a CF2_StemHint and push it onto the list */
- CF2_StemHintRec stemhint;
-
-
- stemhint.min =
- position += cf2_stack_getReal( opStack, i );
- stemhint.max =
- 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 index;
- FT_Bool isHFlex;
- CF2_Int top, i, j;
-
-
- vals[0] = *curX;
- vals[1] = *curY;
- index = 0;
- isHFlex = readFromStack[9] == FALSE;
- top = isHFlex ? 9 : 10;
-
- for ( i = 0; i < top; i++ )
- {
- vals[i + 2] = vals[i];
- if ( readFromStack[i] )
- vals[i + 2] += cf2_stack_getReal( opStack, index++ );
- }
-
- if ( isHFlex )
- vals[9 + 2] = *curY;
-
- if ( doConditionalLastRead )
- {
- FT_Bool lastIsX = (FT_Bool)( cf2_fixedAbs( vals[10] - *curX ) >
- cf2_fixedAbs( vals[11] - *curY ) );
- CF2_Fixed lastVal = cf2_stack_getReal( opStack, index );
-
-
- if ( lastIsX )
- {
- vals[12] = vals[10] + lastVal;
- vals[13] = *curY;
- }
- else
- {
- vals[12] = *curX;
- vals[13] = vals[11] + lastVal;
- }
- }
- else
- {
- if ( readFromStack[10] )
- vals[12] = vals[10] + cf2_stack_getReal( opStack, index++ );
- else
- vals[12] = *curX;
-
- if ( readFromStack[11] )
- vals[13] = vals[11] + cf2_stack_getReal( opStack, index );
- 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];
- }
-
-
- /*
- * `error' is a shared error code used by many objects in this
- * routine. Before the code continues from an error, it must check and
- * record the error in `*error'. The idea is that this shared
- * error code will record the first error encountered. If testing
- * for an error anyway, the cost of `goto exit' is small, so we do it,
- * even if continuing would be safe. In this case, `lastError' is
- * set, so the testing and storing can be done in one place, at `exit'.
- *
- * Continuing after an error is intended for objects which do their own
- * testing of `*error', e.g., array stack functions. This allows us to
- * avoid an extra test after the call.
- *
- * Unimplemented opcodes are ignored.
- *
- */
- FT_LOCAL_DEF( void )
- cf2_interpT2CharString( CF2_Font font,
- CF2_Buffer buf,
- CF2_OutlineCallbacks callbacks,
- const FT_Vector* translation,
- FT_Bool doingSeac,
- CF2_Fixed curX,
- CF2_Fixed curY,
- CF2_Fixed* width )
- {
- /* lastError is used for errors that are immediately tested */
- FT_Error lastError = FT_Err_Ok;
-
- /* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
-
- FT_Error* error = &font->error;
- FT_Memory memory = font->memory;
-
- CF2_Fixed scaleY = font->innerTransform.d;
- CF2_Fixed nominalWidthX = cf2_getNominalWidthX( decoder );
-
- /* save this for hinting seac accents */
- CF2_Fixed hintOriginY = curY;
-
- CF2_Stack opStack = NULL;
- FT_Byte op1; /* first opcode byte */
-
- /* 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;
-
-
- /* 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.
- *
- */
- haveWidth = 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 */
- opStack = cf2_stack_init( memory, error );
- if ( !opStack )
- {
- lastError = FT_THROW( Out_Of_Memory );
- goto exit;
- }
-
- /* initialize subroutine stack by placing top level charstring as */
- /* first element (max depth plus one for the charstring) */
- /* Note: Caller owns and must finalize the first charstring. */
- /* Our copy of it does not change that requirement. */
- cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 );
-
- charstring = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack );
- *charstring = *buf; /* structure copy */
-
- charstringIndex = 0; /* entry is valid now */
-
- /* catch errors so far */
- if ( *error )
- goto exit;
-
- /* main interpreter loop */
- while ( 1 )
- {
- if ( cf2_buf_isEnd( charstring ) )
- {
- /* If we've reached the end of the charstring, simulate a */
- /* cf2_cmdRETURN or cf2_cmdENDCHAR. */
- 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 );
-
- /* check for errors once per loop */
- if ( *error )
- goto exit;
-
- instructionLimit--;
- if ( instructionLimit == 0 )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit;
- }
-
- switch( op1 )
- {
- case cf2_cmdRESERVED_0:
- case cf2_cmdRESERVED_2:
- case cf2_cmdRESERVED_9:
- case cf2_cmdRESERVED_13:
- case cf2_cmdRESERVED_15:
- case cf2_cmdRESERVED_16:
- case cf2_cmdRESERVED_17:
- /* we may get here if we have a prior error */
- FT_TRACE4(( " unknown op (%d)\n", op1 ));
- break;
-
- case cf2_cmdHSTEMHM:
- case cf2_cmdHSTEM:
- FT_TRACE4(( op1 == cf2_cmdHSTEMHM ? " hstemhm\n" : " hstem\n" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString:"
- " invalid horizontal hint mask\n" ));
- break;
- }
-
- cf2_doStems( font,
- opStack,
- &hStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- break;
-
- case cf2_cmdVSTEMHM:
- case cf2_cmdVSTEM:
- FT_TRACE4(( op1 == cf2_cmdVSTEMHM ? " vstemhm\n" : " vstem\n" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString:"
- " invalid vertical hint mask\n" ));
- break;
- }
-
- cf2_doStems( font,
- opStack,
- &vStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- break;
-
- case cf2_cmdVMOVETO:
- FT_TRACE4(( " vmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curY += cf2_stack_popFixed( opStack );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdRLINETO:
- {
- CF2_UInt index;
- CF2_UInt count = cf2_stack_count( opStack );
-
-
- FT_TRACE4(( " rlineto\n" ));
-
- for ( index = 0; index < count; index += 2 )
- {
- curX += cf2_stack_getReal( opStack, index + 0 );
- curY += cf2_stack_getReal( opStack, index + 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 index;
- CF2_UInt count = cf2_stack_count( opStack );
-
- FT_Bool isX = op1 == cf2_cmdHLINETO;
-
-
- FT_TRACE4(( isX ? " hlineto\n" : " vlineto\n" ));
-
- for ( index = 0; index < count; index++ )
- {
- CF2_Fixed v = cf2_stack_getReal( opStack, index );
-
-
- if ( isX )
- curX += v;
- else
- 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 index = 0;
-
-
- FT_TRACE4(( op1 == cf2_cmdRCURVELINE ? " rcurveline\n"
- : " rrcurveto\n" ));
-
- while ( index + 6 <= count )
- {
- CF2_Fixed x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- CF2_Fixed y1 = cf2_stack_getReal( opStack, index + 1 ) + curY;
- CF2_Fixed x2 = cf2_stack_getReal( opStack, index + 2 ) + x1;
- CF2_Fixed y2 = cf2_stack_getReal( opStack, index + 3 ) + y1;
- CF2_Fixed x3 = cf2_stack_getReal( opStack, index + 4 ) + x2;
- CF2_Fixed y3 = cf2_stack_getReal( opStack, index + 5 ) + y2;
-
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 6;
- }
-
- if ( op1 == cf2_cmdRCURVELINE )
- {
- curX += cf2_stack_getReal( opStack, index + 0 );
- curY += cf2_stack_getReal( opStack, index + 1 );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdCALLGSUBR:
- case cf2_cmdCALLSUBR:
- {
- CF2_UInt subrIndex;
-
-
- FT_TRACE4(( op1 == cf2_cmdCALLGSUBR ? " callgsubr"
- : " callsubr" ));
-
- if ( charstringIndex > CF2_MAX_SUBR )
- {
- /* max subr plus one for charstring */
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* overflow of stack */
- }
-
- /* push our current CFF charstring region on subrStack */
- charstring = (CF2_Buffer)
- cf2_arrstack_getPointer(
- &subrStack,
- (size_t)charstringIndex + 1 );
-
- /* set up the new CFF region and pointer */
- subrIndex = (CF2_UInt)cf2_stack_popInt( opStack );
-
- switch ( op1 )
- {
- case cf2_cmdCALLGSUBR:
- FT_TRACE4(( " (idx %d, entering level %d)\n",
- subrIndex + (CF2_UInt)decoder->globals_bias,
- charstringIndex + 1 ));
-
- if ( cf2_initGlobalRegionBuffer( decoder,
- subrIndex,
- 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",
- subrIndex + (CF2_UInt)decoder->locals_bias,
- charstringIndex + 1 ));
-
- if ( cf2_initLocalRegionBuffer( decoder,
- subrIndex,
- 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 );
-
-
- switch ( op2 )
- {
- case cf2_escDOTSECTION:
- /* something about `flip type of locking' -- ignore it */
- FT_TRACE4(( " dotsection\n" ));
-
- break;
-
- /* TODO: should these operators be supported? */
- case cf2_escAND: /* in spec */
- FT_TRACE4(( " and\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escOR: /* in spec */
- FT_TRACE4(( " or\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escNOT: /* in spec */
- FT_TRACE4(( " not\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escABS: /* in spec */
- FT_TRACE4(( " abs\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escADD: /* in spec */
- FT_TRACE4(( " add\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escSUB: /* in spec */
- FT_TRACE4(( " sub\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escDIV: /* in spec */
- FT_TRACE4(( " div\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escNEG: /* in spec */
- FT_TRACE4(( " neg\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escEQ: /* in spec */
- FT_TRACE4(( " eq\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escDROP: /* in spec */
- FT_TRACE4(( " drop\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escPUT: /* in spec */
- FT_TRACE4(( " put\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escGET: /* in spec */
- FT_TRACE4(( " get\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escIFELSE: /* in spec */
- FT_TRACE4(( " ifelse\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escRANDOM: /* in spec */
- FT_TRACE4(( " random\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escMUL: /* in spec */
- FT_TRACE4(( " mul\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escSQRT: /* in spec */
- FT_TRACE4(( " sqrt\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escDUP: /* in spec */
- FT_TRACE4(( " dup\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escEXCH: /* in spec */
- FT_TRACE4(( " exch\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escINDEX: /* in spec */
- FT_TRACE4(( " index\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escROLL: /* in spec */
- FT_TRACE4(( " roll\n" ));
-
- CF2_FIXME;
- break;
-
- 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;
-
- case cf2_escRESERVED_1:
- case cf2_escRESERVED_2:
- case cf2_escRESERVED_6:
- case cf2_escRESERVED_7:
- case cf2_escRESERVED_8:
- case cf2_escRESERVED_13:
- case cf2_escRESERVED_16:
- case cf2_escRESERVED_17:
- case cf2_escRESERVED_19:
- case cf2_escRESERVED_25:
- case cf2_escRESERVED_31:
- case cf2_escRESERVED_32:
- case cf2_escRESERVED_33:
- default:
- FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
-
- }; /* end of switch statement checking `op2' */
-
- } /* case cf2_cmdESC */
- break;
-
- case cf2_cmdENDCHAR:
- FT_TRACE4(( " endchar\n" ));
-
- if ( cf2_stack_count( opStack ) == 1 ||
- cf2_stack_count( opStack ) == 5 )
- {
- if ( !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
- }
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- /* close path if still open */
- cf2_glyphpath_closeOpenPath( &glyphPath );
-
- if ( cf2_stack_count( opStack ) > 1 )
- {
- /* must be either 4 or 5 -- */
- /* this is a (deprecated) implied `seac' operator */
-
- CF2_Int achar;
- CF2_Int bchar;
- CF2_BufferRec component;
- CF2_Fixed dummyWidth; /* ignore component width */
- FT_Error error2;
-
-
- if ( doingSeac )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* nested seac */
- }
-
- achar = cf2_stack_popInt( opStack );
- bchar = cf2_stack_popInt( opStack );
-
- curY = cf2_stack_popFixed( opStack );
- curX = cf2_stack_popFixed( opStack );
-
- error2 = cf2_getSeacComponent( decoder, achar, &component );
- if ( error2 )
- {
- lastError = error2; /* pass FreeType error through */
- goto exit;
- }
- cf2_interpT2CharString( font,
- &component,
- callbacks,
- translation,
- TRUE,
- curX,
- curY,
- &dummyWidth );
- cf2_freeSeacComponent( decoder, &component );
-
- error2 = cf2_getSeacComponent( decoder, bchar, &component );
- if ( error2 )
- {
- lastError = error2; /* pass FreeType error through */
- goto exit;
- }
- cf2_interpT2CharString( font,
- &component,
- callbacks,
- translation,
- TRUE,
- 0,
- 0,
- &dummyWidth );
- cf2_freeSeacComponent( decoder, &component );
- }
- goto exit;
-
- case cf2_cmdCNTRMASK:
- case cf2_cmdHINTMASK:
- /* the final \n in the tracing message gets added in */
- /* `cf2_hintmask_read' (which also traces the mask bytes) */
- FT_TRACE4(( op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_stack_count( opStack ) > 1 &&
- cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString: invalid hint mask\n" ));
- break;
- }
-
- /* if there are arguments on the stack, there this is an */
- /* implied cf2_cmdVSTEMHM */
- cf2_doStems( font,
- opStack,
- &vStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- if ( op1 == cf2_cmdHINTMASK )
- {
- /* consume the hint mask bytes which follow the operator */
- cf2_hintmask_read( &hintMask,
- charstring,
- cf2_arrstack_size( &hStemHintArray ) +
- cf2_arrstack_size( &vStemHintArray ) );
- }
- else
- {
- /*
- * Consume the counter mask bytes which follow the operator:
- * Build a temporary hint map, just to place and lock those
- * stems participating in the counter mask. These are most
- * likely the dominant hstems, and are grouped together in a
- * few counter groups, not necessarily in correspondence
- * with the hint groups. This reduces the chances of
- * conflicts between hstems that are initially placed in
- * separate hint groups and then brought together. The
- * positions are copied back to `hStemHintArray', so we can
- * discard `counterMask' and `counterHintMap'.
- *
- */
- CF2_HintMapRec counterHintMap;
- CF2_HintMaskRec counterMask;
-
-
- cf2_hintmap_init( &counterHintMap,
- font,
- &glyphPath.initialHintMap,
- &glyphPath.hintMoves,
- scaleY );
- cf2_hintmask_init( &counterMask, error );
-
- cf2_hintmask_read( &counterMask,
- charstring,
- cf2_arrstack_size( &hStemHintArray ) +
- cf2_arrstack_size( &vStemHintArray ) );
- cf2_hintmap_build( &counterHintMap,
- &hStemHintArray,
- &vStemHintArray,
- &counterMask,
- 0,
- FALSE );
- }
- break;
-
- case cf2_cmdRMOVETO:
- FT_TRACE4(( " rmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 2 && !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curY += cf2_stack_popFixed( opStack );
- curX += cf2_stack_popFixed( opStack );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdHMOVETO:
- FT_TRACE4(( " hmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curX += cf2_stack_popFixed( opStack );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdRLINECURVE:
- {
- CF2_UInt count = cf2_stack_count( opStack );
- CF2_UInt index = 0;
-
-
- FT_TRACE4(( " rlinecurve\n" ));
-
- while ( index + 6 < count )
- {
- curX += cf2_stack_getReal( opStack, index + 0 );
- curY += cf2_stack_getReal( opStack, index + 1 );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- index += 2;
- }
-
- while ( index < count )
- {
- CF2_Fixed x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- CF2_Fixed y1 = cf2_stack_getReal( opStack, index + 1 ) + curY;
- CF2_Fixed x2 = cf2_stack_getReal( opStack, index + 2 ) + x1;
- CF2_Fixed y2 = cf2_stack_getReal( opStack, index + 3 ) + y1;
- CF2_Fixed x3 = cf2_stack_getReal( opStack, index + 4 ) + x2;
- CF2_Fixed y3 = cf2_stack_getReal( opStack, index + 5 ) + y2;
-
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 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 index = 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;
- index += count1 - count;
-
- FT_TRACE4(( " vvcurveto\n" ));
-
- while ( index < count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- if ( ( count - index ) & 1 )
- {
- x1 = cf2_stack_getReal( opStack, index ) + curX;
-
- ++index;
- }
- else
- x1 = curX;
-
- y1 = cf2_stack_getReal( opStack, index + 0 ) + curY;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- x3 = x2;
- y3 = cf2_stack_getReal( opStack, index + 3 ) + y2;
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 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 index = 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;
- index += count1 - count;
-
- FT_TRACE4(( " hhcurveto\n" ));
-
- while ( index < count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- if ( ( count - index ) & 1 )
- {
- y1 = cf2_stack_getReal( opStack, index ) + curY;
-
- ++index;
- }
- else
- y1 = curY;
-
- x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- x3 = cf2_stack_getReal( opStack, index + 3 ) + x2;
- y3 = y2;
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 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 index = 0;
-
- FT_Bool alternate = 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;
- index += count1 - count;
-
- FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
-
- while ( index < count )
- {
- CF2_Fixed x1, x2, x3, y1, y2, y3;
-
-
- if ( alternate )
- {
- x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- y1 = curY;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- y3 = cf2_stack_getReal( opStack, index + 3 ) + y2;
-
- if ( count - index == 5 )
- {
- x3 = cf2_stack_getReal( opStack, index + 4 ) + x2;
-
- ++index;
- }
- else
- x3 = x2;
-
- alternate = FALSE;
- }
- else
- {
- x1 = curX;
- y1 = cf2_stack_getReal( opStack, index + 0 ) + curY;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- x3 = cf2_stack_getReal( opStack, index + 3 ) + x2;
-
- if ( count - index == 5 )
- {
- y3 = cf2_stack_getReal( opStack, index + 4 ) + y2;
-
- ++index;
- }
- else
- y3 = y2;
-
- alternate = TRUE;
- }
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 4;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdEXTENDEDNMBR:
- {
- CF2_Int v;
-
-
- v = (FT_Short)( ( cf2_buf_readByte( charstring ) << 8 ) |
- cf2_buf_readByte( charstring ) );
-
- 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;
-
-
- v = (CF2_Fixed)
- ( ( (FT_UInt32)cf2_buf_readByte( charstring ) << 24 ) |
- ( (FT_UInt32)cf2_buf_readByte( charstring ) << 16 ) |
- ( (FT_UInt32)cf2_buf_readByte( charstring ) << 8 ) |
- (FT_UInt32)cf2_buf_readByte( charstring ) );
-
- FT_TRACE4(( " %.2f", 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 );
-
- /* free resources from objects we've used */
- cf2_glyphpath_finalize( &glyphPath );
- cf2_arrstack_finalize( &vStemHintArray );
- cf2_arrstack_finalize( &hStemHintArray );
- cf2_arrstack_finalize( &subrStack );
- cf2_stack_free( opStack );
-
- FT_TRACE4(( "\n" ));
-
- return;
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2intrp.h b/src/3rdparty/freetype/src/cff/cf2intrp.h
deleted file mode 100644
index b5d8947838..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2intrp.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2font.h */
-/* */
-/* Adobe's CFF Interpreter (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2INTRP_H__
-#define __CF2INTRP_H__
-
-
-#include "cf2ft.h"
-#include "cf2hints.h"
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( void )
- cf2_hintmask_init( CF2_HintMask hintmask,
- FT_Error* error );
- FT_LOCAL( FT_Bool )
- cf2_hintmask_isValid( const CF2_HintMask hintmask );
- FT_LOCAL( FT_Bool )
- cf2_hintmask_isNew( const CF2_HintMask hintmask );
- FT_LOCAL( void )
- cf2_hintmask_setNew( CF2_HintMask hintmask,
- FT_Bool val );
- FT_LOCAL( FT_Byte* )
- cf2_hintmask_getMaskPtr( CF2_HintMask hintmask );
- FT_LOCAL( void )
- cf2_hintmask_setAll( CF2_HintMask hintmask,
- size_t bitCount );
-
- FT_LOCAL( void )
- cf2_interpT2CharString( CF2_Font font,
- CF2_Buffer charstring,
- CF2_OutlineCallbacks callbacks,
- const FT_Vector* translation,
- FT_Bool doingSeac,
- CF2_Fixed curX,
- CF2_Fixed curY,
- CF2_Fixed* width );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2INTRP_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2read.c b/src/3rdparty/freetype/src/cff/cf2read.c
deleted file mode 100644
index 2b429e3eeb..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2read.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2read.c */
-/* */
-/* Adobe's code for stream handling (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-
-#include "cf2error.h"
-
-
- /* Define CF2_IO_FAIL as 1 to enable random errors and random */
- /* value errors in I/O. */
-#define CF2_IO_FAIL 0
-
-
-#if CF2_IO_FAIL
-
- /* set the .00 value to a nonzero probability */
- static int
- randomError2( void )
- {
- /* for region buffer ReadByte (interp) function */
- return (double)rand() / RAND_MAX < .00;
- }
-
- /* set the .00 value to a nonzero probability */
- static CF2_Int
- randomValue()
- {
- return (double)rand() / RAND_MAX < .00 ? rand() : 0;
- }
-
-#endif /* CF2_IO_FAIL */
-
-
- /* Region Buffer */
- /* */
- /* Can be constructed from a copied buffer managed by */
- /* `FCM_getDatablock'. */
- /* Reads bytes with check for end of buffer. */
-
- /* reading past the end of the buffer sets error and returns zero */
- FT_LOCAL_DEF( CF2_Int )
- cf2_buf_readByte( CF2_Buffer buf )
- {
- if ( buf->ptr < buf->end )
- {
-#if CF2_IO_FAIL
- if ( randomError2() )
- {
- CF2_SET_ERROR( buf->error, Invalid_Stream_Operation );
- return 0;
- }
-
- return *(buf->ptr)++ + randomValue();
-#else
- return *(buf->ptr)++;
-#endif
- }
- else
- {
- CF2_SET_ERROR( buf->error, Invalid_Stream_Operation );
- return 0;
- }
- }
-
-
- /* note: end condition can occur without error */
- FT_LOCAL_DEF( FT_Bool )
- cf2_buf_isEnd( CF2_Buffer buf )
- {
- return (FT_Bool)( buf->ptr >= buf->end );
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2read.h b/src/3rdparty/freetype/src/cff/cf2read.h
deleted file mode 100644
index 7ef7c8c149..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2read.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2read.h */
-/* */
-/* Adobe's code for stream handling (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2READ_H__
-#define __CF2READ_H__
-
-
-FT_BEGIN_HEADER
-
-
- typedef struct CF2_BufferRec_
- {
- FT_Error* error;
- const FT_Byte* start;
- const FT_Byte* end;
- const FT_Byte* ptr;
-
- } CF2_BufferRec, *CF2_Buffer;
-
-
- FT_LOCAL( CF2_Int )
- cf2_buf_readByte( CF2_Buffer buf );
- FT_LOCAL( FT_Bool )
- cf2_buf_isEnd( CF2_Buffer buf );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2READ_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2stack.c b/src/3rdparty/freetype/src/cff/cf2stack.c
deleted file mode 100644
index 8332b5d91a..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2stack.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2stack.c */
-/* */
-/* Adobe's code for emulating a CFF stack (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2stack.h"
-
-#include "cf2error.h"
-
-
- /* Allocate and initialize an instance of CF2_Stack. */
- /* Note: This function returns NULL on error (does not set */
- /* `error'). */
- FT_LOCAL_DEF( CF2_Stack )
- cf2_stack_init( FT_Memory memory,
- FT_Error* e )
- {
- FT_Error error = FT_Err_Ok; /* for FT_QNEW */
-
- CF2_Stack stack = NULL;
-
-
- if ( !FT_QNEW( stack ) )
- {
- /* initialize the structure; FT_QNEW zeroes it */
- stack->memory = memory;
- stack->error = e;
- stack->top = &stack->buffer[0]; /* empty stack */
- }
-
- return stack;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_free( CF2_Stack stack )
- {
- if ( stack )
- {
- FT_Memory memory = stack->memory;
-
-
- /* 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[0] );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_pushInt( CF2_Stack stack,
- CF2_Int val )
- {
- if ( stack->top == &stack->buffer[CF2_OPERAND_STACK_SIZE] )
- {
- 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[CF2_OPERAND_STACK_SIZE] )
- {
- 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[0] )
- {
- 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[0] )
- {
- 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 ) <= CF2_OPERAND_STACK_SIZE );
-
- 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;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_clear( CF2_Stack stack )
- {
- stack->top = &stack->buffer[0];
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2stack.h b/src/3rdparty/freetype/src/cff/cf2stack.h
deleted file mode 100644
index 7d6d1961fe..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2stack.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2stack.h */
-/* */
-/* Adobe's code for emulating a CFF stack (specification). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2STACK_H__
-#define __CF2STACK_H__
-
-
-FT_BEGIN_HEADER
-
-
- /* CFF operand stack; specified maximum of 48 or 192 values */
- typedef struct CF2_StackNumber_
- {
- union
- {
- CF2_Fixed r; /* 16.16 fixed point */
- CF2_Frac f; /* 2.30 fixed point (for font matrix) */
- CF2_Int i;
- } u;
-
- CF2_NumberType type;
-
- } CF2_StackNumber;
-
-
- typedef struct CF2_StackRec_
- {
- FT_Memory memory;
- FT_Error* error;
- CF2_StackNumber buffer[CF2_OPERAND_STACK_SIZE];
- CF2_StackNumber* top;
-
- } CF2_StackRec, *CF2_Stack;
-
-
- FT_LOCAL( CF2_Stack )
- cf2_stack_init( FT_Memory memory,
- FT_Error* error );
- 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_clear( CF2_Stack stack );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2STACK_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cf2types.h b/src/3rdparty/freetype/src/cff/cf2types.h
deleted file mode 100644
index ac6a02266e..0000000000
--- a/src/3rdparty/freetype/src/cff/cf2types.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2types.h */
-/* */
-/* Adobe's code for defining data types (specification only). */
-/* */
-/* Copyright 2011-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2TYPES_H__
-#define __CF2TYPES_H__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * The data models that we expect to support are as follows:
- *
- * name char short int long long-long pointer example
- * -----------------------------------------------------
- * ILP32 8 16 32 32 64* 32 32-bit MacOS, x86
- * LLP64 8 16 32 32 64 64 x64
- * LP64 8 16 32 64 64 64 64-bit MacOS
- *
- * *) type may be supported by emulation on a 32-bit architecture
- *
- */
-
-
- /* integers at least 32 bits wide */
-#define CF2_UInt FT_UFast
-#define CF2_Int FT_Fast
-
-
- /* fixed-float numbers */
- typedef FT_Int32 CF2_F16Dot16;
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2TYPES_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cff.c b/src/3rdparty/freetype/src/cff/cff.c
index a34ba9b710..0fa6c87870 100644
--- a/src/3rdparty/freetype/src/cff/cff.c
+++ b/src/3rdparty/freetype/src/cff/cff.c
@@ -4,7 +4,7 @@
*
* FreeType OpenType driver component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "cffcmap.c"
#include "cffdrivr.c"
diff --git a/src/3rdparty/freetype/src/cff/cffcmap.c b/src/3rdparty/freetype/src/cff/cffcmap.c
index 15cc94cafb..6d16ed4226 100644
--- a/src/3rdparty/freetype/src/cff/cffcmap.c
+++ b/src/3rdparty/freetype/src/cff/cffcmap.c
@@ -4,7 +4,7 @@
*
* CFF character mapping table (cmap) support (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,8 +16,7 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "cffcmap.h"
#include "cffload.h"
diff --git a/src/3rdparty/freetype/src/cff/cffcmap.h b/src/3rdparty/freetype/src/cff/cffcmap.h
index 07366bc748..69fab8dc6c 100644
--- a/src/3rdparty/freetype/src/cff/cffcmap.h
+++ b/src/3rdparty/freetype/src/cff/cffcmap.h
@@ -4,7 +4,7 @@
*
* CFF character mapping table (cmap) support (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#ifndef CFFCMAP_H_
#define CFFCMAP_H_
-#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
+#include <freetype/internal/cffotypes.h>
FT_BEGIN_HEADER
@@ -43,7 +43,7 @@ FT_BEGIN_HEADER
} CFF_CMapStdRec;
- FT_DECLARE_CMAP_CLASS(cff_cmap_encoding_class_rec)
+ FT_DECLARE_CMAP_CLASS( cff_cmap_encoding_class_rec )
/*************************************************************************/
@@ -56,7 +56,7 @@ FT_BEGIN_HEADER
/* unicode (synthetic) cmaps */
- FT_DECLARE_CMAP_CLASS(cff_cmap_unicode_class_rec)
+ FT_DECLARE_CMAP_CLASS( cff_cmap_unicode_class_rec )
FT_END_HEADER
diff --git a/src/3rdparty/freetype/src/cff/cffdrivr.c b/src/3rdparty/freetype/src/cff/cffdrivr.c
index 2324989811..486ab24235 100644
--- a/src/3rdparty/freetype/src/cff/cffdrivr.c
+++ b/src/3rdparty/freetype/src/cff/cffdrivr.c
@@ -4,7 +4,7 @@
*
* OpenType font driver implementation (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,18 +16,17 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_POSTSCRIPT_PROPS_H
-#include FT_SERVICE_CID_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_TT_CMAP_H
-#include FT_SERVICE_CFF_TABLE_LOAD_H
+#include <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"
@@ -37,16 +36,16 @@
#include "cffobjs.h"
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
+#include <freetype/internal/services/svmm.h>
+#include <freetype/internal/services/svmetric.h>
#endif
#include "cfferrs.h"
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_DRIVER_H
+#include <freetype/internal/services/svfntfmt.h>
+#include <freetype/internal/services/svgldict.h>
+#include <freetype/internal/services/svprop.h>
+#include <freetype/ftdriver.h>
/**************************************************************************
@@ -738,7 +737,7 @@
{
if ( dict->cid_supplement < FT_INT_MIN ||
dict->cid_supplement > FT_INT_MAX )
- FT_TRACE1(( "cff_get_ros: too large supplement %d is truncated\n",
+ FT_TRACE1(( "cff_get_ros: too large supplement %ld is truncated\n",
dict->cid_supplement ));
*supplement = (FT_Int)dict->cid_supplement;
}
diff --git a/src/3rdparty/freetype/src/cff/cffdrivr.h b/src/3rdparty/freetype/src/cff/cffdrivr.h
index f2bbcfe4f1..d198dd35cb 100644
--- a/src/3rdparty/freetype/src/cff/cffdrivr.h
+++ b/src/3rdparty/freetype/src/cff/cffdrivr.h
@@ -4,7 +4,7 @@
*
* High-level OpenType driver interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define CFFDRIVER_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cff/cfferrs.h b/src/3rdparty/freetype/src/cff/cfferrs.h
index 78d47a156d..5b00a3f0a2 100644
--- a/src/3rdparty/freetype/src/cff/cfferrs.h
+++ b/src/3rdparty/freetype/src/cff/cfferrs.h
@@ -4,7 +4,7 @@
*
* CFF error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
#ifndef CFFERRS_H_
#define CFFERRS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_BASE FT_Mod_Err_CFF
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* CFFERRS_H_ */
diff --git a/src/3rdparty/freetype/src/cff/cffgload.c b/src/3rdparty/freetype/src/cff/cffgload.c
index 36aa7d1b9c..feee38a413 100644
--- a/src/3rdparty/freetype/src/cff/cffgload.c
+++ b/src/3rdparty/freetype/src/cff/cffgload.c
@@ -4,7 +4,7 @@
*
* OpenType Glyph Loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,14 +16,13 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_OUTLINE_H
-#include FT_DRIVER_H
+#include <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"
@@ -207,8 +206,8 @@
PSAux_Service psaux = (PSAux_Service)face->psaux;
const CFF_Decoder_Funcs decoder_funcs = psaux->cff_decoder_funcs;
- FT_Matrix font_matrix;
- FT_Vector font_offset;
+ FT_Matrix font_matrix;
+ FT_Vector font_offset;
force_scaling = FALSE;
@@ -364,7 +363,6 @@
top_upm = (FT_Long)cff->top_font.font_dict.units_per_em;
sub_upm = (FT_Long)cff->subfonts[fd_index]->font_dict.units_per_em;
-
font_matrix = cff->subfonts[fd_index]->font_dict.font_matrix;
font_offset = cff->subfonts[fd_index]->font_dict.font_offset;
@@ -399,7 +397,6 @@
PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face );
#endif
-
FT_Byte* charstring;
FT_ULong charstring_len;
@@ -665,8 +662,12 @@
metrics->horiBearingY = cbox.yMax;
if ( has_vertical_info )
+ {
metrics->vertBearingX = metrics->horiBearingX -
metrics->horiAdvance / 2;
+ metrics->vertBearingY = FT_MulFix( metrics->vertBearingY,
+ glyph->y_scale );
+ }
else
{
if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
diff --git a/src/3rdparty/freetype/src/cff/cffgload.h b/src/3rdparty/freetype/src/cff/cffgload.h
index 754c55acf9..3b312f452e 100644
--- a/src/3rdparty/freetype/src/cff/cffgload.h
+++ b/src/3rdparty/freetype/src/cff/cffgload.h
@@ -4,7 +4,7 @@
*
* OpenType Glyph Loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define CFFGLOAD_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
+#include <freetype/freetype.h>
+#include <freetype/internal/cffotypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cff/cffload.c b/src/3rdparty/freetype/src/cff/cffload.c
index 12efd18dc4..73d3eecd31 100644
--- a/src/3rdparty/freetype/src/cff/cffload.c
+++ b/src/3rdparty/freetype/src/cff/cffload.c
@@ -4,7 +4,7 @@
*
* OpenType and CFF data/program tables loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,17 +16,16 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#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 FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/services/svmm.h>
#endif
#include "cffload.h"
@@ -411,7 +410,7 @@
FT_Error error = FT_Err_Ok;
FT_Memory memory = idx->stream->memory;
- FT_Byte** t = NULL;
+ FT_Byte** tbl = NULL;
FT_Byte* new_bytes = NULL;
FT_ULong new_size;
@@ -428,11 +427,11 @@
new_size = idx->data_size + idx->count;
if ( idx->count > 0 &&
- !FT_NEW_ARRAY( t, idx->count + 1 ) &&
+ !FT_NEW_ARRAY( tbl, idx->count + 1 ) &&
( !pool || !FT_ALLOC( new_bytes, new_size ) ) )
{
FT_ULong n, cur_offset;
- FT_ULong extra = 0;
+ FT_ULong extra = 0;
FT_Byte* org_bytes = idx->bytes;
@@ -443,15 +442,15 @@
if ( cur_offset != 0 )
{
FT_TRACE0(( "cff_index_get_pointers:"
- " invalid first offset value %d set to zero\n",
+ " invalid first offset value %ld set to zero\n",
cur_offset ));
cur_offset = 0;
}
if ( !pool )
- t[0] = org_bytes + cur_offset;
+ tbl[0] = org_bytes + cur_offset;
else
- t[0] = new_bytes + cur_offset;
+ tbl[0] = new_bytes + cur_offset;
for ( n = 1; n <= idx->count; n++ )
{
@@ -465,23 +464,25 @@
next_offset = idx->data_size;
if ( !pool )
- t[n] = org_bytes + next_offset;
+ tbl[n] = org_bytes + next_offset;
else
{
- t[n] = new_bytes + next_offset + extra;
+ tbl[n] = new_bytes + next_offset + extra;
if ( next_offset != cur_offset )
{
- FT_MEM_COPY( t[n - 1], org_bytes + cur_offset, t[n] - t[n - 1] );
- t[n][0] = '\0';
- t[n] += 1;
+ FT_MEM_COPY( tbl[n - 1],
+ org_bytes + cur_offset,
+ tbl[n] - tbl[n - 1] );
+ tbl[n][0] = '\0';
+ tbl[n] += 1;
extra++;
}
}
cur_offset = next_offset;
}
- *table = t;
+ *table = tbl;
if ( pool )
*pool = new_bytes;
@@ -490,6 +491,11 @@
}
Exit:
+ if ( error && new_bytes )
+ FT_FREE( new_bytes );
+ if ( error && tbl )
+ FT_FREE( tbl );
+
return error;
}
@@ -553,8 +559,8 @@
idx->data_offset > stream->size - off2 + 1 )
{
FT_ERROR(( "cff_index_access_element:"
- " offset to next entry (%d)"
- " exceeds the end of stream (%d)\n",
+ " offset to next entry (%ld)"
+ " exceeds the end of stream (%ld)\n",
off2, stream->size - idx->data_offset + 1 ));
off2 = stream->size - idx->data_offset + 1;
}
@@ -978,7 +984,7 @@
if ( glyph_sid > 0xFFFFL - nleft )
{
FT_ERROR(( "cff_charset_load: invalid SID range trimmed"
- " nleft=%d -> %d\n", nleft, 0xFFFFL - glyph_sid ));
+ " nleft=%d -> %ld\n", nleft, 0xFFFFL - glyph_sid ));
nleft = ( FT_UInt )( 0xFFFFL - glyph_sid );
}
@@ -1945,7 +1951,7 @@
if ( priv->blue_shift > 1000 || priv->blue_shift < 0 )
{
FT_TRACE2(( "cff_load_private_dict:"
- " setting unlikely BlueShift value %d to default (7)\n",
+ " setting unlikely BlueShift value %ld to default (7)\n",
priv->blue_shift ));
priv->blue_shift = 7;
}
@@ -1953,7 +1959,7 @@
if ( priv->blue_fuzz > 1000 || priv->blue_fuzz < 0 )
{
FT_TRACE2(( "cff_load_private_dict:"
- " setting unlikely BlueFuzz value %d to default (1)\n",
+ " setting unlikely BlueFuzz value %ld to default (1)\n",
priv->blue_fuzz ));
priv->blue_fuzz = 1;
}
@@ -2057,7 +2063,7 @@
if ( !error )
{
FT_TRACE4(( " top dictionary:\n" ));
- error = cff_parser_run( &parser, dict, dict + dict_len );
+ error = cff_parser_run( &parser, dict, FT_OFFSET( dict, dict_len ) );
}
/* clean up regardless of error */
diff --git a/src/3rdparty/freetype/src/cff/cffload.h b/src/3rdparty/freetype/src/cff/cffload.h
index 42d2696f33..fc998db2db 100644
--- a/src/3rdparty/freetype/src/cff/cffload.h
+++ b/src/3rdparty/freetype/src/cff/cffload.h
@@ -4,7 +4,7 @@
*
* OpenType & CFF data/program tables loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,10 +20,9 @@
#define CFFLOAD_H_
-#include <ft2build.h>
-#include FT_INTERNAL_CFF_TYPES_H
+#include <freetype/internal/cfftypes.h>
#include "cffparse.h"
-#include FT_INTERNAL_CFF_OBJECTS_TYPES_H /* for CFF_Face */
+#include <freetype/internal/cffotypes.h> /* for CFF_Face */
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cff/cffobjs.c b/src/3rdparty/freetype/src/cff/cffobjs.c
index f76245f30b..d555d52358 100644
--- a/src/3rdparty/freetype/src/cff/cffobjs.c
+++ b/src/3rdparty/freetype/src/cff/cffobjs.c
@@ -4,7 +4,7 @@
*
* OpenType objects manager (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,32 +16,31 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_STREAM_H
-#include FT_ERRORS_H
-#include FT_TRUETYPE_IDS_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_SFNT_H
-#include FT_DRIVER_H
+#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 FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/services/svmm.h>
+#include <freetype/internal/services/svmetric.h>
#endif
-#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
+#include <freetype/internal/cffotypes.h>
#include "cffobjs.h"
#include "cffload.h"
#include "cffcmap.h"
#include "cfferrs.h"
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_SERVICE_CFF_TABLE_LOAD_H
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/services/svcfftl.h>
/**************************************************************************
@@ -167,46 +166,56 @@
FT_Error error = FT_Err_Ok;
PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size );
+ FT_Memory memory = cffsize->face->memory;
+ CFF_Internal internal = NULL;
+ CFF_Face face = (CFF_Face)cffsize->face;
+ CFF_Font font = (CFF_Font)face->extra.data;
- if ( funcs )
- {
- CFF_Face face = (CFF_Face)cffsize->face;
- CFF_Font font = (CFF_Font)face->extra.data;
- CFF_Internal internal = NULL;
+ PS_PrivateRec priv;
- PS_PrivateRec priv;
- FT_Memory memory = cffsize->face->memory;
+ FT_UInt i;
- FT_UInt i;
+ if ( !funcs )
+ goto Exit;
+
+ if ( FT_NEW( internal ) )
+ goto Exit;
+ cff_make_private_dict( &font->top_font, &priv );
+ error = funcs->create( cffsize->face->memory, &priv,
+ &internal->topfont );
+ if ( error )
+ goto Exit;
+
+ for ( i = font->num_subfonts; i > 0; i-- )
+ {
+ CFF_SubFont sub = font->subfonts[i - 1];
- if ( FT_NEW( internal ) )
- goto Exit;
- cff_make_private_dict( &font->top_font, &priv );
+ cff_make_private_dict( sub, &priv );
error = funcs->create( cffsize->face->memory, &priv,
- &internal->topfont );
+ &internal->subfonts[i - 1] );
if ( error )
goto Exit;
+ }
- for ( i = font->num_subfonts; i > 0; i-- )
- {
- CFF_SubFont sub = font->subfonts[i - 1];
+ cffsize->internal->module_data = internal;
+ size->strike_index = 0xFFFFFFFFUL;
- cff_make_private_dict( sub, &priv );
- error = funcs->create( cffsize->face->memory, &priv,
- &internal->subfonts[i - 1] );
- if ( error )
- goto Exit;
+ Exit:
+ if ( error )
+ {
+ if ( internal )
+ {
+ for ( i = font->num_subfonts; i > 0; i-- )
+ FT_FREE( internal->subfonts[i - 1] );
+ FT_FREE( internal->topfont );
}
- cffsize->internal->module_data = internal;
+ FT_FREE( internal );
}
- size->strike_index = 0xFFFFFFFFUL;
-
- Exit:
return error;
}
@@ -349,7 +358,8 @@
FT_LOCAL_DEF( void )
cff_slot_done( FT_GlyphSlot slot )
{
- slot->internal->glyph_hints = NULL;
+ if ( slot->internal )
+ slot->internal->glyph_hints = NULL;
}
@@ -940,7 +950,8 @@
style_name = cff_strcpy( memory, fullp );
/* remove the style part from the family name (if present) */
- remove_style( cffface->family_name, style_name );
+ if ( style_name )
+ remove_style( cffface->family_name, style_name );
}
break;
}
@@ -1018,9 +1029,9 @@
}
#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
- /* CID-keyed CFF fonts don't have glyph names -- the SFNT loader */
- /* has unset this flag because of the 3.0 `post' table. */
- if ( dict->cid_registry == 0xFFFFU )
+ /* CID-keyed CFF or CFF2 fonts don't have glyph names -- the SFNT */
+ /* loader has unset this flag because of the 3.0 `post' table. */
+ if ( dict->cid_registry == 0xFFFFU && !cff2 )
cffface->face_flags |= FT_FACE_FLAG_GLYPH_NAMES;
#endif
diff --git a/src/3rdparty/freetype/src/cff/cffobjs.h b/src/3rdparty/freetype/src/cff/cffobjs.h
index 03bc78a67f..845bd90941 100644
--- a/src/3rdparty/freetype/src/cff/cffobjs.h
+++ b/src/3rdparty/freetype/src/cff/cffobjs.h
@@ -4,7 +4,7 @@
*
* OpenType objects manager (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define CFFOBJS_H_
-#include <ft2build.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cff/cffparse.c b/src/3rdparty/freetype/src/cff/cffparse.c
index 008752c3ae..69bcd5d957 100644
--- a/src/3rdparty/freetype/src/cff/cffparse.c
+++ b/src/3rdparty/freetype/src/cff/cffparse.c
@@ -4,7 +4,7 @@
*
* CFF token stream parser (body)
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,13 +16,12 @@
*/
-#include <ft2build.h>
#include "cffparse.h"
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_LIST_H
+#include <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"
@@ -714,7 +713,7 @@
( max_scaling - min_scaling ) > 9 )
{
FT_TRACE1(( "cff_parse_font_matrix:"
- " strange scaling values (minimum %d, maximum %d),\n"
+ " strange scaling values (minimum %ld, maximum %ld),\n"
" "
" using default matrix\n", min_scaling, max_scaling ));
goto Unlikely;
@@ -811,7 +810,7 @@
bbox->yMax = FT_RoundFix( cff_parse_fixed( parser, data ) );
error = FT_Err_Ok;
- FT_TRACE4(( " [%d %d %d %d]\n",
+ FT_TRACE4(( " [%ld %ld %ld %ld]\n",
bbox->xMin / 65536,
bbox->yMin / 65536,
bbox->xMax / 65536,
@@ -934,11 +933,11 @@
FT_TRACE1(( "cff_parse_cid_ros: real supplement is rounded\n" ));
dict->cid_supplement = cff_parse_num( parser, data );
if ( dict->cid_supplement < 0 )
- FT_TRACE1(( "cff_parse_cid_ros: negative supplement %d is found\n",
+ FT_TRACE1(( "cff_parse_cid_ros: negative supplement %ld is found\n",
dict->cid_supplement ));
error = FT_Err_Ok;
- FT_TRACE4(( " %d %d %d\n",
+ FT_TRACE4(( " %d %d %ld\n",
dict->cid_registry,
dict->cid_ordering,
dict->cid_supplement ));
@@ -1264,11 +1263,11 @@
FT_Byte* charstring_base;
FT_ULong charstring_len;
- FT_Fixed* stack;
- FT_ListNode node;
- CFF_T2_String t2;
- size_t t2_size;
- FT_Byte* q;
+ FT_Fixed* stack;
+ FT_ListNode node;
+ CFF_T2_String t2;
+ FT_Fixed t2_size;
+ FT_Byte* q;
charstring_base = ++p;
diff --git a/src/3rdparty/freetype/src/cff/cffparse.h b/src/3rdparty/freetype/src/cff/cffparse.h
index 4e74709a2d..6f3fbb37d6 100644
--- a/src/3rdparty/freetype/src/cff/cffparse.h
+++ b/src/3rdparty/freetype/src/cff/cffparse.h
@@ -4,7 +4,7 @@
*
* CFF token stream parser (specification)
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define CFFPARSE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_CFF_TYPES_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/cfftypes.h>
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cff/cffpic.c b/src/3rdparty/freetype/src/cff/cffpic.c
deleted file mode 100644
index 08b74c7cf2..0000000000
--- a/src/3rdparty/freetype/src/cff/cffpic.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffpic.c */
-/* */
-/* The FreeType position independent code services for cff module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "cffcmap.h"
-#include "cffpic.h"
-#include "cfferrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from cffdrivr.c */
- FT_Error
- FT_Create_Class_cff_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_cff_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_cff_service_ps_info( FT_Library library,
- FT_Service_PsInfoRec* clazz );
- void
- FT_Init_Class_cff_service_glyph_dict( FT_Library library,
- FT_Service_GlyphDictRec* clazz );
- void
- FT_Init_Class_cff_service_ps_name( FT_Library library,
- FT_Service_PsFontNameRec* clazz );
- void
- FT_Init_Class_cff_service_get_cmap_info( FT_Library library,
- FT_Service_TTCMapsRec* clazz );
- void
- FT_Init_Class_cff_service_cid_info( FT_Library library,
- FT_Service_CIDRec* clazz );
-
- /* forward declaration of PIC init functions from cffparse.c */
- FT_Error
- FT_Create_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler** output_class );
- void
- FT_Destroy_Class_cff_field_handlers( FT_Library library,
- CFF_Field_Handler* clazz );
-
-
- void
- cff_driver_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->cff )
- {
- CffModulePIC* container = (CffModulePIC*)pic_container->cff;
-
-
- if ( container->cff_services )
- FT_Destroy_Class_cff_services( library,
- container->cff_services );
- container->cff_services = NULL;
- if ( container->cff_field_handlers )
- FT_Destroy_Class_cff_field_handlers(
- library, container->cff_field_handlers );
- container->cff_field_handlers = NULL;
- FT_FREE( container );
- pic_container->cff = NULL;
- }
- }
-
-
- FT_Error
- cff_driver_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- CffModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC ( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->cff = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_cff_services( library,
- &container->cff_services );
- if ( error )
- goto Exit;
-
- error = FT_Create_Class_cff_field_handlers(
- library, &container->cff_field_handlers );
- if ( error )
- goto Exit;
-
- FT_Init_Class_cff_service_ps_info(
- library, &container->cff_service_ps_info );
- FT_Init_Class_cff_service_glyph_dict(
- library, &container->cff_service_glyph_dict );
- FT_Init_Class_cff_service_ps_name(
- library, &container->cff_service_ps_name );
- FT_Init_Class_cff_service_get_cmap_info(
- library, &container->cff_service_get_cmap_info );
- FT_Init_Class_cff_service_cid_info(
- library, &container->cff_service_cid_info );
- FT_Init_Class_cff_cmap_encoding_class_rec(
- library, &container->cff_cmap_encoding_class_rec );
- FT_Init_Class_cff_cmap_unicode_class_rec(
- library, &container->cff_cmap_unicode_class_rec );
-
- Exit:
- if ( error )
- cff_driver_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cffpic.h b/src/3rdparty/freetype/src/cff/cffpic.h
deleted file mode 100644
index 8ba4203a8d..0000000000
--- a/src/3rdparty/freetype/src/cff/cffpic.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************/
-/* */
-/* cffpic.h */
-/* */
-/* The FreeType position independent code services for cff module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef CFFPIC_H_
-#define CFFPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define CFF_SERVICE_PS_INFO_GET cff_service_ps_info
-#define CFF_SERVICE_GLYPH_DICT_GET cff_service_glyph_dict
-#define CFF_SERVICE_PS_NAME_GET cff_service_ps_name
-#define CFF_SERVICE_GET_CMAP_INFO_GET cff_service_get_cmap_info
-#define CFF_SERVICE_CID_INFO_GET cff_service_cid_info
-#define CFF_SERVICE_PROPERTIES_GET cff_service_properties
-#define CFF_SERVICES_GET cff_services
-#define CFF_SERVICE_MULTI_MASTERS_GET cff_service_multi_masters
-#define CFF_SERVICE_METRICS_VAR_GET cff_service_metrics_variations
-#define CFF_SERVICE_CFF_LOAD_GET cff_service_cff_load
-#define CFF_CMAP_ENCODING_CLASS_REC_GET cff_cmap_encoding_class_rec
-#define CFF_CMAP_UNICODE_CLASS_REC_GET cff_cmap_unicode_class_rec
-#define CFF_FIELD_HANDLERS_GET cff_field_handlers
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_SERVICE_GLYPH_DICT_H
-#include "cffparse.h"
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_TT_CMAP_H
-#include FT_SERVICE_CID_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct CffModulePIC_
- {
- FT_ServiceDescRec* cff_services;
- CFF_Field_Handler* cff_field_handlers;
- FT_Service_PsInfoRec cff_service_ps_info;
- FT_Service_GlyphDictRec cff_service_glyph_dict;
- FT_Service_PsFontNameRec cff_service_ps_name;
- FT_Service_TTCMapsRec cff_service_get_cmap_info;
- FT_Service_CIDRec cff_service_cid_info;
- FT_Service_PropertiesRec cff_service_properties;
- FT_Service_MultiMastersRec cff_service_multi_masters;
- FT_Service_MetricsVariationsRec cff_service_metrics_variations;
- FT_Service_CFFLoadRec cff_service_cff_load;
- FT_CMap_ClassRec cff_cmap_encoding_class_rec;
- FT_CMap_ClassRec cff_cmap_unicode_class_rec;
-
- } CffModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (CffModulePIC*)( (lib)->pic_container.cff ) )
-
-#define CFF_SERVICE_PS_INFO_GET \
- ( GET_PIC( library )->cff_service_ps_info )
-#define CFF_SERVICE_GLYPH_DICT_GET \
- ( GET_PIC( library )->cff_service_glyph_dict )
-#define CFF_SERVICE_PS_NAME_GET \
- ( GET_PIC( library )->cff_service_ps_name )
-#define CFF_SERVICE_GET_CMAP_INFO_GET \
- ( GET_PIC( library )->cff_service_get_cmap_info )
-#define CFF_SERVICE_CID_INFO_GET \
- ( GET_PIC( library )->cff_service_cid_info )
-#define CFF_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->cff_service_properties )
-#define CFF_SERVICES_GET \
- ( GET_PIC( library )->cff_services )
-#define CFF_SERVICE_MULTI_MASTERS_GET \
- ( GET_PIC( library )->cff_service_multi_masters )
-#define CFF_SERVICE_METRICS_VAR_GET \
- ( GET_PIC( library )->cff_service_metrics_variations )
-#define CFF_SERVICE_CFF_LOAD_GET \
- ( GET_PIC( library )->cff_service_cff_load )
-#define CFF_CMAP_ENCODING_CLASS_REC_GET \
- ( GET_PIC( library )->cff_cmap_encoding_class_rec )
-#define CFF_CMAP_UNICODE_CLASS_REC_GET \
- ( GET_PIC( library )->cff_cmap_unicode_class_rec )
-#define CFF_FIELD_HANDLERS_GET \
- ( GET_PIC( library )->cff_field_handlers )
-
- /* see cffpic.c for the implementation */
- void
- cff_driver_class_pic_free( FT_Library library );
-
- FT_Error
- cff_driver_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* CFFPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/cfftoken.h b/src/3rdparty/freetype/src/cff/cfftoken.h
index 063a7b3be0..4c6a53eec1 100644
--- a/src/3rdparty/freetype/src/cff/cfftoken.h
+++ b/src/3rdparty/freetype/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
*
* CFF token definitions (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cfftypes.h b/src/3rdparty/freetype/src/cff/cfftypes.h
deleted file mode 100644
index de8a5ee9b4..0000000000
--- a/src/3rdparty/freetype/src/cff/cfftypes.h
+++ /dev/null
@@ -1,284 +0,0 @@
-/***************************************************************************/
-/* */
-/* cfftypes.h */
-/* */
-/* Basic OpenType/CFF type definitions and interface (specification */
-/* only). */
-/* */
-/* Copyright 1996-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CFFTYPES_H__
-#define __CFFTYPES_H__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* CFF_IndexRec */
- /* */
- /* <Description> */
- /* A structure used to model a CFF Index table. */
- /* */
- /* <Fields> */
- /* stream :: The source input stream. */
- /* */
- /* start :: The position of the first index byte in the */
- /* input stream. */
- /* */
- /* count :: The number of elements in the index. */
- /* */
- /* off_size :: The size in bytes of object offsets in index. */
- /* */
- /* data_offset :: The position of first data byte in the index's */
- /* bytes. */
- /* */
- /* data_size :: The size of the data table in this index. */
- /* */
- /* offsets :: A table of element offsets in the index. Must be */
- /* loaded explicitly. */
- /* */
- /* bytes :: If the index is loaded in memory, its bytes. */
- /* */
- typedef struct CFF_IndexRec_
- {
- FT_Stream stream;
- FT_ULong start;
- FT_UInt count;
- FT_Byte off_size;
- FT_ULong data_offset;
- FT_ULong data_size;
-
- FT_ULong* offsets;
- FT_Byte* bytes;
-
- } CFF_IndexRec, *CFF_Index;
-
-
- typedef struct CFF_EncodingRec_
- {
- FT_UInt format;
- FT_ULong offset;
-
- FT_UInt count;
- FT_UShort sids [256]; /* avoid dynamic allocations */
- FT_UShort codes[256];
-
- } CFF_EncodingRec, *CFF_Encoding;
-
-
- typedef struct CFF_CharsetRec_
- {
-
- FT_UInt format;
- FT_ULong offset;
-
- FT_UShort* sids;
- FT_UShort* cids; /* the inverse mapping of `sids'; only needed */
- /* for CID-keyed fonts */
- FT_UInt max_cid;
- FT_UInt num_glyphs;
-
- } CFF_CharsetRec, *CFF_Charset;
-
-
- typedef struct CFF_FontRecDictRec_
- {
- FT_UInt version;
- FT_UInt notice;
- FT_UInt copyright;
- FT_UInt full_name;
- FT_UInt family_name;
- FT_UInt weight;
- FT_Bool is_fixed_pitch;
- FT_Fixed italic_angle;
- FT_Fixed underline_position;
- FT_Fixed underline_thickness;
- FT_Int paint_type;
- FT_Int charstring_type;
- FT_Matrix font_matrix;
- FT_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;
-
- } CFF_FontRecDictRec, *CFF_FontRecDict;
-
-
- typedef struct CFF_PrivateRec_
- {
- FT_Byte num_blue_values;
- FT_Byte num_other_blues;
- FT_Byte num_family_blues;
- FT_Byte num_family_other_blues;
-
- FT_Pos blue_values[14];
- FT_Pos other_blues[10];
- FT_Pos family_blues[14];
- FT_Pos family_other_blues[10];
-
- FT_Fixed blue_scale;
- FT_Pos blue_shift;
- FT_Pos blue_fuzz;
- FT_Pos standard_width;
- FT_Pos standard_height;
-
- FT_Byte num_snap_widths;
- FT_Byte num_snap_heights;
- FT_Pos snap_widths[13];
- FT_Pos snap_heights[13];
- FT_Bool force_bold;
- FT_Fixed force_bold_threshold;
- FT_Int lenIV;
- FT_Int language_group;
- FT_Fixed expansion_factor;
- FT_Long initial_random_seed;
- FT_ULong local_subrs_offset;
- FT_Pos default_width;
- FT_Pos nominal_width;
-
- } CFF_PrivateRec, *CFF_Private;
-
-
- typedef struct CFF_FDSelectRec_
- {
- FT_Byte format;
- FT_UInt range_count;
-
- /* that's the table, taken from the file `as is' */
- FT_Byte* data;
- FT_UInt data_size;
-
- /* small cache for format 3 only */
- FT_UInt cache_first;
- FT_UInt cache_count;
- FT_Byte cache_fd;
-
- } CFF_FDSelectRec, *CFF_FDSelect;
-
-
- /* A SubFont packs a font dict and a private dict together. They are */
- /* needed to support CID-keyed CFF fonts. */
- typedef struct CFF_SubFontRec_
- {
- CFF_FontRecDictRec font_dict;
- CFF_PrivateRec private_dict;
-
- CFF_IndexRec local_subrs_index;
- FT_Byte** local_subrs; /* array of pointers into Local Subrs INDEX data */
-
- } CFF_SubFontRec, *CFF_SubFont;
-
-
-#define CFF_MAX_CID_FONTS 256
-
-
- typedef struct CFF_FontRec_
- {
- FT_Stream stream;
- FT_Memory memory;
- FT_UInt num_faces;
- FT_UInt num_glyphs;
-
- FT_Byte version_major;
- FT_Byte version_minor;
- FT_Byte header_size;
- FT_Byte absolute_offsize;
-
-
- CFF_IndexRec name_index;
- CFF_IndexRec top_dict_index;
- CFF_IndexRec 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;
-
- CFF_SubFontRec top_font;
- FT_UInt num_subfonts;
- CFF_SubFont subfonts[CFF_MAX_CID_FONTS];
-
- CFF_FDSelectRec fd_select;
-
- /* interface to PostScript hinter */
- PSHinter_Service pshinter;
-
- /* interface to Postscript Names service */
- FT_Service_PsCMaps psnames;
-
- /* since version 2.3.0 */
- PS_FontInfoRec* font_info; /* font info dictionary */
-
- /* since version 2.3.6 */
- FT_String* registry;
- FT_String* ordering;
-
- /* since version 2.4.12 */
- FT_Generic cf2_instance;
-
- } CFF_FontRec, *CFF_Font;
-
-
-FT_END_HEADER
-
-#endif /* __CFFTYPES_H__ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/cff/module.mk b/src/3rdparty/freetype/src/cff/module.mk
index 8c610959d3..bd728c6a34 100644
--- a/src/3rdparty/freetype/src/cff/module.mk
+++ b/src/3rdparty/freetype/src/cff/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cff/rules.mk b/src/3rdparty/freetype/src/cff/rules.mk
index 6e2dc476ef..70bb92d506 100644
--- a/src/3rdparty/freetype/src/cff/rules.mk
+++ b/src/3rdparty/freetype/src/cff/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cid/Jamfile b/src/3rdparty/freetype/src/cid/Jamfile
deleted file mode 100644
index 1cfb702574..0000000000
--- a/src/3rdparty/freetype/src/cid/Jamfile
+++ /dev/null
@@ -1,34 +0,0 @@
-# FreeType 2 src/cid Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) cid ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = cidgload
- cidload
- cidobjs
- cidparse
- cidriver
- ;
- }
- else
- {
- _sources = type1cid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/cid Jamfile
diff --git a/src/3rdparty/freetype/src/cid/ciderrs.h b/src/3rdparty/freetype/src/cid/ciderrs.h
index be80bed3be..f698bb2293 100644
--- a/src/3rdparty/freetype/src/cid/ciderrs.h
+++ b/src/3rdparty/freetype/src/cid/ciderrs.h
@@ -4,7 +4,7 @@
*
* CID error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
#ifndef CIDERRS_H_
#define CIDERRS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -33,7 +33,7 @@
#define FT_ERR_PREFIX CID_Err_
#define FT_ERR_BASE FT_Mod_Err_CID
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* CIDERRS_H_ */
diff --git a/src/3rdparty/freetype/src/cid/cidgload.c b/src/3rdparty/freetype/src/cid/cidgload.c
index f59f2880f0..54aa62f810 100644
--- a/src/3rdparty/freetype/src/cid/cidgload.c
+++ b/src/3rdparty/freetype/src/cid/cidgload.c
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 Glyph Loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,17 +16,16 @@
*/
-#include <ft2build.h>
#include "cidload.h"
#include "cidgload.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_CALC_H
-
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_CFF_TYPES_H
-#include FT_DRIVER_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/ftoutln.h>
+#include <freetype/internal/ftcalc.h>
+
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/cfftypes.h>
+#include <freetype/ftdriver.h>
#include "ciderrs.h"
diff --git a/src/3rdparty/freetype/src/cid/cidgload.h b/src/3rdparty/freetype/src/cid/cidgload.h
index 37eba7ca7b..da36e37e06 100644
--- a/src/3rdparty/freetype/src/cid/cidgload.h
+++ b/src/3rdparty/freetype/src/cid/cidgload.h
@@ -4,7 +4,7 @@
*
* OpenType Glyph Loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define CIDGLOAD_H_
-#include <ft2build.h>
#include "cidobjs.h"
diff --git a/src/3rdparty/freetype/src/cid/cidload.c b/src/3rdparty/freetype/src/cid/cidload.c
index fce3e37da7..bb9136a3df 100644
--- a/src/3rdparty/freetype/src/cid/cidload.c
+++ b/src/3rdparty/freetype/src/cid/cidload.c
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 font loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,11 +17,11 @@
#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include FT_CONFIG_CONFIG_H
-#include FT_MULTIPLE_MASTERS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/t1types.h>
+#include <freetype/internal/psaux.h>
#include "cidload.h"
@@ -254,7 +254,7 @@
goto Exit;
}
- FT_TRACE4(( " %d\n", num_dicts ));
+ FT_TRACE4(( " %ld\n", num_dicts ));
/*
* A single entry in the FDArray must (at least) contain the following
@@ -275,7 +275,7 @@
if ( (FT_ULong)num_dicts > stream->size / 100 )
{
FT_TRACE0(( "parse_fd_array: adjusting FDArray size"
- " (from %d to %d)\n",
+ " (from %ld to %ld)\n",
num_dicts,
stream->size / 100 ));
num_dicts = (FT_Long)( stream->size / 100 );
@@ -329,7 +329,7 @@
dict->expansion_factor = cid_parser_to_fixed( parser, 0 );
dict->private_dict.expansion_factor = dict->expansion_factor;
- FT_TRACE4(( "%d\n", dict->expansion_factor ));
+ FT_TRACE4(( "%ld\n", dict->expansion_factor ));
}
return;
@@ -715,7 +715,7 @@
if ( ft_isdigit( *p ) )
val = (FT_Byte)( *p - '0' );
else if ( *p >= 'a' && *p <= 'f' )
- val = (FT_Byte)( *p - 'a' );
+ val = (FT_Byte)( *p - 'a' + 10 );
else if ( *p >= 'A' && *p <= 'F' )
val = (FT_Byte)( *p - 'A' + 10 );
else if ( *p == ' ' ||
@@ -804,7 +804,7 @@
face->root.stream->size - parser->data_offset )
{
FT_TRACE0(( "cid_face_open: adjusting length of binary data\n"
- " (from %d to %d bytes)\n",
+ " (from %ld to %ld bytes)\n",
parser->binary_length,
face->root.stream->size - parser->data_offset ));
parser->binary_length = face->root.stream->size -
diff --git a/src/3rdparty/freetype/src/cid/cidload.h b/src/3rdparty/freetype/src/cid/cidload.h
index fb9d46216d..06fb9ef476 100644
--- a/src/3rdparty/freetype/src/cid/cidload.h
+++ b/src/3rdparty/freetype/src/cid/cidload.h
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 font loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define CIDLOAD_H_
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftstream.h>
#include "cidparse.h"
diff --git a/src/3rdparty/freetype/src/cid/cidobjs.c b/src/3rdparty/freetype/src/cid/cidobjs.c
index 4e9728719b..04b295eb8f 100644
--- a/src/3rdparty/freetype/src/cid/cidobjs.c
+++ b/src/3rdparty/freetype/src/cid/cidobjs.c
@@ -4,7 +4,7 @@
*
* CID objects manager (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,17 +16,16 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
#include "cidgload.h"
#include "cidload.h"
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include FT_DRIVER_H
+#include <freetype/internal/services/svpscmap.h>
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/pshints.h>
+#include <freetype/ftdriver.h>
#include "ciderrs.h"
@@ -50,7 +49,8 @@
FT_LOCAL_DEF( void )
cid_slot_done( FT_GlyphSlot slot )
{
- slot->internal->glyph_hints = NULL;
+ if ( slot->internal )
+ slot->internal->glyph_hints = NULL;
}
diff --git a/src/3rdparty/freetype/src/cid/cidobjs.h b/src/3rdparty/freetype/src/cid/cidobjs.h
index 89c9aa74ab..6ae3061379 100644
--- a/src/3rdparty/freetype/src/cid/cidobjs.h
+++ b/src/3rdparty/freetype/src/cid/cidobjs.h
@@ -4,7 +4,7 @@
*
* CID objects manager (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,9 +21,9 @@
#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include <freetype/internal/t1types.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cid/cidparse.c b/src/3rdparty/freetype/src/cid/cidparse.c
index 1be46ec328..1fc098b448 100644
--- a/src/3rdparty/freetype/src/cid/cidparse.c
+++ b/src/3rdparty/freetype/src/cid/cidparse.c
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 parser (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftstream.h>
#include "cidparse.h"
diff --git a/src/3rdparty/freetype/src/cid/cidparse.h b/src/3rdparty/freetype/src/cid/cidparse.h
index ec1f6a346d..0b49bebf48 100644
--- a/src/3rdparty/freetype/src/cid/cidparse.h
+++ b/src/3rdparty/freetype/src/cid/cidparse.h
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 parser (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,10 +20,9 @@
#define CIDPARSE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/t1types.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/psaux.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cid/cidriver.c b/src/3rdparty/freetype/src/cid/cidriver.c
index 4d91e87529..d08cea1d7e 100644
--- a/src/3rdparty/freetype/src/cid/cidriver.c
+++ b/src/3rdparty/freetype/src/cid/cidriver.c
@@ -4,7 +4,7 @@
*
* CID driver interface (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,22 +16,21 @@
*/
-#include <ft2build.h>
#include "cidriver.h"
#include "cidgload.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_POSTSCRIPT_PROPS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftpsprop.h>
#include "ciderrs.h"
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_CID_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_DRIVER_H
+#include <freetype/internal/services/svpostnm.h>
+#include <freetype/internal/services/svfntfmt.h>
+#include <freetype/internal/services/svpsinfo.h>
+#include <freetype/internal/services/svcid.h>
+#include <freetype/internal/services/svprop.h>
+#include <freetype/ftdriver.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/psaux.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/cid/cidriver.h b/src/3rdparty/freetype/src/cid/cidriver.h
index 3402fd7e99..0fc8ed37bf 100644
--- a/src/3rdparty/freetype/src/cid/cidriver.h
+++ b/src/3rdparty/freetype/src/cid/cidriver.h
@@ -4,7 +4,7 @@
*
* High-level CID driver interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define CIDRIVER_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/cid/cidtoken.h b/src/3rdparty/freetype/src/cid/cidtoken.h
index f505c9e166..e9f068bb50 100644
--- a/src/3rdparty/freetype/src/cid/cidtoken.h
+++ b/src/3rdparty/freetype/src/cid/cidtoken.h
@@ -4,7 +4,7 @@
*
* CID token definitions (specification only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/module.mk b/src/3rdparty/freetype/src/cid/module.mk
index 875c683c72..9fb02235e6 100644
--- a/src/3rdparty/freetype/src/cid/module.mk
+++ b/src/3rdparty/freetype/src/cid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cid/rules.mk b/src/3rdparty/freetype/src/cid/rules.mk
index 2b68dd48a0..94f663c80e 100644
--- a/src/3rdparty/freetype/src/cid/rules.mk
+++ b/src/3rdparty/freetype/src/cid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cid/type1cid.c b/src/3rdparty/freetype/src/cid/type1cid.c
index d21801cec1..082e8bfe5b 100644
--- a/src/3rdparty/freetype/src/cid/type1cid.c
+++ b/src/3rdparty/freetype/src/cid/type1cid.c
@@ -4,7 +4,7 @@
*
* FreeType OpenType driver component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "cidgload.c"
#include "cidload.c"
diff --git a/src/3rdparty/freetype/src/gxvalid/Jamfile b/src/3rdparty/freetype/src/gxvalid/Jamfile
deleted file mode 100644
index a08e7a998d..0000000000
--- a/src/3rdparty/freetype/src/gxvalid/Jamfile
+++ /dev/null
@@ -1,52 +0,0 @@
-# FreeType 2 src/gxvalid Jamfile
-#
-# Copyright (C) 2005-2019 by
-# suzuki toshiya, Masatake YAMATO and Red Hat K.K.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) gxvalid ;
-
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = gxvbsln
- gxvcommn
- gxvfeat
- gxvjust
- gxvkern
- gxvlcar
- gxvmod
- gxvmort
- gxvmort0
- gxvmort1
- gxvmort2
- gxvmort4
- gxvmort5
- gxvmorx
- gxvmorx0
- gxvmorx1
- gxvmorx2
- gxvmorx4
- gxvmorx5
- gxvopbd
- gxvprop
- gxvtrak
- ;
- }
- else
- {
- _sources = gxvalid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/gxvalid Jamfile
diff --git a/src/3rdparty/freetype/src/gxvalid/README b/src/3rdparty/freetype/src/gxvalid/README
index d493587842..2a32bab204 100644
--- a/src/3rdparty/freetype/src/gxvalid/README
+++ b/src/3rdparty/freetype/src/gxvalid/README
@@ -518,7 +518,7 @@ gxvalid: TrueType GX validator
------------------------------------------------------------------------
-Copyright (C) 2004-2019 by
+Copyright (C) 2004-2020 by
suzuki toshiya, Masatake YAMATO, Red hat K.K.,
David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvalid.c b/src/3rdparty/freetype/src/gxvalid/gxvalid.c
index 462e461bf2..683b8a6972 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvalid.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvalid.c
@@ -4,7 +4,7 @@
*
* FreeType validator for TrueTypeGX/AAT tables (body only).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -18,7 +18,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "gxvbsln.c"
#include "gxvcommn.c"
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvalid.h b/src/3rdparty/freetype/src/gxvalid/gxvalid.h
index 969cd0927a..ff2812da20 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvalid.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvalid.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT table validation (specification only).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -28,13 +28,12 @@
#ifndef GXVALID_H_
#define GXVALID_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
-#include "gxverror.h" /* must come before FT_INTERNAL_VALIDATE_H */
+#include "gxverror.h" /* must come before `ftvalid.h' */
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftvalid.h>
+#include <freetype/internal/ftstream.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvbsln.c b/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
index f22f2545fa..ac58d4615c 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT bsln table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvcommn.c b/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
index c5cb8ebe8b..ead0f24cd3 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common tables validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvcommn.h b/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
index 334dc9dfb3..59d149215c 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common tables validation (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -43,10 +43,9 @@
#define GXVCOMMN_H_
-#include <ft2build.h>
#include "gxvalid.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_SFNT_NAMES_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftsnames.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/gxvalid/gxverror.h b/src/3rdparty/freetype/src/gxvalid/gxverror.h
index da0edb35f9..5d8f0b6806 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxverror.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxverror.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT validation module error codes (specification only).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -35,7 +35,7 @@
#ifndef GXVERROR_H_
#define GXVERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -43,7 +43,7 @@
#define FT_ERR_PREFIX GXV_Err_
#define FT_ERR_BASE FT_Mod_Err_GXvalid
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* GXVERROR_H_ */
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvfeat.c b/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
index e1a12a18ed..400ec8a3fb 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT feat table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvfeat.h b/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
index 6c9892910c..435dcefb09 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT feat table validation (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvfgen.c b/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
index 5ecb9443c3..fe05a6f3a1 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
@@ -5,7 +5,7 @@
* Generate feature registry data for gxv `feat' validator.
* This program is derived from gxfeatreg.c in gxlayout.
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* Masatake YAMATO and Redhat K.K.
*
* This file may only be used,
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvjust.c b/src/3rdparty/freetype/src/gxvalid/gxvjust.c
index a582377859..3c7f1f9534 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvjust.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvjust.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT just table validation (body).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -28,7 +28,7 @@
#include "gxvalid.h"
#include "gxvcommn.h"
-#include FT_SFNT_NAMES_H
+#include <freetype/ftsnames.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvkern.c b/src/3rdparty/freetype/src/gxvalid/gxvkern.c
index a7532335a5..cc0b3dfcb4 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvkern.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvkern.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT kern table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -28,8 +28,8 @@
#include "gxvalid.h"
#include "gxvcommn.h"
-#include FT_SFNT_NAMES_H
-#include FT_SERVICE_GX_VALIDATE_H
+#include <freetype/ftsnames.h>
+#include <freetype/internal/services/svgxval.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvlcar.c b/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
index 13b3de3eaa..82ac1907ab 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT lcar table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmod.c b/src/3rdparty/freetype/src/gxvalid/gxvmod.c
index eeadeb3e1d..a467e87131 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmod.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmod.c
@@ -4,7 +4,7 @@
*
* FreeType's TrueTypeGX/AAT validation module implementation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -25,12 +25,11 @@
*/
-#include <ft2build.h>
-#include FT_TRUETYPE_TABLES_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_GX_VALIDATE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_GX_VALIDATE_H
+#include <freetype/tttables.h>
+#include <freetype/tttags.h>
+#include <freetype/ftgxval.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svgxval.h>
#include "gxvmod.h"
#include "gxvalid.h"
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmod.h b/src/3rdparty/freetype/src/gxvalid/gxvmod.h
index 6ecd7312c9..f2982c96c2 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmod.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmod.h
@@ -5,7 +5,7 @@
* FreeType's TrueTypeGX/AAT validation module implementation
* (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -29,8 +29,7 @@
#ifndef GXVMOD_H_
#define GXVMOD_H_
-#include <ft2build.h>
-#include FT_MODULE_H
+#include <freetype/ftmodapi.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort.c b/src/3rdparty/freetype/src/gxvalid/gxvmort.c
index 288ef6988b..aae7f01a89 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT mort table validation (body).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort.h b/src/3rdparty/freetype/src/gxvalid/gxvmort.h
index 0619e24fb9..7237c58254 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common definition for mort table (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -31,7 +31,10 @@
#include "gxvalid.h"
#include "gxvcommn.h"
-#include FT_SFNT_NAMES_H
+#include <freetype/ftsnames.h>
+
+
+FT_BEGIN_HEADER
typedef struct GXV_mort_featureRec_
@@ -88,6 +91,8 @@
GXV_Validator gxvalid );
+FT_END_HEADER
+
#endif /* GXVMORT_H_ */
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort0.c b/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
index 2c01bf95ec..d452c1ccaa 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type0 (Indic Script Rearrangement) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort1.c b/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
index c71ba13351..d743f89f6e 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type1 (Contextual Substitution) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort2.c b/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
index 889d3bd582..9e69e1269d 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type2 (Ligature Substitution) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort4.c b/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
index f8ce6cf789..4584d204cf 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type4 (Non-Contextual Glyph Substitution) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort5.c b/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
index 1ba1e5ded0..a15a24fe65 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type5 (Contextual Glyph Insertion) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
index 8bd45c27e6..754d9f8bf1 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT morx table validation (body).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx.h b/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
index e257270342..f747b1d636 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common definition for morx table (specification).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -33,7 +33,10 @@
#include "gxvcommn.h"
#include "gxvmort.h"
-#include FT_SFNT_NAMES_H
+#include <freetype/ftsnames.h>
+
+
+FT_BEGIN_HEADER
FT_LOCAL( void )
@@ -62,6 +65,8 @@
GXV_Validator gxvalid );
+FT_END_HEADER
+
#endif /* GXVMORX_H_ */
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
index d7764a0ae8..5a42e552e2 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type0 (Indic Script Rearrangement) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
index 5b41b3605f..9f8b69067e 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type1 (Contextual Substitution) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
index ec4c81299d..98b5c49c26 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type2 (Ligature Substitution) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
index 7b041534c0..857e4d4eb8 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
index 70a4623656..7ceba077af 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type5 (Contextual Glyph Insertion) subtable.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvopbd.c b/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
index f055a22054..a398fe0977 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT opbd table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvprop.c b/src/3rdparty/freetype/src/gxvalid/gxvprop.c
index e1911edd48..bee8bab97b 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvprop.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvprop.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT prop table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvtrak.c b/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
index b7794b7af4..58a631c9e5 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT trak table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/module.mk b/src/3rdparty/freetype/src/gxvalid/module.mk
index 04067ce617..e7d408df9d 100644
--- a/src/3rdparty/freetype/src/gxvalid/module.mk
+++ b/src/3rdparty/freetype/src/gxvalid/module.mk
@@ -2,7 +2,7 @@
# FreeType 2 gxvalid module definition
#
-# Copyright (C) 2004-2019 by
+# Copyright (C) 2004-2020 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/src/3rdparty/freetype/src/gxvalid/rules.mk b/src/3rdparty/freetype/src/gxvalid/rules.mk
index 4ef463bc21..d55a4935e2 100644
--- a/src/3rdparty/freetype/src/gxvalid/rules.mk
+++ b/src/3rdparty/freetype/src/gxvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2019 by
+# Copyright (C) 2004-2020 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/src/3rdparty/freetype/src/gzip/Jamfile b/src/3rdparty/freetype/src/gzip/Jamfile
deleted file mode 100644
index 2c808b74a5..0000000000
--- a/src/3rdparty/freetype/src/gzip/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/gzip Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) gzip ;
-
-Library $(FT2_LIB) : ftgzip.c ;
-
-# end of src/pcf Jamfile
diff --git a/src/3rdparty/freetype/src/gzip/ftgzip.c b/src/3rdparty/freetype/src/gzip/ftgzip.c
index 5e78bc6f8d..de7d0fdd5b 100644
--- a/src/3rdparty/freetype/src/gzip/ftgzip.c
+++ b/src/3rdparty/freetype/src/gzip/ftgzip.c
@@ -8,7 +8,7 @@
* parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,15 +20,14 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_GZIP_H
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftgzip.h>
#include FT_CONFIG_STANDARD_LIBRARY_H
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -36,7 +35,7 @@
#define FT_ERR_PREFIX Gzip_Err_
#define FT_ERR_BASE FT_Mod_Err_Gzip
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#ifdef FT_CONFIG_OPTION_USE_ZLIB
@@ -746,7 +745,17 @@
stream.zfree = (free_func) ft_gzip_free;
stream.opaque = memory;
+ /* This is a temporary fix and will be removed once the internal
+ * copy of zlib is updated to the newest version. The `|32' flag
+ * is only supported in the new versions of zlib to enable gzip
+ * encoded header.
+ */
+#ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB
err = inflateInit2( &stream, MAX_WBITS|32 );
+#else
+ err = inflateInit2( &stream, MAX_WBITS );
+#endif
+
if ( err != Z_OK )
return FT_THROW( Invalid_Argument );
diff --git a/src/3rdparty/freetype/src/gzip/infutil.h b/src/3rdparty/freetype/src/gzip/infutil.h
index 7174b6dd0f..cdf18b4f90 100644
--- a/src/3rdparty/freetype/src/gzip/infutil.h
+++ b/src/3rdparty/freetype/src/gzip/infutil.h
@@ -86,7 +86,7 @@ struct inflate_blocks_state {
/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
#ifndef NO_INFLATE_MASK
-local uInt inflate_mask[17];
+local const uInt inflate_mask[17];
#endif
/* copy as much as possible from the sliding window to the output area */
diff --git a/src/3rdparty/freetype/src/gzip/rules.mk b/src/3rdparty/freetype/src/gzip/rules.mk
index 44206a1dae..4ea823f8d3 100644
--- a/src/3rdparty/freetype/src/gzip/rules.mk
+++ b/src/3rdparty/freetype/src/gzip/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2019 by
+# Copyright (C) 2002-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/gzip/zconf.h b/src/3rdparty/freetype/src/gzip/zconf.h
deleted file mode 100644
index 3abf0ba03b..0000000000
--- a/src/3rdparty/freetype/src/gzip/zconf.h
+++ /dev/null
@@ -1,284 +0,0 @@
-/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#ifndef _ZCONF_H
-#define _ZCONF_H
-
-/*
- * If you *really* need a unique prefix for all types and library functions,
- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
- */
-#ifdef Z_PREFIX
-# define deflateInit_ z_deflateInit_
-# define deflate z_deflate
-# define deflateEnd z_deflateEnd
-# define inflateInit_ z_inflateInit_
-# define inflate z_inflate
-# define inflateEnd z_inflateEnd
-# define deflateInit2_ z_deflateInit2_
-# define deflateSetDictionary z_deflateSetDictionary
-# define deflateCopy z_deflateCopy
-# define deflateReset z_deflateReset
-# define deflateParams z_deflateParams
-# define inflateInit2_ z_inflateInit2_
-# define inflateSetDictionary z_inflateSetDictionary
-# define inflateSync z_inflateSync
-# define inflateSyncPoint z_inflateSyncPoint
-# define inflateReset z_inflateReset
-# define compress z_compress
-# define compress2 z_compress2
-# define uncompress z_uncompress
-# define adler32 z_adler32
-# define crc32 z_crc32
-# define get_crc_table z_get_crc_table
-
-# define Byte z_Byte
-# define uInt z_uInt
-# define uLong z_uLong
-# define Bytef z_Bytef
-# define charf z_charf
-# define intf z_intf
-# define uIntf z_uIntf
-# define uLongf z_uLongf
-# define voidpf z_voidpf
-# define voidp z_voidp
-#endif
-
-#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-# define WIN32
-#endif
-#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
-# ifndef __32BIT__
-# define __32BIT__
-# endif
-#endif
-#if defined(__MSDOS__) && !defined(MSDOS)
-# define MSDOS
-#endif
-
-/* WinCE doesn't have errno.h */
-#ifdef _WIN32_WCE
-# define NO_ERRNO_H
-#endif
-
-
-/*
- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
- * than 64k bytes at a time (needed on systems with 16-bit int).
- */
-#if defined(MSDOS) && !defined(__32BIT__)
-# define MAXSEG_64K
-#endif
-#ifdef MSDOS
-# define UNALIGNED_OK
-#endif
-
-#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC)
-# define STDC
-#endif
-#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
-# ifndef STDC
-# define STDC
-# endif
-#endif
-
-#ifndef STDC
-# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-# define const
-# endif
-#endif
-
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
-# define NO_DUMMY_DECL
-#endif
-
-/* Old Borland C and LCC incorrectly complains about missing returns: */
-#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
-# define NEED_DUMMY_RETURN
-#endif
-
-#if defined(__LCC__)
-# define NEED_DUMMY_RETURN
-#endif
-
-/* Maximum value for memLevel in deflateInit2 */
-#ifndef MAX_MEM_LEVEL
-# ifdef MAXSEG_64K
-# define MAX_MEM_LEVEL 8
-# else
-# define MAX_MEM_LEVEL 9
-# endif
-#endif
-
-/* Maximum value for windowBits in deflateInit2 and inflateInit2.
- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
- * created by gzip. (Files created by minigzip can still be extracted by
- * gzip.)
- */
-#ifndef MAX_WBITS
-# define MAX_WBITS 15 /* 32K LZ77 window */
-#endif
-
-/* The memory requirements for deflate are (in bytes):
- (1 << (windowBits+2)) + (1 << (memLevel+9))
- that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
- plus a few kilobytes for small objects. For example, if you want to reduce
- the default memory requirements from 256K to 128K, compile with
- make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- Of course this will generally degrade compression (there's no free lunch).
-
- The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
- for small objects.
-*/
-
- /* Type declarations */
-
-#ifndef OF /* function prototypes */
-# ifdef STDC
-# define OF(args) args
-# else
-# define OF(args) ()
-# endif
-#endif
-
-/* The following definitions for FAR are needed only for MSDOS mixed
- * model programming (small or medium model with some far allocations).
- * This was tested only with MSC; for other MSDOS compilers you may have
- * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
- * just define FAR to be empty.
- */
-#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
- /* MSC small or medium model */
-# define SMALL_MEDIUM
-# ifdef _MSC_VER
-# define FAR _far
-# else
-# define FAR far
-# endif
-#endif
-#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
-# ifndef __32BIT__
-# define SMALL_MEDIUM
-# define FAR _far
-# endif
-#endif
-
-/* Compile with -DZLIB_DLL for Windows DLL support */
-#if defined(ZLIB_DLL)
-# if defined(_WINDOWS) || defined(WINDOWS)
-# ifdef FAR
-# undef FAR
-# endif
-# include <windows.h>
-# define ZEXPORT(x) x WINAPI
-# ifdef WIN32
-# define ZEXPORTVA(x) x WINAPIV
-# else
-# define ZEXPORTVA(x) x FAR _cdecl _export
-# endif
-# endif
-# if defined (__BORLANDC__)
-# if (__BORLANDC__ >= 0x0500) && defined (WIN32)
-# include <windows.h>
-# define ZEXPORT(x) x __declspec(dllexport) WINAPI
-# define ZEXPORTRVA(x) x __declspec(dllexport) WINAPIV
-# else
-# if defined (_Windows) && defined (__DLL__)
-# define ZEXPORT(x) x _export
-# define ZEXPORTVA(x) x _export
-# endif
-# endif
-# endif
-#endif
-
-
-#ifndef ZEXPORT
-# define ZEXPORT(x) static x
-#endif
-#ifndef ZEXPORTVA
-# define ZEXPORTVA(x) static x
-#endif
-#ifndef ZEXTERN
-# define ZEXTERN(x) static x
-#endif
-#ifndef ZEXTERNDEF
-# define ZEXTERNDEF(x) static x
-#endif
-
-#ifndef FAR
-# define FAR
-#endif
-
-#if !defined(MACOS) && !defined(TARGET_OS_MAC)
-typedef unsigned char Byte; /* 8 bits */
-#endif
-typedef unsigned int uInt; /* 16 bits or more */
-typedef unsigned long uLong; /* 32 bits or more */
-
-#ifdef SMALL_MEDIUM
- /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-# define Bytef Byte FAR
-#else
- typedef Byte FAR Bytef;
-#endif
-typedef char FAR charf;
-typedef int FAR intf;
-typedef uInt FAR uIntf;
-typedef uLong FAR uLongf;
-
-#ifdef STDC
- typedef void FAR *voidpf;
- typedef void *voidp;
-#else
- typedef Byte FAR *voidpf;
- typedef Byte *voidp;
-#endif
-
-#ifdef HAVE_UNISTD_H
-# include <sys/types.h> /* for off_t */
-# include <unistd.h> /* for SEEK_* and off_t */
-# define z_off_t off_t
-#endif
-#ifndef SEEK_SET
-# define SEEK_SET 0 /* Seek from beginning of file. */
-# define SEEK_CUR 1 /* Seek from current position. */
-# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
-#endif
-#ifndef z_off_t
-# define z_off_t long
-#endif
-
-/* MVS linker does not support external names larger than 8 bytes */
-#if defined(__MVS__)
-# pragma map(deflateInit_,"DEIN")
-# pragma map(deflateInit2_,"DEIN2")
-# pragma map(deflateEnd,"DEEND")
-# pragma map(inflateInit_,"ININ")
-# pragma map(inflateInit2_,"ININ2")
-# pragma map(inflateEnd,"INEND")
-# pragma map(inflateSync,"INSY")
-# pragma map(inflateSetDictionary,"INSEDI")
-# pragma map(inflate_blocks,"INBL")
-# pragma map(inflate_blocks_new,"INBLNE")
-# pragma map(inflate_blocks_free,"INBLFR")
-# pragma map(inflate_blocks_reset,"INBLRE")
-# pragma map(inflate_codes_free,"INCOFR")
-# pragma map(inflate_codes,"INCO")
-# pragma map(inflate_fast,"INFA")
-# pragma map(inflate_flush,"INFLU")
-# pragma map(inflate_mask,"INMA")
-# pragma map(inflate_set_dictionary,"INSEDI2")
-# pragma map(inflate_copyright,"INCOPY")
-# pragma map(inflate_trees_bits,"INTRBI")
-# pragma map(inflate_trees_dynamic,"INTRDY")
-# pragma map(inflate_trees_fixed,"INTRFI")
-# pragma map(inflate_trees_free,"INTRFR")
-#endif
-
-#endif /* _ZCONF_H */
diff --git a/src/3rdparty/freetype/src/lzw/Jamfile b/src/3rdparty/freetype/src/lzw/Jamfile
deleted file mode 100644
index ba2d6ebb45..0000000000
--- a/src/3rdparty/freetype/src/lzw/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/lzw Jamfile
-#
-# Copyright (C) 2004-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) lzw ;
-
-Library $(FT2_LIB) : ftlzw.c ;
-
-# end of src/lzw Jamfile
diff --git a/src/3rdparty/freetype/src/lzw/ftlzw.c b/src/3rdparty/freetype/src/lzw/ftlzw.c
index 9805a1e3bd..ddb81e6e97 100644
--- a/src/3rdparty/freetype/src/lzw/ftlzw.c
+++ b/src/3rdparty/freetype/src/lzw/ftlzw.c
@@ -8,7 +8,7 @@
* be used to parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* Albert Chin-A-Young.
*
* based on code in `src/gzip/ftgzip.c'
@@ -21,15 +21,14 @@
*
*/
-#include <ft2build.h>
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_LZW_H
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftlzw.h>
#include FT_CONFIG_STANDARD_LIBRARY_H
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -37,7 +36,7 @@
#define FT_ERR_PREFIX LZW_Err_
#define FT_ERR_BASE FT_Mod_Err_LZW
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#ifdef FT_CONFIG_OPTION_USE_LZW
diff --git a/src/3rdparty/freetype/src/lzw/ftzopen.c b/src/3rdparty/freetype/src/lzw/ftzopen.c
index 67e6760f95..884d2ec74e 100644
--- a/src/3rdparty/freetype/src/lzw/ftzopen.c
+++ b/src/3rdparty/freetype/src/lzw/ftzopen.c
@@ -8,7 +8,7 @@
* be used to parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,9 @@
*/
#include "ftzopen.h"
-#include FT_INTERNAL_MEMORY_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftmemory.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftdebug.h>
static int
diff --git a/src/3rdparty/freetype/src/lzw/ftzopen.h b/src/3rdparty/freetype/src/lzw/ftzopen.h
index 44fe36d6c5..d8768f7b47 100644
--- a/src/3rdparty/freetype/src/lzw/ftzopen.h
+++ b/src/3rdparty/freetype/src/lzw/ftzopen.h
@@ -8,7 +8,7 @@
* be used to parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
@@ -22,9 +22,9 @@
#ifndef FTZOPEN_H_
#define FTZOPEN_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
+FT_BEGIN_HEADER
/*
* This is a complete re-implementation of the LZW file reader,
@@ -166,6 +166,8 @@
/* */
+FT_END_HEADER
+
#endif /* FTZOPEN_H_ */
diff --git a/src/3rdparty/freetype/src/lzw/rules.mk b/src/3rdparty/freetype/src/lzw/rules.mk
index 930b32e6b1..3468ee024d 100644
--- a/src/3rdparty/freetype/src/lzw/rules.mk
+++ b/src/3rdparty/freetype/src/lzw/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2019 by
+# Copyright (C) 2004-2020 by
# Albert Chin-A-Young.
#
# based on `src/lzw/rules.mk'
diff --git a/src/3rdparty/freetype/src/otvalid/Jamfile b/src/3rdparty/freetype/src/otvalid/Jamfile
deleted file mode 100644
index 36db0e1f83..0000000000
--- a/src/3rdparty/freetype/src/otvalid/Jamfile
+++ /dev/null
@@ -1,37 +0,0 @@
-# FreeType 2 src/otvalid Jamfile
-#
-# Copyright (C) 2004-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) otvalid ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = otvbase
- otvcommn
- otvgdef
- otvgpos
- otvgsub
- otvjstf
- otvmath
- otvmod
- ;
- }
- else
- {
- _sources = otvalid ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/otvalid Jamfile
diff --git a/src/3rdparty/freetype/src/otvalid/module.mk b/src/3rdparty/freetype/src/otvalid/module.mk
index 5ea5b7b57b..67b9820d84 100644
--- a/src/3rdparty/freetype/src/otvalid/module.mk
+++ b/src/3rdparty/freetype/src/otvalid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2019 by
+# Copyright (C) 2004-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/otvalid/otvalid.c b/src/3rdparty/freetype/src/otvalid/otvalid.c
index e3964b99ae..d640209f68 100644
--- a/src/3rdparty/freetype/src/otvalid/otvalid.c
+++ b/src/3rdparty/freetype/src/otvalid/otvalid.c
@@ -4,7 +4,7 @@
*
* FreeType validator for OpenType tables (body only).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "otvbase.c"
#include "otvcommn.c"
diff --git a/src/3rdparty/freetype/src/otvalid/otvalid.h b/src/3rdparty/freetype/src/otvalid/otvalid.h
index 5ca819f261..8208ff0112 100644
--- a/src/3rdparty/freetype/src/otvalid/otvalid.h
+++ b/src/3rdparty/freetype/src/otvalid/otvalid.h
@@ -4,7 +4,7 @@
*
* OpenType table validation (specification only).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,13 +20,12 @@
#define OTVALID_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
-#include "otverror.h" /* must come before FT_INTERNAL_VALIDATE_H */
+#include "otverror.h" /* must come before `ftvalid.h' */
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftvalid.h>
+#include <freetype/internal/ftstream.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/otvalid/otvbase.c b/src/3rdparty/freetype/src/otvalid/otvbase.c
index be69d7ca31..250ae98ab5 100644
--- a/src/3rdparty/freetype/src/otvalid/otvbase.c
+++ b/src/3rdparty/freetype/src/otvalid/otvbase.c
@@ -4,7 +4,7 @@
*
* OpenType BASE table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvcommn.c b/src/3rdparty/freetype/src/otvalid/otvcommn.c
index 5ed1723506..faaa846871 100644
--- a/src/3rdparty/freetype/src/otvalid/otvcommn.c
+++ b/src/3rdparty/freetype/src/otvalid/otvcommn.c
@@ -4,7 +4,7 @@
*
* OpenType common tables validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -151,6 +151,9 @@
FT_UInt result = 0;
+ if ( !count )
+ return result;
+
switch ( CoverageFormat )
{
case 1:
diff --git a/src/3rdparty/freetype/src/otvalid/otvcommn.h b/src/3rdparty/freetype/src/otvalid/otvcommn.h
index bfcc5b974a..f9926034a9 100644
--- a/src/3rdparty/freetype/src/otvalid/otvcommn.h
+++ b/src/3rdparty/freetype/src/otvalid/otvcommn.h
@@ -4,7 +4,7 @@
*
* OpenType common tables validation (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define OTVCOMMN_H_
-#include <ft2build.h>
#include "otvalid.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/otvalid/otverror.h b/src/3rdparty/freetype/src/otvalid/otverror.h
index a7d35acf1a..979e9cbd9c 100644
--- a/src/3rdparty/freetype/src/otvalid/otverror.h
+++ b/src/3rdparty/freetype/src/otvalid/otverror.h
@@ -4,7 +4,7 @@
*
* OpenType validation module error codes (specification only).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef OTVERROR_H_
#define OTVERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX OTV_Err_
#define FT_ERR_BASE FT_Mod_Err_OTvalid
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* OTVERROR_H_ */
diff --git a/src/3rdparty/freetype/src/otvalid/otvgdef.c b/src/3rdparty/freetype/src/otvalid/otvgdef.c
index 2529b544d2..88874b8474 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgdef.c
+++ b/src/3rdparty/freetype/src/otvalid/otvgdef.c
@@ -4,7 +4,7 @@
*
* OpenType GDEF table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvgpos.c b/src/3rdparty/freetype/src/otvalid/otvgpos.c
index f3bddeac6c..29d56f91e8 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgpos.c
+++ b/src/3rdparty/freetype/src/otvalid/otvgpos.c
@@ -4,7 +4,7 @@
*
* OpenType GPOS table validation (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvgpos.h b/src/3rdparty/freetype/src/otvalid/otvgpos.h
index b3154312eb..06a03a0e6c 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgpos.h
+++ b/src/3rdparty/freetype/src/otvalid/otvgpos.h
@@ -4,7 +4,7 @@
*
* OpenType GPOS table validator (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvgsub.c b/src/3rdparty/freetype/src/otvalid/otvgsub.c
index 97da997d3d..f0d563ba92 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgsub.c
+++ b/src/3rdparty/freetype/src/otvalid/otvgsub.c
@@ -4,7 +4,7 @@
*
* OpenType GSUB table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvjstf.c b/src/3rdparty/freetype/src/otvalid/otvjstf.c
index d4e6d87178..79de7b809d 100644
--- a/src/3rdparty/freetype/src/otvalid/otvjstf.c
+++ b/src/3rdparty/freetype/src/otvalid/otvjstf.c
@@ -4,7 +4,7 @@
*
* OpenType JSTF table validation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvmath.c b/src/3rdparty/freetype/src/otvalid/otvmath.c
index 3aaf0ec0ec..dfdeaaba7e 100644
--- a/src/3rdparty/freetype/src/otvalid/otvmath.c
+++ b/src/3rdparty/freetype/src/otvalid/otvmath.c
@@ -4,7 +4,7 @@
*
* OpenType MATH table validation (body).
*
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by George Williams.
diff --git a/src/3rdparty/freetype/src/otvalid/otvmod.c b/src/3rdparty/freetype/src/otvalid/otvmod.c
index f417bd220f..0188b27018 100644
--- a/src/3rdparty/freetype/src/otvalid/otvmod.c
+++ b/src/3rdparty/freetype/src/otvalid/otvmod.c
@@ -4,7 +4,7 @@
*
* FreeType's OpenType validation module implementation (body).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_TRUETYPE_TABLES_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_OPENTYPE_VALIDATE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_OPENTYPE_VALIDATE_H
+#include <freetype/tttables.h>
+#include <freetype/tttags.h>
+#include <freetype/ftotval.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svotval.h>
#include "otvmod.h"
#include "otvalid.h"
diff --git a/src/3rdparty/freetype/src/otvalid/otvmod.h b/src/3rdparty/freetype/src/otvalid/otvmod.h
index 5539de7ec6..efd6da035f 100644
--- a/src/3rdparty/freetype/src/otvalid/otvmod.h
+++ b/src/3rdparty/freetype/src/otvalid/otvmod.h
@@ -5,7 +5,7 @@
* FreeType's OpenType validation module implementation
* (specification).
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,8 +21,7 @@
#define OTVMOD_H_
-#include <ft2build.h>
-#include FT_MODULE_H
+#include <freetype/ftmodapi.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/otvalid/rules.mk b/src/3rdparty/freetype/src/otvalid/rules.mk
index 3c6ece1c19..7f0169fd89 100644
--- a/src/3rdparty/freetype/src/otvalid/rules.mk
+++ b/src/3rdparty/freetype/src/otvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2019 by
+# Copyright (C) 2004-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/pcf/Jamfile b/src/3rdparty/freetype/src/pcf/Jamfile
deleted file mode 100644
index fd17d53f0d..0000000000
--- a/src/3rdparty/freetype/src/pcf/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/pcf Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pcf ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pcfdrivr
- pcfread
- pcfutil
- ;
- }
- else
- {
- _sources = pcf ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pcf Jamfile
diff --git a/src/3rdparty/freetype/src/pcf/pcf.c b/src/3rdparty/freetype/src/pcf/pcf.c
index 8ffd6e280b..6b30fb249a 100644
--- a/src/3rdparty/freetype/src/pcf/pcf.c
+++ b/src/3rdparty/freetype/src/pcf/pcf.c
@@ -26,7 +26,6 @@ THE SOFTWARE.
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "pcfdrivr.c"
#include "pcfread.c"
diff --git a/src/3rdparty/freetype/src/pcf/pcf.h b/src/3rdparty/freetype/src/pcf/pcf.h
index 33be4bcd85..3134cc355b 100644
--- a/src/3rdparty/freetype/src/pcf/pcf.h
+++ b/src/3rdparty/freetype/src/pcf/pcf.h
@@ -29,9 +29,8 @@ THE SOFTWARE.
#define PCF_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftdrv.h>
+#include <freetype/internal/ftstream.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pcf/pcfdrivr.c b/src/3rdparty/freetype/src/pcf/pcfdrivr.c
index b39592c794..e9dd51752e 100644
--- a/src/3rdparty/freetype/src/pcf/pcfdrivr.c
+++ b/src/3rdparty/freetype/src/pcf/pcfdrivr.c
@@ -25,17 +25,16 @@ THE SOFTWARE.
*/
-#include <ft2build.h>
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_GZIP_H
-#include FT_LZW_H
-#include FT_BZIP2_H
-#include FT_ERRORS_H
-#include FT_BDF_H
-#include FT_TRUETYPE_IDS_H
+
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftgzip.h>
+#include <freetype/ftlzw.h>
+#include <freetype/ftbzip2.h>
+#include <freetype/fterrors.h>
+#include <freetype/ftbdf.h>
+#include <freetype/ttnameid.h>
#include "pcf.h"
#include "pcfdrivr.h"
@@ -47,10 +46,10 @@ THE SOFTWARE.
#undef FT_COMPONENT
#define FT_COMPONENT pcfread
-#include FT_SERVICE_BDF_H
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_DRIVER_H
+#include <freetype/internal/services/svbdf.h>
+#include <freetype/internal/services/svfntfmt.h>
+#include <freetype/internal/services/svprop.h>
+#include <freetype/ftdriver.h>
/**************************************************************************
@@ -137,7 +136,7 @@ THE SOFTWARE.
FT_UInt32 charcode = *acharcode;
FT_UShort charcodeRow;
FT_UShort charcodeCol;
- FT_Int result = 0;
+ FT_UInt result = 0;
while ( charcode < (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) )
@@ -607,8 +606,9 @@ THE SOFTWARE.
if ( prop->value.l > 0x7FFFFFFFL ||
prop->value.l < ( -1 - 0x7FFFFFFFL ) )
{
- FT_TRACE1(( "pcf_get_bdf_property:" ));
- FT_TRACE1(( " too large integer 0x%x is truncated\n" ));
+ FT_TRACE1(( "pcf_get_bdf_property:"
+ " too large integer 0x%lx is truncated\n",
+ prop->value.l ));
}
/*
diff --git a/src/3rdparty/freetype/src/pcf/pcfdrivr.h b/src/3rdparty/freetype/src/pcf/pcfdrivr.h
index 73db0823d2..d465393743 100644
--- a/src/3rdparty/freetype/src/pcf/pcfdrivr.h
+++ b/src/3rdparty/freetype/src/pcf/pcfdrivr.h
@@ -28,8 +28,7 @@ THE SOFTWARE.
#ifndef PCFDRIVR_H_
#define PCFDRIVR_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pcf/pcferror.h b/src/3rdparty/freetype/src/pcf/pcferror.h
index 2e69d1d219..8b9e9902a3 100644
--- a/src/3rdparty/freetype/src/pcf/pcferror.h
+++ b/src/3rdparty/freetype/src/pcf/pcferror.h
@@ -25,7 +25,7 @@
#ifndef PCFERROR_H_
#define PCFERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -33,7 +33,7 @@
#define FT_ERR_PREFIX PCF_Err_
#define FT_ERR_BASE FT_Mod_Err_PCF
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* PCFERROR_H_ */
diff --git a/src/3rdparty/freetype/src/pcf/pcfread.c b/src/3rdparty/freetype/src/pcf/pcfread.c
index 2ffe22d71c..8817682cdf 100644
--- a/src/3rdparty/freetype/src/pcf/pcfread.c
+++ b/src/3rdparty/freetype/src/pcf/pcfread.c
@@ -25,11 +25,10 @@ THE SOFTWARE.
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftobjs.h>
#include "pcf.h"
#include "pcfread.h"
@@ -122,7 +121,7 @@ THE SOFTWARE.
toc->count > 9 )
{
FT_TRACE0(( "pcf_read_TOC: adjusting number of tables"
- " (from %d to %d)\n",
+ " (from %ld to %ld)\n",
toc->count,
FT_MIN( stream->size >> 4, 9 ) ));
toc->count = FT_MIN( stream->size >> 4, 9 );
@@ -242,7 +241,7 @@ THE SOFTWARE.
if ( tables[i].type == (FT_UInt)( 1 << j ) )
name = tableNames[j];
- FT_TRACE4(( " %d: type=%s, format=0x%X,"
+ FT_TRACE4(( " %d: type=%s, format=0x%lX,"
" size=%ld (0x%lX), offset=%ld (0x%lX)\n",
i, name,
tables[i].format,
@@ -661,7 +660,7 @@ THE SOFTWARE.
{
properties[i].value.l = props[i].value;
- FT_TRACE4(( " %d\n", properties[i].value.l ));
+ FT_TRACE4(( " %ld\n", properties[i].value.l ));
}
}
@@ -798,7 +797,7 @@ THE SOFTWARE.
metrics->descent = 0;
FT_TRACE0(( "pcf_get_metrics:"
- " invalid metrics for glyph %d\n", i ));
+ " invalid metrics for glyph %ld\n", i ));
}
}
@@ -918,11 +917,11 @@ THE SOFTWARE.
sizebitmaps = bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
- FT_TRACE4(( " %ld-bit padding implies a size of %lu\n",
+ FT_TRACE4(( " %d-bit padding implies a size of %lu\n",
8 << i, bitmapSizes[i] ));
}
- FT_TRACE4(( " %lu bitmaps, using %ld-bit padding\n",
+ FT_TRACE4(( " %lu bitmaps, using %d-bit padding\n",
nbitmaps,
8 << PCF_GLYPH_PAD_INDEX( format ) ));
FT_TRACE4(( " bitmap size: %lu\n", sizebitmaps ));
@@ -1252,13 +1251,13 @@ THE SOFTWARE.
if ( FT_ABS( accel->fontAscent ) > 0x7FFF )
{
accel->fontAscent = accel->fontAscent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %d\n",
+ FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %ld\n",
accel->fontAscent ));
}
if ( FT_ABS( accel->fontDescent ) > 0x7FFF )
{
accel->fontDescent = accel->fontDescent < 0 ? -0x7FFF : 0x7FFF;
- FT_TRACE0(( "pfc_get_accel: clamping font descent to value %d\n",
+ FT_TRACE0(( "pfc_get_accel: clamping font descent to value %ld\n",
accel->fontDescent ));
}
@@ -1631,7 +1630,7 @@ THE SOFTWARE.
if ( FT_ABS( prop->value.l ) > 0x504C2L ) /* 0x7FFF * 72270/7200 */
{
bsize->size = 0x7FFF;
- FT_TRACE0(( "pcf_load_font: clamping point size to value %d\n",
+ FT_TRACE0(( "pcf_load_font: clamping point size to value %ld\n",
bsize->size ));
}
else
@@ -1650,7 +1649,7 @@ THE SOFTWARE.
if ( FT_ABS( prop->value.l ) > 0x7FFF )
{
bsize->y_ppem = 0x7FFF << 6;
- FT_TRACE0(( "pcf_load_font: clamping pixel size to value %d\n",
+ FT_TRACE0(( "pcf_load_font: clamping pixel size to value %ld\n",
bsize->y_ppem ));
}
else
diff --git a/src/3rdparty/freetype/src/pcf/pcfread.h b/src/3rdparty/freetype/src/pcf/pcfread.h
index bed30e5030..a54648fbf9 100644
--- a/src/3rdparty/freetype/src/pcf/pcfread.h
+++ b/src/3rdparty/freetype/src/pcf/pcfread.h
@@ -29,7 +29,6 @@ THE SOFTWARE.
#define PCFREAD_H_
-#include <ft2build.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pcf/pcfutil.c b/src/3rdparty/freetype/src/pcf/pcfutil.c
index 045c42d60f..5d3c00791f 100644
--- a/src/3rdparty/freetype/src/pcf/pcfutil.c
+++ b/src/3rdparty/freetype/src/pcf/pcfutil.c
@@ -32,7 +32,6 @@ in this Software without prior written authorization from The Open Group.
/* Modified for use with FreeType */
-#include <ft2build.h>
#include "pcfutil.h"
diff --git a/src/3rdparty/freetype/src/pcf/pcfutil.h b/src/3rdparty/freetype/src/pcf/pcfutil.h
index be986e756b..a197c15595 100644
--- a/src/3rdparty/freetype/src/pcf/pcfutil.h
+++ b/src/3rdparty/freetype/src/pcf/pcfutil.h
@@ -31,7 +31,7 @@ THE SOFTWARE.
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-
+#include <freetype/internal/compiler-macros.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pfr/Jamfile b/src/3rdparty/freetype/src/pfr/Jamfile
deleted file mode 100644
index fbca8065c4..0000000000
--- a/src/3rdparty/freetype/src/pfr/Jamfile
+++ /dev/null
@@ -1,35 +0,0 @@
-# FreeType 2 src/pfr Jamfile
-#
-# Copyright (C) 2002-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pfr ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pfrcmap
- pfrdrivr
- pfrgload
- pfrload
- pfrobjs
- pfrsbit
- ;
- }
- else
- {
- _sources = pfr ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pfr Jamfile
diff --git a/src/3rdparty/freetype/src/pfr/module.mk b/src/3rdparty/freetype/src/pfr/module.mk
index 30d876d4c8..762353dda2 100644
--- a/src/3rdparty/freetype/src/pfr/module.mk
+++ b/src/3rdparty/freetype/src/pfr/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2019 by
+# Copyright (C) 2002-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/pfr/pfr.c b/src/3rdparty/freetype/src/pfr/pfr.c
index 6d885ea47f..9264c77df2 100644
--- a/src/3rdparty/freetype/src/pfr/pfr.c
+++ b/src/3rdparty/freetype/src/pfr/pfr.c
@@ -4,7 +4,7 @@
*
* FreeType PFR driver component.
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "pfrcmap.c"
#include "pfrdrivr.c"
diff --git a/src/3rdparty/freetype/src/pfr/pfrcmap.c b/src/3rdparty/freetype/src/pfr/pfrcmap.c
index bfa1b9ea05..ebc7b84393 100644
--- a/src/3rdparty/freetype/src/pfr/pfrcmap.c
+++ b/src/3rdparty/freetype/src/pfr/pfrcmap.c
@@ -4,7 +4,7 @@
*
* FreeType PFR cmap handling (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,8 +16,7 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "pfrcmap.h"
#include "pfrobjs.h"
diff --git a/src/3rdparty/freetype/src/pfr/pfrcmap.h b/src/3rdparty/freetype/src/pfr/pfrcmap.h
index 1e203a0514..a6d920c30b 100644
--- a/src/3rdparty/freetype/src/pfr/pfrcmap.h
+++ b/src/3rdparty/freetype/src/pfr/pfrcmap.h
@@ -4,7 +4,7 @@
*
* FreeType PFR cmap handling (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef PFRCMAP_H_
#define PFRCMAP_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
#include "pfrtypes.h"
diff --git a/src/3rdparty/freetype/src/pfr/pfrdrivr.c b/src/3rdparty/freetype/src/pfr/pfrdrivr.c
index f67eebf118..b14320875a 100644
--- a/src/3rdparty/freetype/src/pfr/pfrdrivr.c
+++ b/src/3rdparty/freetype/src/pfr/pfrdrivr.c
@@ -4,7 +4,7 @@
*
* FreeType PFR driver interface (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_SERVICE_PFR_H
-#include FT_SERVICE_FONT_FORMAT_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/services/svpfr.h>
+#include <freetype/internal/services/svfntfmt.h>
#include "pfrdrivr.h"
#include "pfrobjs.h"
diff --git a/src/3rdparty/freetype/src/pfr/pfrdrivr.h b/src/3rdparty/freetype/src/pfr/pfrdrivr.h
index 33b7b9413f..7646b4d1bd 100644
--- a/src/3rdparty/freetype/src/pfr/pfrdrivr.h
+++ b/src/3rdparty/freetype/src/pfr/pfrdrivr.h
@@ -4,7 +4,7 @@
*
* High-level Type PFR driver interface (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define PFRDRIVR_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pfr/pfrerror.h b/src/3rdparty/freetype/src/pfr/pfrerror.h
index 4829cfc000..33460ef4fd 100644
--- a/src/3rdparty/freetype/src/pfr/pfrerror.h
+++ b/src/3rdparty/freetype/src/pfr/pfrerror.h
@@ -4,7 +4,7 @@
*
* PFR error codes (specification only).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
#ifndef PFRERROR_H_
#define PFRERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -33,7 +33,7 @@
#define FT_ERR_PREFIX PFR_Err_
#define FT_ERR_BASE FT_Mod_Err_PFR
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* PFRERROR_H_ */
diff --git a/src/3rdparty/freetype/src/pfr/pfrgload.c b/src/3rdparty/freetype/src/pfr/pfrgload.c
index 6ef5856a8d..aa640c3b07 100644
--- a/src/3rdparty/freetype/src/pfr/pfrgload.c
+++ b/src/3rdparty/freetype/src/pfr/pfrgload.c
@@ -4,7 +4,7 @@
*
* FreeType PFR glyph loader (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,7 @@
#include "pfrgload.h"
#include "pfrsbit.h"
#include "pfrload.h" /* for macro definitions */
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "pfrerror.h"
@@ -451,7 +451,7 @@
case 1: /* 16-bit absolute value */
PFR_CHECK( 2 );
cur->x = PFR_NEXT_SHORT( p );
- FT_TRACE7(( " x.%d", cur->x ));
+ FT_TRACE7(( " x.%ld", cur->x ));
break;
case 2: /* 8-bit delta */
@@ -481,7 +481,7 @@
case 1: /* 16-bit absolute value */
PFR_CHECK( 2 );
cur->y = PFR_NEXT_SHORT( p );
- FT_TRACE7(( " y.%d", cur->y ));
+ FT_TRACE7(( " y.%ld", cur->y ));
break;
case 2: /* 8-bit delta */
diff --git a/src/3rdparty/freetype/src/pfr/pfrgload.h b/src/3rdparty/freetype/src/pfr/pfrgload.h
index d0e1420b67..f356b4c75b 100644
--- a/src/3rdparty/freetype/src/pfr/pfrgload.h
+++ b/src/3rdparty/freetype/src/pfr/pfrgload.h
@@ -4,7 +4,7 @@
*
* FreeType PFR glyph loader (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrload.c b/src/3rdparty/freetype/src/pfr/pfrload.c
index ccf0b7e1f8..a2832e55c7 100644
--- a/src/3rdparty/freetype/src/pfr/pfrload.c
+++ b/src/3rdparty/freetype/src/pfr/pfrload.c
@@ -4,7 +4,7 @@
*
* FreeType PFR loader (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,8 +17,8 @@
#include "pfrload.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
#include "pfrerror.h"
diff --git a/src/3rdparty/freetype/src/pfr/pfrload.h b/src/3rdparty/freetype/src/pfr/pfrload.h
index 2e7ffd0127..7615b9ce14 100644
--- a/src/3rdparty/freetype/src/pfr/pfrload.h
+++ b/src/3rdparty/freetype/src/pfr/pfrload.h
@@ -4,7 +4,7 @@
*
* FreeType PFR loader (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,7 @@
#define PFRLOAD_H_
#include "pfrobjs.h"
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftstream.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pfr/pfrobjs.c b/src/3rdparty/freetype/src/pfr/pfrobjs.c
index 9765f95c2f..918e7fd496 100644
--- a/src/3rdparty/freetype/src/pfr/pfrobjs.c
+++ b/src/3rdparty/freetype/src/pfr/pfrobjs.c
@@ -4,7 +4,7 @@
*
* FreeType PFR object methods (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,10 +21,10 @@
#include "pfrgload.h"
#include "pfrcmap.h"
#include "pfrsbit.h"
-#include FT_OUTLINE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_TRUETYPE_IDS_H
+#include <freetype/ftoutln.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftcalc.h>
+#include <freetype/ttnameid.h>
#include "pfrerror.h"
diff --git a/src/3rdparty/freetype/src/pfr/pfrobjs.h b/src/3rdparty/freetype/src/pfr/pfrobjs.h
index 39cffd07c5..808822f1c4 100644
--- a/src/3rdparty/freetype/src/pfr/pfrobjs.h
+++ b/src/3rdparty/freetype/src/pfr/pfrobjs.h
@@ -4,7 +4,7 @@
*
* FreeType PFR object methods (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrsbit.c b/src/3rdparty/freetype/src/pfr/pfrsbit.c
index 00a9616455..a6691e6d18 100644
--- a/src/3rdparty/freetype/src/pfr/pfrsbit.c
+++ b/src/3rdparty/freetype/src/pfr/pfrsbit.c
@@ -4,7 +4,7 @@
*
* FreeType PFR bitmap loader (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,8 +18,8 @@
#include "pfrsbit.h"
#include "pfrload.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
#include "pfrerror.h"
@@ -745,7 +745,7 @@
ypos + (FT_Long)ysize < FT_INT_MIN )
{
FT_TRACE1(( "pfr_slot_load_bitmap:" ));
- FT_TRACE1(( "huge bitmap glyph %dx%d over FT_GlyphSlot\n",
+ FT_TRACE1(( "huge bitmap glyph %ldx%ld over FT_GlyphSlot\n",
xpos, ypos ));
error = FT_THROW( Invalid_Pixel_Size );
}
diff --git a/src/3rdparty/freetype/src/pfr/pfrsbit.h b/src/3rdparty/freetype/src/pfr/pfrsbit.h
index 6568b90943..8cb0de0d25 100644
--- a/src/3rdparty/freetype/src/pfr/pfrsbit.h
+++ b/src/3rdparty/freetype/src/pfr/pfrsbit.h
@@ -4,7 +4,7 @@
*
* FreeType PFR bitmap loader (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrtypes.h b/src/3rdparty/freetype/src/pfr/pfrtypes.h
index 6a5f9d571b..06fb82d51a 100644
--- a/src/3rdparty/freetype/src/pfr/pfrtypes.h
+++ b/src/3rdparty/freetype/src/pfr/pfrtypes.h
@@ -4,7 +4,7 @@
*
* FreeType PFR data structures (specification only).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,7 @@
#ifndef PFRTYPES_H_
#define PFRTYPES_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pfr/rules.mk b/src/3rdparty/freetype/src/pfr/rules.mk
index f14ca699e2..a1fe82baff 100644
--- a/src/3rdparty/freetype/src/pfr/rules.mk
+++ b/src/3rdparty/freetype/src/pfr/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2019 by
+# Copyright (C) 2002-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psaux/Jamfile b/src/3rdparty/freetype/src/psaux/Jamfile
deleted file mode 100644
index 30bcc1c097..0000000000
--- a/src/3rdparty/freetype/src/psaux/Jamfile
+++ /dev/null
@@ -1,45 +0,0 @@
-# FreeType 2 src/psaux Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) psaux ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = afmparse
- psauxmod
- psconv
- psobjs
- t1cmap
- t1decode
- cffdecode
- psarrst
- psblues
- pserror
- psfont
- psft
- pshints
- psintrp
- psread
- psstack
- ;
- }
- else
- {
- _sources = psaux ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/psaux Jamfile
diff --git a/src/3rdparty/freetype/src/psaux/afmparse.c b/src/3rdparty/freetype/src/psaux/afmparse.c
index f78adbba3d..2d6a0d9a12 100644
--- a/src/3rdparty/freetype/src/psaux/afmparse.c
+++ b/src/3rdparty/freetype/src/psaux/afmparse.c
@@ -4,7 +4,7 @@
*
* AFM parser (body).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -15,10 +15,9 @@
*
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/freetype.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/psaux.h>
#ifndef T1_CONFIG_OPTION_NO_AFM
diff --git a/src/3rdparty/freetype/src/psaux/afmparse.h b/src/3rdparty/freetype/src/psaux/afmparse.h
index 2ceb77553b..16a3a3e902 100644
--- a/src/3rdparty/freetype/src/psaux/afmparse.h
+++ b/src/3rdparty/freetype/src/psaux/afmparse.h
@@ -4,7 +4,7 @@
*
* AFM parser (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define AFMPARSE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/psaux.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/cffdecode.c b/src/3rdparty/freetype/src/psaux/cffdecode.c
index 17cccf818b..3d2da1e03c 100644
--- a/src/3rdparty/freetype/src/psaux/cffdecode.c
+++ b/src/3rdparty/freetype/src/psaux/cffdecode.c
@@ -4,7 +4,7 @@
*
* PostScript CFF (Type 2) decoding routines (body).
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_SERVICE_H
-#include FT_SERVICE_CFF_TABLE_LOAD_H
+#include <freetype/freetype.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftserv.h>
+#include <freetype/internal/services/svcfftl.h>
#include "cffdecode.h"
#include "psobjs.h"
@@ -330,7 +329,7 @@
builder->left_bearing.x = 0;
builder->left_bearing.y = 0;
- builder->pos_x = adx - asb;
+ builder->pos_x = SUB_LONG( adx, asb );
builder->pos_y = ady;
/* Now load `achar' on top of the base outline. */
@@ -530,6 +529,9 @@
builder->path_begun = 0;
+ if ( !charstring_base )
+ return FT_Err_Ok;
+
zone->base = charstring_base;
limit = zone->limit = charstring_base + charstring_len;
ip = zone->cursor = zone->base;
diff --git a/src/3rdparty/freetype/src/psaux/cffdecode.h b/src/3rdparty/freetype/src/psaux/cffdecode.h
index a6691979f0..77a4962698 100644
--- a/src/3rdparty/freetype/src/psaux/cffdecode.h
+++ b/src/3rdparty/freetype/src/psaux/cffdecode.h
@@ -4,7 +4,7 @@
*
* PostScript CFF (Type 2) decoding routines (specification).
*
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define CFFDECODE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/psaux.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/module.mk b/src/3rdparty/freetype/src/psaux/module.mk
index bb0886abdf..651db01426 100644
--- a/src/3rdparty/freetype/src/psaux/module.mk
+++ b/src/3rdparty/freetype/src/psaux/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psaux/psarrst.c b/src/3rdparty/freetype/src/psaux/psarrst.c
index 011803b416..8751d275fb 100644
--- a/src/3rdparty/freetype/src/psaux/psarrst.c
+++ b/src/3rdparty/freetype/src/psaux/psarrst.c
@@ -37,7 +37,7 @@
#include "psft.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "psglue.h"
#include "psarrst.h"
diff --git a/src/3rdparty/freetype/src/psaux/psaux.c b/src/3rdparty/freetype/src/psaux/psaux.c
index 1db0462551..f4282222a6 100644
--- a/src/3rdparty/freetype/src/psaux/psaux.c
+++ b/src/3rdparty/freetype/src/psaux/psaux.c
@@ -4,7 +4,7 @@
*
* FreeType auxiliary PostScript driver component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "afmparse.c"
#include "psauxmod.c"
diff --git a/src/3rdparty/freetype/src/psaux/psauxerr.h b/src/3rdparty/freetype/src/psaux/psauxerr.h
index 523e1886c2..8b9a958aec 100644
--- a/src/3rdparty/freetype/src/psaux/psauxerr.h
+++ b/src/3rdparty/freetype/src/psaux/psauxerr.h
@@ -4,7 +4,7 @@
*
* PS auxiliary module error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef PSAUXERR_H_
#define PSAUXERR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX PSaux_Err_
#define FT_ERR_BASE FT_Mod_Err_PSaux
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* PSAUXERR_H_ */
diff --git a/src/3rdparty/freetype/src/psaux/psauxmod.c b/src/3rdparty/freetype/src/psaux/psauxmod.c
index 5df8e69056..e73ba22451 100644
--- a/src/3rdparty/freetype/src/psaux/psauxmod.c
+++ b/src/3rdparty/freetype/src/psaux/psauxmod.c
@@ -4,7 +4,7 @@
*
* FreeType auxiliary PostScript module implementation (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,7 +16,6 @@
*/
-#include <ft2build.h>
#include "psauxmod.h"
#include "psobjs.h"
#include "t1decode.h"
@@ -171,9 +170,9 @@
};
- FT_CALLBACK_TABLE_DEF
- const FT_Module_Class psaux_module_class =
- {
+ FT_DEFINE_MODULE(
+ psaux_module_class,
+
0,
sizeof ( FT_ModuleRec ),
"psaux",
@@ -185,7 +184,7 @@
(FT_Module_Constructor)NULL, /* module_init */
(FT_Module_Destructor) NULL, /* module_done */
(FT_Module_Requester) NULL /* get_interface */
- };
+ )
/* END */
diff --git a/src/3rdparty/freetype/src/psaux/psauxmod.h b/src/3rdparty/freetype/src/psaux/psauxmod.h
index a0eda0bfc0..a6bebe4b94 100644
--- a/src/3rdparty/freetype/src/psaux/psauxmod.h
+++ b/src/3rdparty/freetype/src/psaux/psauxmod.h
@@ -4,7 +4,7 @@
*
* FreeType auxiliary PostScript module implementation (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,10 +20,9 @@
#define PSAUXMOD_H_
-#include <ft2build.h>
-#include FT_MODULE_H
+#include <freetype/ftmodapi.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/psaux.h>
FT_BEGIN_HEADER
@@ -35,10 +34,24 @@ FT_BEGIN_HEADER
FT_CALLBACK_TABLE
const PS_Builder_FuncsRec ps_builder_funcs;
+#ifndef T1_CONFIG_OPTION_NO_AFM
+ FT_CALLBACK_TABLE
+ const AFM_Parser_FuncsRec afm_parser_funcs;
+#endif
+
+ FT_CALLBACK_TABLE
+ const T1_CMap_ClassesRec t1_cmap_classes;
+
+ FT_CALLBACK_TABLE
+ const CFF_Decoder_FuncsRec cff_decoder_funcs;
+
FT_EXPORT_VAR( const FT_Module_Class ) psaux_driver_class;
+ FT_DECLARE_MODULE( psaux_module_class )
+
+
FT_END_HEADER
#endif /* PSAUXMOD_H_ */
diff --git a/src/3rdparty/freetype/src/psaux/psblues.c b/src/3rdparty/freetype/src/psaux/psblues.c
index 89738ce474..3878e9bde0 100644
--- a/src/3rdparty/freetype/src/psaux/psblues.c
+++ b/src/3rdparty/freetype/src/psaux/psblues.c
@@ -37,7 +37,7 @@
#include "psft.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "psblues.h"
#include "pshints.h"
diff --git a/src/3rdparty/freetype/src/psaux/psconv.c b/src/3rdparty/freetype/src/psaux/psconv.c
index c88761681c..4cf5cd5d88 100644
--- a/src/3rdparty/freetype/src/psaux/psconv.c
+++ b/src/3rdparty/freetype/src/psaux/psconv.c
@@ -4,7 +4,7 @@
*
* Some convenience conversions (body).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,9 +16,8 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/ftdebug.h>
#include "psconv.h"
#include "psauxerr.h"
diff --git a/src/3rdparty/freetype/src/psaux/psconv.h b/src/3rdparty/freetype/src/psaux/psconv.h
index 6b24bf6fc9..833e827364 100644
--- a/src/3rdparty/freetype/src/psaux/psconv.h
+++ b/src/3rdparty/freetype/src/psaux/psconv.h
@@ -4,7 +4,7 @@
*
* Some convenience conversions (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define PSCONV_H_
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/psaux.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/pserror.h b/src/3rdparty/freetype/src/psaux/pserror.h
index b2156b3318..5738853fac 100644
--- a/src/3rdparty/freetype/src/psaux/pserror.h
+++ b/src/3rdparty/freetype/src/psaux/pserror.h
@@ -40,7 +40,7 @@
#define PSERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -49,7 +49,8 @@
#define FT_ERR_BASE FT_Mod_Err_CF2
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
+#include <freetype/internal/compiler-macros.h>
#include "psft.h"
diff --git a/src/3rdparty/freetype/src/psaux/psfont.c b/src/3rdparty/freetype/src/psaux/psfont.c
index 00e4210819..0db1f0c5bc 100644
--- a/src/3rdparty/freetype/src/psaux/psfont.c
+++ b/src/3rdparty/freetype/src/psaux/psfont.c
@@ -36,8 +36,7 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_CALC_H
+#include <freetype/internal/ftcalc.h>
#include "psft.h"
diff --git a/src/3rdparty/freetype/src/psaux/psfont.h b/src/3rdparty/freetype/src/psaux/psfont.h
index 8fbacbb6e3..836fce4e4d 100644
--- a/src/3rdparty/freetype/src/psaux/psfont.h
+++ b/src/3rdparty/freetype/src/psaux/psfont.h
@@ -40,7 +40,7 @@
#define PSFONT_H_
-#include FT_SERVICE_CFF_TABLE_LOAD_H
+#include <freetype/internal/services/svcfftl.h>
#include "psft.h"
#include "psblues.h"
diff --git a/src/3rdparty/freetype/src/psaux/psft.c b/src/3rdparty/freetype/src/psaux/psft.c
index 54be468343..41c16542c1 100644
--- a/src/3rdparty/freetype/src/psaux/psft.c
+++ b/src/3rdparty/freetype/src/psaux/psft.c
@@ -37,7 +37,7 @@
#include "psft.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "psfont.h"
#include "pserror.h"
@@ -45,11 +45,11 @@
#include "cffdecode.h"
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/services/svmm.h>
#endif
-#include FT_SERVICE_CFF_TABLE_LOAD_H
+#include <freetype/internal/services/svcfftl.h>
#define CF2_MAX_SIZE cf2_intToFixed( 2000 ) /* max ppem */
@@ -313,7 +313,7 @@
FT_Error error = FT_Err_Ok;
CF2_Font font;
- FT_Bool is_t1 = decoder->builder.is_t1;
+ FT_Bool is_t1 = decoder->builder.is_t1;
FT_ASSERT( decoder &&
@@ -385,7 +385,7 @@
FT_ZERO( &buf );
buf.start =
buf.ptr = charstring_base;
- buf.end = charstring_base + charstring_len;
+ buf.end = FT_OFFSET( charstring_base, charstring_len );
FT_ZERO( &transform );
@@ -697,7 +697,7 @@
FT_ASSERT( charstring + len >= charstring );
buf->start = charstring;
- buf->end = charstring + len;
+ buf->end = FT_OFFSET( charstring, len );
buf->ptr = buf->start;
return FT_Err_Ok;
@@ -820,7 +820,7 @@
/* The CID driver stores subroutines with seed bytes. This */
/* case is taken care of when decoder->subrs_len == 0. */
if ( decoder->locals_len )
- buf->end = buf->start + decoder->locals_len[idx];
+ buf->end = FT_OFFSET( buf->start, decoder->locals_len[idx] );
else
{
/* We are using subroutines from a CID font. We must adjust */
diff --git a/src/3rdparty/freetype/src/psaux/psft.h b/src/3rdparty/freetype/src/psaux/psft.h
index 4c930f0d73..3da454e601 100644
--- a/src/3rdparty/freetype/src/psaux/psft.h
+++ b/src/3rdparty/freetype/src/psaux/psft.h
@@ -40,17 +40,17 @@
#define PSFT_H_
+#include <freetype/internal/compiler-macros.h>
#include "pstypes.h"
-
/* TODO: disable asserts for now */
#define CF2_NDEBUG
-#include FT_SYSTEM_H
+#include <freetype/ftsystem.h>
#include "psglue.h"
-#include FT_INTERNAL_POSTSCRIPT_AUX_H /* for PS_Decoder */
+#include <freetype/internal/psaux.h> /* for PS_Decoder */
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/pshints.c b/src/3rdparty/freetype/src/psaux/pshints.c
index 1cbecd2b19..ce8cfca715 100644
--- a/src/3rdparty/freetype/src/psaux/pshints.c
+++ b/src/3rdparty/freetype/src/psaux/pshints.c
@@ -37,7 +37,7 @@
#include "psft.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "psglue.h"
#include "psfont.h"
@@ -310,7 +310,7 @@
CF2_Hint hint = &hintmap->edge[i];
- FT_TRACE6(( " %3d %7.2f %7.2f %5d %s%s%s%s\n",
+ FT_TRACE6(( " %3ld %7.2f %7.2f %5d %s%s%s%s\n",
hint->index,
hint->csCoord / 65536.0,
hint->dsCoord / ( hint->scale * 1.0 ),
diff --git a/src/3rdparty/freetype/src/psaux/psintrp.c b/src/3rdparty/freetype/src/psaux/psintrp.c
index e2f3accdd5..519c694447 100644
--- a/src/3rdparty/freetype/src/psaux/psintrp.c
+++ b/src/3rdparty/freetype/src/psaux/psintrp.c
@@ -37,8 +37,8 @@
#include "psft.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_SERVICE_CFF_TABLE_LOAD_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/services/svcfftl.h>
#include "psglue.h"
#include "psfont.h"
@@ -1433,6 +1433,13 @@
lastError = error2; /* pass FreeType error through */
goto exit;
}
+
+ /* save the left bearing and width of the SEAC */
+ /* glyph as they will be erased by the next load */
+
+ left_bearing = *decoder->builder.left_bearing;
+ advance = *decoder->builder.advance;
+
cf2_interpT2CharString( font,
&component,
callbacks,
@@ -1443,11 +1450,14 @@
&dummyWidth );
cf2_freeT1SeacComponent( decoder, &component );
- /* save the left bearing and width of the base */
- /* character as they will be erased by the next load */
+ /* If the SEAC glyph doesn't have a (H)SBW of its */
+ /* own use the values from the base glyph. */
- left_bearing = *decoder->builder.left_bearing;
- advance = *decoder->builder.advance;
+ if ( !haveWidth )
+ {
+ left_bearing = *decoder->builder.left_bearing;
+ advance = *decoder->builder.advance;
+ }
decoder->builder.left_bearing->x = 0;
decoder->builder.left_bearing->y = 0;
@@ -1473,8 +1483,8 @@
&dummyWidth );
cf2_freeT1SeacComponent( decoder, &component );
- /* restore the left side bearing and */
- /* advance width of the base character */
+ /* restore the left side bearing and advance width */
+ /* of the SEAC glyph or base character (saved above) */
*decoder->builder.left_bearing = left_bearing;
*decoder->builder.advance = advance;
diff --git a/src/3rdparty/freetype/src/psaux/psobjs.c b/src/3rdparty/freetype/src/psaux/psobjs.c
index 8bfdb92332..defc4d4fce 100644
--- a/src/3rdparty/freetype/src/psaux/psobjs.c
+++ b/src/3rdparty/freetype/src/psaux/psobjs.c
@@ -4,7 +4,7 @@
*
* Auxiliary functions for PostScript fonts (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_DRIVER_H
+#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"
@@ -214,7 +213,7 @@
}
/* add the object to the base block and adjust offset */
- table->elements[idx] = table->block + table->cursor;
+ table->elements[idx] = FT_OFFSET( table->block, table->cursor );
table->lengths [idx] = length;
FT_MEM_COPY( table->block + table->cursor, object, length );
@@ -1233,7 +1232,7 @@
bbox->xMax = FT_RoundFix( temp[2] );
bbox->yMax = FT_RoundFix( temp[3] );
- FT_TRACE4(( " [%d %d %d %d]",
+ FT_TRACE4(( " [%ld %ld %ld %ld]",
bbox->xMin / 65536,
bbox->yMin / 65536,
bbox->xMax / 65536,
@@ -1287,7 +1286,7 @@
bbox->xMax = FT_RoundFix( temp[i + 2 * max_objects] );
bbox->yMax = FT_RoundFix( temp[i + 3 * max_objects] );
- FT_TRACE4(( " [%d %d %d %d]",
+ FT_TRACE4(( " [%ld %ld %ld %ld]",
bbox->xMin / 65536,
bbox->yMin / 65536,
bbox->xMax / 65536,
@@ -2577,7 +2576,7 @@
FT_UShort seed )
{
PS_Conv_EexecDecode( &buffer,
- buffer + length,
+ FT_OFFSET( buffer, length ),
buffer,
length,
&seed );
diff --git a/src/3rdparty/freetype/src/psaux/psobjs.h b/src/3rdparty/freetype/src/psaux/psobjs.h
index c44dc450ec..fdad672b6d 100644
--- a/src/3rdparty/freetype/src/psaux/psobjs.h
+++ b/src/3rdparty/freetype/src/psaux/psobjs.h
@@ -4,7 +4,7 @@
*
* Auxiliary functions for PostScript fonts (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define PSOBJS_H_
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/cffotypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/psread.c b/src/3rdparty/freetype/src/psaux/psread.c
index 86bfc03c6e..7f657f2cdc 100644
--- a/src/3rdparty/freetype/src/psaux/psread.c
+++ b/src/3rdparty/freetype/src/psaux/psread.c
@@ -37,7 +37,7 @@
#include "psft.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "psglue.h"
diff --git a/src/3rdparty/freetype/src/psaux/psstack.c b/src/3rdparty/freetype/src/psaux/psstack.c
index 6659068001..7ae5256ef1 100644
--- a/src/3rdparty/freetype/src/psaux/psstack.c
+++ b/src/3rdparty/freetype/src/psaux/psstack.c
@@ -37,7 +37,7 @@
#include "psft.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "psglue.h"
#include "psfont.h"
@@ -59,12 +59,12 @@
CF2_Stack stack = NULL;
- if ( !FT_NEW( stack ) )
- {
- /* initialize the structure; FT_NEW zeroes it */
- stack->memory = memory;
- stack->error = e;
- }
+ if ( FT_NEW( stack ) )
+ return NULL;
+
+ /* initialize the structure; FT_NEW zeroes it */
+ stack->memory = memory;
+ stack->error = e;
/* allocate the stack buffer */
if ( FT_NEW_ARRAY( stack->buffer, stackSize ) )
diff --git a/src/3rdparty/freetype/src/psaux/psstack.h b/src/3rdparty/freetype/src/psaux/psstack.h
index 18cd39bc6a..b9ef9edf1b 100644
--- a/src/3rdparty/freetype/src/psaux/psstack.h
+++ b/src/3rdparty/freetype/src/psaux/psstack.h
@@ -39,6 +39,7 @@
#ifndef PSSTACK_H_
#define PSSTACK_H_
+#include <freetype/internal/compiler-macros.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/pstypes.h b/src/3rdparty/freetype/src/psaux/pstypes.h
index 041287e8d5..435ef7e1fe 100644
--- a/src/3rdparty/freetype/src/psaux/pstypes.h
+++ b/src/3rdparty/freetype/src/psaux/pstypes.h
@@ -39,8 +39,7 @@
#ifndef PSTYPES_H_
#define PSTYPES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#include <freetype/freetype.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/rules.mk b/src/3rdparty/freetype/src/psaux/rules.mk
index 2de734d547..f49aecbc79 100644
--- a/src/3rdparty/freetype/src/psaux/rules.mk
+++ b/src/3rdparty/freetype/src/psaux/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psaux/t1cmap.c b/src/3rdparty/freetype/src/psaux/t1cmap.c
index d62d2d5c81..e21e93ca26 100644
--- a/src/3rdparty/freetype/src/psaux/t1cmap.c
+++ b/src/3rdparty/freetype/src/psaux/t1cmap.c
@@ -4,7 +4,7 @@
*
* Type 1 character map support (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,7 +18,7 @@
#include "t1cmap.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include "psauxerr.h"
diff --git a/src/3rdparty/freetype/src/psaux/t1cmap.h b/src/3rdparty/freetype/src/psaux/t1cmap.h
index d325e7b5a6..031796510f 100644
--- a/src/3rdparty/freetype/src/psaux/t1cmap.h
+++ b/src/3rdparty/freetype/src/psaux/t1cmap.h
@@ -4,7 +4,7 @@
*
* Type 1 character map support (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,9 +19,8 @@
#ifndef T1CMAP_H_
#define T1CMAP_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/t1types.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psaux/t1decode.c b/src/3rdparty/freetype/src/psaux/t1decode.c
index c2b3729b53..2ed27ca19e 100644
--- a/src/3rdparty/freetype/src/psaux/t1decode.c
+++ b/src/3rdparty/freetype/src/psaux/t1decode.c
@@ -4,7 +4,7 @@
*
* PostScript Type 1 decoding routines (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-#include FT_INTERNAL_HASH_H
-#include FT_OUTLINE_H
+#include <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"
@@ -367,6 +366,12 @@
FT_GlyphLoader_Prepare( decoder->builder.loader ); /* prepare loader */
+ /* save the left bearing and width of the SEAC */
+ /* glyph as they will be erased by the next load */
+
+ left_bearing = decoder->builder.left_bearing;
+ advance = decoder->builder.advance;
+
/* the seac operator must not be nested */
decoder->seac = TRUE;
error = t1_decoder_parse_glyph( decoder, (FT_UInt)bchar_index );
@@ -374,11 +379,14 @@
if ( error )
goto Exit;
- /* save the left bearing and width of the base character */
- /* as they will be erased by the next load. */
+ /* If the SEAC glyph doesn't have a (H)SBW of its */
+ /* own use the values from the base glyph. */
- left_bearing = decoder->builder.left_bearing;
- advance = decoder->builder.advance;
+ if ( decoder->builder.parse_state != T1_Parse_Have_Width )
+ {
+ left_bearing = decoder->builder.left_bearing;
+ advance = decoder->builder.advance;
+ }
decoder->builder.left_bearing.x = 0;
decoder->builder.left_bearing.y = 0;
@@ -396,8 +404,8 @@
if ( error )
goto Exit;
- /* restore the left side bearing and */
- /* advance width of the base character */
+ /* restore the left side bearing and advance width */
+ /* of the SEAC glyph or base character (saved above) */
decoder->builder.left_bearing = left_bearing;
decoder->builder.advance = advance;
@@ -650,10 +658,8 @@
if ( value > 32000 || value < -32000 )
{
if ( large_int )
- {
FT_ERROR(( "t1_decoder_parse_charstrings:"
" no `div' after large integer\n" ));
- }
else
large_int = TRUE;
}
@@ -1231,8 +1237,8 @@
FT_UNUSED( orig_y );
- /* the `metrics_only' indicates that we only want to compute */
- /* the glyph's metrics (lsb + advance width), not load the */
+ /* `metrics_only' indicates that we only want to compute the */
+ /* glyph's metrics (lsb + advance width) without loading the */
/* rest of it; so exit immediately */
if ( builder->metrics_only )
{
@@ -1266,8 +1272,8 @@
x = ADD_LONG( builder->pos_x, top[0] );
y = ADD_LONG( builder->pos_y, top[1] );
- /* the `metrics_only' indicates that we only want to compute */
- /* the glyph's metrics (lsb + advance width), not load the */
+ /* `metrics_only' indicates that we only want to compute the */
+ /* glyph's metrics (lsb + advance width) without loading the */
/* rest of it; so exit immediately */
if ( builder->metrics_only )
{
@@ -1690,6 +1696,7 @@
FT_Byte* ip;
FT_Byte* limit;
T1_Builder builder = &decoder->builder;
+ FT_Bool large_int;
#ifdef FT_DEBUG_LEVEL_TRACE
FT_Bool bol = TRUE;
@@ -1707,6 +1714,8 @@
limit = zone->limit = charstring_base + charstring_len;
ip = zone->cursor = zone->base;
+ large_int = FALSE;
+
/* now, execute loop */
while ( ip < limit )
{
@@ -1718,7 +1727,7 @@
#ifdef FT_DEBUG_LEVEL_TRACE
if ( bol )
{
- FT_TRACE5(( " (%d)", decoder->top - decoder->stack ));
+ FT_TRACE5(( " (%ld)", decoder->top - decoder->stack ));
bol = FALSE;
}
#endif
@@ -1740,8 +1749,6 @@
case 7:
case 8:
case 9:
- case 10:
- case 11:
case 14:
case 15:
case 21:
@@ -1750,6 +1757,13 @@
case 31:
goto No_Width;
+ case 10:
+ op = op_callsubr;
+ break;
+ case 11:
+ op = op_return;
+ break;
+
case 13:
op = op_hsbw;
break;
@@ -1767,6 +1781,9 @@
case 7:
op = op_sbw;
break;
+ case 12:
+ op = op_div;
+ break;
default:
goto No_Width;
@@ -1796,13 +1813,19 @@
/* anyway. */
if ( value > 32000 || value < -32000 )
{
- FT_ERROR(( "t1_decoder_parse_metrics:"
- " large integer found for width\n" ));
- goto Syntax_Error;
+ if ( large_int )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " no `div' after large integer\n" ));
+ goto Syntax_Error;
+ }
+ else
+ large_int = TRUE;
}
else
{
- value = (FT_Int32)( (FT_UInt32)value << 16 );
+ if ( !large_int )
+ value = (FT_Int32)( (FT_UInt32)value << 16 );
}
break;
@@ -1827,7 +1850,8 @@
value = -( ( ( ip[-2] - 251 ) * 256 ) + ip[-1] + 108 );
}
- value = (FT_Int32)( (FT_UInt32)value << 16 );
+ if ( !large_int )
+ value = (FT_Int32)( (FT_UInt32)value << 16 );
}
else
{
@@ -1837,6 +1861,13 @@
}
}
+ if ( large_int && !( op == op_none || op == op_div ) )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " no `div' after large integer\n" ));
+ goto Syntax_Error;
+ }
+
/**********************************************************************
*
* Push value on stack, or process operator
@@ -1851,6 +1882,9 @@
}
#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( large_int )
+ FT_TRACE4(( " %d", value ));
+ else
FT_TRACE4(( " %d", value / 65536 ));
#endif
@@ -1869,11 +1903,21 @@
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( top - decoder->stack != num_args )
- FT_TRACE0(( "t1_decoder_parse_metrics:"
- " too much operands on the stack"
- " (seen %d, expected %d)\n",
- top - decoder->stack, num_args ));
+ switch ( op )
+ {
+ case op_callsubr:
+ case op_div:
+ case op_return:
+ break;
+
+ default:
+ if ( top - decoder->stack != num_args )
+ FT_TRACE0(( "t1_decoder_parse_metrics:"
+ " too much operands on the stack"
+ " (seen %ld, expected %d)\n",
+ top - decoder->stack, num_args ));
+ break;
+ }
#endif /* FT_DEBUG_LEVEL_TRACE */
@@ -1893,8 +1937,8 @@
builder->advance.y = 0;
/* we only want to compute the glyph's metrics */
- /* (lsb + advance width), not load the rest of */
- /* it; so exit immediately */
+ /* (lsb + advance width) without loading the */
+ /* rest of it; so exit immediately */
FT_TRACE4(( "\n" ));
return FT_Err_Ok;
@@ -1912,17 +1956,116 @@
builder->advance.y = top[3];
/* we only want to compute the glyph's metrics */
- /* (lsb + advance width), not load the rest of */
- /* it; so exit immediately */
+ /* (lsb + advance width), without loading the */
+ /* rest of it; so exit immediately */
FT_TRACE4(( "\n" ));
return FT_Err_Ok;
+ case op_div:
+ FT_TRACE4(( " div" ));
+
+ /* if `large_int' is set, we divide unscaled numbers; */
+ /* otherwise, we divide numbers in 16.16 format -- */
+ /* in both cases, it is the same operation */
+ *top = FT_DivFix( top[0], top[1] );
+ top++;
+
+ large_int = FALSE;
+ break;
+
+ case op_callsubr:
+ {
+ FT_Int idx;
+
+
+ FT_TRACE4(( " callsubr" ));
+
+ idx = Fix2Int( top[0] );
+
+ if ( decoder->subrs_hash )
+ {
+ size_t* val = ft_hash_num_lookup( idx,
+ decoder->subrs_hash );
+
+
+ if ( val )
+ idx = *val;
+ else
+ idx = -1;
+ }
+
+ if ( idx < 0 || idx >= decoder->num_subrs )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " invalid subrs index\n" ));
+ goto Syntax_Error;
+ }
+
+ if ( zone - decoder->zones >= T1_MAX_SUBRS_CALLS )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " too many nested subrs\n" ));
+ goto Syntax_Error;
+ }
+
+ zone->cursor = ip; /* save current instruction pointer */
+
+ zone++;
+
+ /* The Type 1 driver stores subroutines without the seed bytes. */
+ /* The CID driver stores subroutines with seed bytes. This */
+ /* case is taken care of when decoder->subrs_len == 0. */
+ zone->base = decoder->subrs[idx];
+
+ if ( decoder->subrs_len )
+ zone->limit = zone->base + decoder->subrs_len[idx];
+ else
+ {
+ /* We are using subroutines from a CID font. We must adjust */
+ /* for the seed bytes. */
+ zone->base += ( decoder->lenIV >= 0 ? decoder->lenIV : 0 );
+ zone->limit = decoder->subrs[idx + 1];
+ }
+
+ zone->cursor = zone->base;
+
+ if ( !zone->base )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " invoking empty subrs\n" ));
+ goto Syntax_Error;
+ }
+
+ decoder->zone = zone;
+ ip = zone->base;
+ limit = zone->limit;
+ break;
+ }
+
+ case op_return:
+ FT_TRACE4(( " return" ));
+
+ if ( zone <= decoder->zones )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " unexpected return\n" ));
+ goto Syntax_Error;
+ }
+
+ zone--;
+ ip = zone->cursor;
+ limit = zone->limit;
+ decoder->zone = zone;
+ break;
+
default:
FT_ERROR(( "t1_decoder_parse_metrics:"
" unhandled opcode %d\n", op ));
goto Syntax_Error;
}
+ decoder->top = top;
+
} /* general operator processing */
} /* while ip < limit */
diff --git a/src/3rdparty/freetype/src/psaux/t1decode.h b/src/3rdparty/freetype/src/psaux/t1decode.h
index 1b5d6263d3..b793504ac6 100644
--- a/src/3rdparty/freetype/src/psaux/t1decode.h
+++ b/src/3rdparty/freetype/src/psaux/t1decode.h
@@ -4,7 +4,7 @@
*
* PostScript Type 1 decoding routines (specification).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define T1DECODE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/t1types.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pshinter/Jamfile b/src/3rdparty/freetype/src/pshinter/Jamfile
deleted file mode 100644
index 0e44c19148..0000000000
--- a/src/3rdparty/freetype/src/pshinter/Jamfile
+++ /dev/null
@@ -1,34 +0,0 @@
-# FreeType 2 src/pshinter Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) pshinter ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pshalgo
- pshglob
- pshmod
- pshpic
- pshrec
- ;
- }
- else
- {
- _sources = pshinter ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/pshinter Jamfile
diff --git a/src/3rdparty/freetype/src/pshinter/module.mk b/src/3rdparty/freetype/src/pshinter/module.mk
index 0a12a260e1..b440d2e76a 100644
--- a/src/3rdparty/freetype/src/pshinter/module.mk
+++ b/src/3rdparty/freetype/src/pshinter/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/pshinter/pshalgo.c b/src/3rdparty/freetype/src/pshinter/pshalgo.c
index 0c5ae62699..920b9a74b5 100644
--- a/src/3rdparty/freetype/src/pshinter/pshalgo.c
+++ b/src/3rdparty/freetype/src/pshinter/pshalgo.c
@@ -4,7 +4,7 @@
*
* PostScript hinting algorithm (body).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftcalc.h>
#include "pshalgo.h"
#include "pshnterr.h"
diff --git a/src/3rdparty/freetype/src/pshinter/pshalgo.h b/src/3rdparty/freetype/src/pshinter/pshalgo.h
index 6859e95cd2..5367a5d164 100644
--- a/src/3rdparty/freetype/src/pshinter/pshalgo.h
+++ b/src/3rdparty/freetype/src/pshinter/pshalgo.h
@@ -4,7 +4,7 @@
*
* PostScript hinting algorithm (specification).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/pshglob.c b/src/3rdparty/freetype/src/pshinter/pshglob.c
index b021e6e42a..cdc1c3af0e 100644
--- a/src/3rdparty/freetype/src/pshinter/pshglob.c
+++ b/src/3rdparty/freetype/src/pshinter/pshglob.c
@@ -5,7 +5,7 @@
* PostScript hinter global hinting management (body).
* Inspired by the new auto-hinter module.
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
@@ -17,10 +17,9 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_CALC_H
+#include <freetype/freetype.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftcalc.h>
#include "pshglob.h"
#ifdef DEBUG_HINTER
diff --git a/src/3rdparty/freetype/src/pshinter/pshglob.h b/src/3rdparty/freetype/src/pshinter/pshglob.h
index 0049d4c0bc..8181324e5e 100644
--- a/src/3rdparty/freetype/src/pshinter/pshglob.h
+++ b/src/3rdparty/freetype/src/pshinter/pshglob.h
@@ -4,7 +4,7 @@
*
* PostScript hinter global hinting management.
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,8 @@
#define PSHGLOB_H_
-#include FT_FREETYPE_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include <freetype/freetype.h>
+#include <freetype/internal/pshints.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pshinter/pshinter.c b/src/3rdparty/freetype/src/pshinter/pshinter.c
index 16c3a0a117..3cca0ad7c2 100644
--- a/src/3rdparty/freetype/src/pshinter/pshinter.c
+++ b/src/3rdparty/freetype/src/pshinter/pshinter.c
@@ -4,7 +4,7 @@
*
* FreeType PostScript Hinting module
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "pshalgo.c"
#include "pshglob.c"
diff --git a/src/3rdparty/freetype/src/pshinter/pshmod.c b/src/3rdparty/freetype/src/pshinter/pshmod.c
index 2d36ea2a6a..e0abd386f9 100644
--- a/src/3rdparty/freetype/src/pshinter/pshmod.c
+++ b/src/3rdparty/freetype/src/pshinter/pshmod.c
@@ -4,7 +4,7 @@
*
* FreeType PostScript hinter module implementation (body).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
#include "pshrec.h"
#include "pshalgo.h"
+#include "pshmod.h"
/* the Postscript Hinter module structure */
diff --git a/src/3rdparty/freetype/src/pshinter/pshmod.h b/src/3rdparty/freetype/src/pshinter/pshmod.h
index ea8771308a..2a6eb1c469 100644
--- a/src/3rdparty/freetype/src/pshinter/pshmod.h
+++ b/src/3rdparty/freetype/src/pshinter/pshmod.h
@@ -4,7 +4,7 @@
*
* PostScript hinter module interface (specification).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define PSHMOD_H_
-#include <ft2build.h>
-#include FT_MODULE_H
+#include <freetype/ftmodapi.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/pshinter/pshnterr.h b/src/3rdparty/freetype/src/pshinter/pshnterr.h
index fb9dbca2b1..d67955c410 100644
--- a/src/3rdparty/freetype/src/pshinter/pshnterr.h
+++ b/src/3rdparty/freetype/src/pshinter/pshnterr.h
@@ -4,7 +4,7 @@
*
* PS Hinter error codes (specification only).
*
- * Copyright (C) 2003-2019 by
+ * Copyright (C) 2003-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
#ifndef PSHNTERR_H_
#define PSHNTERR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -33,7 +33,7 @@
#define FT_ERR_PREFIX PSH_Err_
#define FT_ERR_BASE FT_Mod_Err_PShinter
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* PSHNTERR_H_ */
diff --git a/src/3rdparty/freetype/src/pshinter/pshpic.c b/src/3rdparty/freetype/src/pshinter/pshpic.c
deleted file mode 100644
index 465ad31885..0000000000
--- a/src/3rdparty/freetype/src/pshinter/pshpic.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshpic.c */
-/* */
-/* The FreeType position independent code services for pshinter module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "pshpic.h"
-#include "pshnterr.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from pshmod.c */
- void
- FT_Init_Class_pshinter_interface( FT_Library library,
- PSHinter_Interface* clazz );
-
- void
- pshinter_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->pshinter )
- {
- FT_FREE( pic_container->pshinter );
- pic_container->pshinter = NULL;
- }
- }
-
-
- FT_Error
- pshinter_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- PSHinterPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->pshinter = container;
-
- /* add call to initialization function when you add new scripts */
- FT_Init_Class_pshinter_interface(
- library, &container->pshinter_interface );
-
- if ( error )
- pshinter_module_class_pic_free( library );
-
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/pshinter/pshpic.h b/src/3rdparty/freetype/src/pshinter/pshpic.h
deleted file mode 100644
index 4469ba87c8..0000000000
--- a/src/3rdparty/freetype/src/pshinter/pshpic.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* pshpic.h */
-/* */
-/* The FreeType position independent code services for pshinter module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSHPIC_H_
-#define PSHPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define PSHINTER_INTERFACE_GET pshinter_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
-
-FT_BEGIN_HEADER
-
- typedef struct PSHinterPIC_
- {
- PSHinter_Interface pshinter_interface;
-
- } PSHinterPIC;
-
-
-#define GET_PIC( lib ) ( (PSHinterPIC*)( (lib)->pic_container.pshinter ) )
-
-#define PSHINTER_INTERFACE_GET ( GET_PIC( library )->pshinter_interface )
-
- /* see pshpic.c for the implementation */
- void
- pshinter_module_class_pic_free( FT_Library library );
-
- FT_Error
- pshinter_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* PSHPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/pshinter/pshrec.c b/src/3rdparty/freetype/src/pshinter/pshrec.c
index 9dd09efe4c..bddccf2a6e 100644
--- a/src/3rdparty/freetype/src/pshinter/pshrec.c
+++ b/src/3rdparty/freetype/src/pshinter/pshrec.c
@@ -4,7 +4,7 @@
*
* FreeType PostScript hints recorder (body).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
+#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"
@@ -875,7 +874,7 @@
if ( error )
{
FT_ERROR(( "ps_hints_stem: could not add stem"
- " (%d,%d) to hints table\n", stems[0], stems[1] ));
+ " (%ld,%ld) to hints table\n", stems[0], stems[1] ));
hints->error = error;
return;
diff --git a/src/3rdparty/freetype/src/pshinter/pshrec.h b/src/3rdparty/freetype/src/pshinter/pshrec.h
index 02cc2102ec..b13c7be13c 100644
--- a/src/3rdparty/freetype/src/pshinter/pshrec.h
+++ b/src/3rdparty/freetype/src/pshinter/pshrec.h
@@ -4,7 +4,7 @@
*
* Postscript (Type1/Type2) hints recorder (specification).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -32,8 +32,7 @@
#define PSHREC_H_
-#include <ft2build.h>
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include <freetype/internal/pshints.h>
#include "pshglob.h"
diff --git a/src/3rdparty/freetype/src/pshinter/rules.mk b/src/3rdparty/freetype/src/pshinter/rules.mk
index 58227d10f2..c845c255cd 100644
--- a/src/3rdparty/freetype/src/pshinter/rules.mk
+++ b/src/3rdparty/freetype/src/pshinter/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2001-2019 by
+# Copyright (C) 2001-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psnames/Jamfile b/src/3rdparty/freetype/src/psnames/Jamfile
deleted file mode 100644
index 75978a8787..0000000000
--- a/src/3rdparty/freetype/src/psnames/Jamfile
+++ /dev/null
@@ -1,31 +0,0 @@
-# FreeType 2 src/psnames Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) psnames ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = psmodule
- pspic
- ;
- }
- else
- {
- _sources = psnames ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/psnames Jamfile
diff --git a/src/3rdparty/freetype/src/psnames/module.mk b/src/3rdparty/freetype/src/psnames/module.mk
index 0806a318a7..675bb37131 100644
--- a/src/3rdparty/freetype/src/psnames/module.mk
+++ b/src/3rdparty/freetype/src/psnames/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psnames/psmodule.c b/src/3rdparty/freetype/src/psnames/psmodule.c
index 0ec440e67b..b38f9d3b1c 100644
--- a/src/3rdparty/freetype/src/psnames/psmodule.c
+++ b/src/3rdparty/freetype/src/psnames/psmodule.c
@@ -4,7 +4,7 @@
*
* psnames module implementation (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svpscmap.h>
#include "psmodule.h"
diff --git a/src/3rdparty/freetype/src/psnames/psmodule.h b/src/3rdparty/freetype/src/psnames/psmodule.h
index 0df9a7d889..c85a9ecad7 100644
--- a/src/3rdparty/freetype/src/psnames/psmodule.h
+++ b/src/3rdparty/freetype/src/psnames/psmodule.h
@@ -4,7 +4,7 @@
*
* High-level psnames module interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define PSMODULE_H_
-#include <ft2build.h>
-#include FT_MODULE_H
+#include <freetype/ftmodapi.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/psnames/psnamerr.h b/src/3rdparty/freetype/src/psnames/psnamerr.h
index 67ab1765d3..154c701d04 100644
--- a/src/3rdparty/freetype/src/psnames/psnamerr.h
+++ b/src/3rdparty/freetype/src/psnames/psnamerr.h
@@ -4,7 +4,7 @@
*
* PS names module error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef PSNAMERR_H_
#define PSNAMERR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX PSnames_Err_
#define FT_ERR_BASE FT_Mod_Err_PSnames
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* PSNAMERR_H_ */
diff --git a/src/3rdparty/freetype/src/psnames/psnames.c b/src/3rdparty/freetype/src/psnames/psnames.c
index 4722f98831..cff36851ba 100644
--- a/src/3rdparty/freetype/src/psnames/psnames.c
+++ b/src/3rdparty/freetype/src/psnames/psnames.c
@@ -4,7 +4,7 @@
*
* FreeType psnames module component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "psmodule.c"
diff --git a/src/3rdparty/freetype/src/psnames/pspic.c b/src/3rdparty/freetype/src/psnames/pspic.c
deleted file mode 100644
index 85a06f3603..0000000000
--- a/src/3rdparty/freetype/src/psnames/pspic.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/***************************************************************************/
-/* */
-/* pspic.c */
-/* */
-/* The FreeType position independent code services for psnames module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "pspic.h"
-#include "psnamerr.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from psmodule.c */
- FT_Error
- FT_Create_Class_pscmaps_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_pscmaps_services( FT_Library library,
- FT_ServiceDescRec* clazz );
-
- void
- FT_Init_Class_pscmaps_interface( FT_Library library,
- FT_Service_PsCMapsRec* clazz );
-
-
- void
- psnames_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->psnames )
- {
- PSModulePIC* container = (PSModulePIC*)pic_container->psnames;
-
-
- if ( container->pscmaps_services )
- FT_Destroy_Class_pscmaps_services( library,
- container->pscmaps_services );
- container->pscmaps_services = NULL;
- FT_FREE( container );
- pic_container->psnames = NULL;
- }
- }
-
-
- FT_Error
- psnames_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- PSModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->psnames = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_pscmaps_services(
- library, &container->pscmaps_services );
- if ( error )
- goto Exit;
- FT_Init_Class_pscmaps_interface( library,
- &container->pscmaps_interface );
-
- Exit:
- if ( error )
- psnames_module_class_pic_free( library );
- return error;
- }
-
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/psnames/pspic.h b/src/3rdparty/freetype/src/psnames/pspic.h
deleted file mode 100644
index 889780cc03..0000000000
--- a/src/3rdparty/freetype/src/psnames/pspic.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***************************************************************************/
-/* */
-/* pspic.h */
-/* */
-/* The FreeType position independent code services for psnames module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef PSPIC_H_
-#define PSPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define PSCMAPS_SERVICES_GET pscmaps_services
-#define PSCMAPS_INTERFACE_GET pscmaps_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct PSModulePIC_
- {
- FT_ServiceDescRec* pscmaps_services;
- FT_Service_PsCMapsRec pscmaps_interface;
-
- } PSModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (PSModulePIC*)((lib)->pic_container.psnames) )
-#define PSCMAPS_SERVICES_GET ( GET_PIC( library )->pscmaps_services )
-#define PSCMAPS_INTERFACE_GET ( GET_PIC( library )->pscmaps_interface )
-
-
- /* see pspic.c for the implementation */
- void
- psnames_module_class_pic_free( FT_Library library );
-
- FT_Error
- psnames_module_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* PSPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/psnames/pstables.h b/src/3rdparty/freetype/src/psnames/pstables.h
index c0139bbc60..c215f16ffc 100644
--- a/src/3rdparty/freetype/src/psnames/pstables.h
+++ b/src/3rdparty/freetype/src/psnames/pstables.h
@@ -4,7 +4,7 @@
*
* PostScript glyph names.
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psnames/rules.mk b/src/3rdparty/freetype/src/psnames/rules.mk
index dcc203e391..14cdda3ad1 100644
--- a/src/3rdparty/freetype/src/psnames/rules.mk
+++ b/src/3rdparty/freetype/src/psnames/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/raster/Jamfile b/src/3rdparty/freetype/src/raster/Jamfile
deleted file mode 100644
index 3990c05cd8..0000000000
--- a/src/3rdparty/freetype/src/raster/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/raster Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) raster ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftraster
- ftrend1
- rastpic
- ;
- }
- else
- {
- _sources = raster ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/raster Jamfile
diff --git a/src/3rdparty/freetype/src/raster/ftmisc.h b/src/3rdparty/freetype/src/raster/ftmisc.h
index a246569e3b..6efe4a9a5a 100644
--- a/src/3rdparty/freetype/src/raster/ftmisc.h
+++ b/src/3rdparty/freetype/src/raster/ftmisc.h
@@ -5,7 +5,7 @@
* Miscellaneous macros for stand-alone rasterizer (specification
* only).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
diff --git a/src/3rdparty/freetype/src/raster/ftraster.c b/src/3rdparty/freetype/src/raster/ftraster.c
index 023b6c1eff..9f0a7976fa 100644
--- a/src/3rdparty/freetype/src/raster/ftraster.c
+++ b/src/3rdparty/freetype/src/raster/ftraster.c
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -62,10 +62,9 @@
#else /* !STANDALONE_ */
-#include <ft2build.h>
#include "ftraster.h"
-#include FT_INTERNAL_CALC_H /* for FT_MulDiv and FT_MulDiv_No_Round */
-#include FT_OUTLINE_H /* for FT_Outline_Get_CBox */
+#include <freetype/internal/ftcalc.h> /* for FT_MulDiv and FT_MulDiv_No_Round */
+#include <freetype/ftoutln.h> /* for FT_Outline_Get_CBox */
#endif /* !STANDALONE_ */
@@ -226,8 +225,8 @@
#else /* !STANDALONE_ */
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H /* for FT_TRACE, FT_ERROR, and FT_THROW */
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h> /* for FT_TRACE, FT_ERROR, and FT_THROW */
#include "rasterrs.h"
@@ -460,6 +459,11 @@
#define IS_TOP_OVERSHOOT( x ) \
(Bool)( x - FLOOR( x ) >= ras.precision_half )
+ /* Smart dropout rounding to find which pixel is closer to span ends. */
+ /* To mimick Windows, symmetric cases break down indepenently of the */
+ /* precision. */
+#define SMART( p, q ) FLOOR( ( (p) + (q) + ras.precision * 63 / 64 ) >> 1 )
+
#if FT_RENDER_POOL_SIZE > 2048
#define FT_MAX_BLACK_POOL ( FT_RENDER_POOL_SIZE / sizeof ( Long ) )
#else
@@ -674,13 +678,13 @@
if ( overshoot )
ras.cProfile->flags |= Overshoot_Bottom;
- FT_TRACE6(( " new ascending profile = %p\n", ras.cProfile ));
+ FT_TRACE6(( " new ascending profile = %p\n", (void *)ras.cProfile ));
break;
case Descending_State:
if ( overshoot )
ras.cProfile->flags |= Overshoot_Top;
- FT_TRACE6(( " new descending profile = %p\n", ras.cProfile ));
+ FT_TRACE6(( " new descending profile = %p\n", (void *)ras.cProfile ));
break;
default:
@@ -737,7 +741,7 @@
FT_TRACE6(( " ending profile %p, start = %ld, height = %ld\n",
- ras.cProfile, ras.cProfile->start, h ));
+ (void *)ras.cProfile, ras.cProfile->start, h ));
ras.cProfile->height = h;
if ( overshoot )
@@ -2242,11 +2246,10 @@
/* in high-precision mode, we need 12 digits after the comma to */
/* represent multiples of 1/(1<<12) = 1/4096 */
- FT_TRACE7(( " y=%d x=[%.12f;%.12f], drop-out=%d",
+ FT_TRACE7(( " y=%d x=[% .12f;% .12f]",
y,
x1 / (double)ras.precision,
- x2 / (double)ras.precision,
- dropOutControl ));
+ x2 / (double)ras.precision ));
/* Drop-out control */
@@ -2274,7 +2277,7 @@
if ( e2 >= ras.bWidth )
e2 = ras.bWidth - 1;
- FT_TRACE7(( " -> x=[%d;%d]", e1, e2 ));
+ FT_TRACE7(( " -> x=[%ld;%ld]", e1, e2 ));
c1 = (Short)( e1 >> 3 );
c2 = (Short)( e2 >> 3 );
@@ -2316,7 +2319,7 @@
Short c1, f1;
- FT_TRACE7(( " y=%d x=[%.12f;%.12f]",
+ FT_TRACE7(( " y=%d x=[% .12f;% .12f]",
y,
x1 / (double)ras.precision,
x2 / (double)ras.precision ));
@@ -2353,8 +2356,6 @@
Int dropOutControl = left->flags & 7;
- FT_TRACE7(( ", drop-out=%d", dropOutControl ));
-
if ( e1 == e2 + ras.precision )
{
switch ( dropOutControl )
@@ -2364,7 +2365,7 @@
break;
case 4: /* smart drop-outs including stubs */
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
+ pxl = SMART( x1, x2 );
break;
case 1: /* simple drop-outs excluding stubs */
@@ -2413,7 +2414,7 @@
if ( dropOutControl == 1 )
pxl = e2;
else
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
+ pxl = SMART( x1, x2 );
break;
default: /* modes 2, 3, 6, 7 */
@@ -2448,7 +2449,7 @@
if ( e1 >= 0 && e1 < ras.bWidth )
{
- FT_TRACE7(( " -> x=%d (drop-out)", e1 ));
+ FT_TRACE7(( " -> x=%ld", e1 ));
c1 = (Short)( e1 >> 3 );
f1 = (Short)( e1 & 7 );
@@ -2457,7 +2458,7 @@
}
Exit:
- FT_TRACE7(( "\n" ));
+ FT_TRACE7(( " dropout=%d\n", left->flags & 7 ));
}
@@ -2495,44 +2496,68 @@
PProfile left,
PProfile right )
{
+ Long e1, e2;
+
FT_UNUSED( left );
FT_UNUSED( right );
- if ( x2 - x1 < ras.precision )
- {
- Long e1, e2;
+ FT_TRACE7(( " x=%d y=[% .12f;% .12f]",
+ y,
+ x1 / (double)ras.precision,
+ x2 / (double)ras.precision ));
+ /* We should not need this procedure but the vertical sweep */
+ /* mishandles horizontal lines through pixel centers. So we */
+ /* have to check perfectly aligned span edges here. */
+ /* */
+ /* XXX: Can we handle horizontal lines better and drop this? */
- FT_TRACE7(( " x=%d y=[%.12f;%.12f]",
- y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
+ e1 = CEILING( x1 );
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
+ if ( x1 == e1 )
+ {
+ e1 = TRUNC( e1 );
- if ( e1 == e2 )
+ if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
{
- e1 = TRUNC( e1 );
-
- if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
- {
- Byte f1;
- PByte bits;
+ Byte f1;
+ PByte bits;
- FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
+ bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
+ f1 = (Byte)( 0x80 >> ( y & 7 ) );
- bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
+ FT_TRACE7(( bits[0] & f1 ? " redundant"
+ : " -> y=%ld edge", e1 ));
- bits[0] |= f1;
- }
+ bits[0] |= f1;
}
+ }
+
+ e2 = FLOOR ( x2 );
+
+ if ( x2 == e2 )
+ {
+ e2 = TRUNC( e2 );
+
+ if ( e2 >= 0 && (ULong)e2 < ras.target.rows )
+ {
+ Byte f1;
+ PByte bits;
+
- FT_TRACE7(( "\n" ));
+ bits = ras.bOrigin + ( y >> 3 ) - e2 * ras.target.pitch;
+ f1 = (Byte)( 0x80 >> ( y & 7 ) );
+
+ FT_TRACE7(( bits[0] & f1 ? " redundant"
+ : " -> y=%ld edge", e2 ));
+
+ bits[0] |= f1;
+ }
}
+
+ FT_TRACE7(( "\n" ));
}
@@ -2548,7 +2573,7 @@
Byte f1;
- FT_TRACE7(( " x=%d y=[%.12f;%.12f]",
+ FT_TRACE7(( " x=%d y=[% .12f;% .12f]",
y,
x1 / (double)ras.precision,
x2 / (double)ras.precision ));
@@ -2574,8 +2599,6 @@
Int dropOutControl = left->flags & 7;
- FT_TRACE7(( ", dropout=%d", dropOutControl ));
-
if ( e1 == e2 + ras.precision )
{
switch ( dropOutControl )
@@ -2585,7 +2608,7 @@
break;
case 4: /* smart drop-outs including stubs */
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
+ pxl = SMART( x1, x2 );
break;
case 1: /* simple drop-outs excluding stubs */
@@ -2609,7 +2632,7 @@
if ( dropOutControl == 1 )
pxl = e2;
else
- pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
+ pxl = SMART( x1, x2 );
break;
default: /* modes 2, 3, 6, 7 */
@@ -2645,7 +2668,7 @@
if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
{
- FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
+ FT_TRACE7(( " -> y=%ld", e1 ));
bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch;
f1 = (Byte)( 0x80 >> ( y & 7 ) );
@@ -2654,7 +2677,7 @@
}
Exit:
- FT_TRACE7(( "\n" ));
+ FT_TRACE7(( " dropout=%d\n", left->flags & 7 ));
}
diff --git a/src/3rdparty/freetype/src/raster/ftraster.h b/src/3rdparty/freetype/src/raster/ftraster.h
index 50d34201a1..1b2ee3c016 100644
--- a/src/3rdparty/freetype/src/raster/ftraster.h
+++ b/src/3rdparty/freetype/src/raster/ftraster.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
@@ -22,8 +22,9 @@
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-#include FT_IMAGE_H
+#include <freetype/ftimage.h>
+#include <freetype/internal/compiler-macros.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/raster/ftrend1.c b/src/3rdparty/freetype/src/raster/ftrend1.c
index 62c727182a..57fed9bc14 100644
--- a/src/3rdparty/freetype/src/raster/ftrend1.c
+++ b/src/3rdparty/freetype/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer interface (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_OUTLINE_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftoutln.h>
#include "ftrend1.h"
#include "ftraster.h"
diff --git a/src/3rdparty/freetype/src/raster/ftrend1.h b/src/3rdparty/freetype/src/raster/ftrend1.h
index 82ecac686c..3f6be53675 100644
--- a/src/3rdparty/freetype/src/raster/ftrend1.h
+++ b/src/3rdparty/freetype/src/raster/ftrend1.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTREND1_H_
-#include <ft2build.h>
-#include FT_RENDER_H
+#include <freetype/ftrender.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/raster/module.mk b/src/3rdparty/freetype/src/raster/module.mk
index 0a6d4b09d9..3600732b16 100644
--- a/src/3rdparty/freetype/src/raster/module.mk
+++ b/src/3rdparty/freetype/src/raster/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/raster/raster.c b/src/3rdparty/freetype/src/raster/raster.c
index e3ac9e566a..cd37943bf6 100644
--- a/src/3rdparty/freetype/src/raster/raster.c
+++ b/src/3rdparty/freetype/src/raster/raster.c
@@ -4,7 +4,7 @@
*
* FreeType monochrome rasterer module component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "ftraster.c"
#include "ftrend1.c"
diff --git a/src/3rdparty/freetype/src/raster/rasterrs.h b/src/3rdparty/freetype/src/raster/rasterrs.h
index 7266407365..a29651a6c5 100644
--- a/src/3rdparty/freetype/src/raster/rasterrs.h
+++ b/src/3rdparty/freetype/src/raster/rasterrs.h
@@ -4,7 +4,7 @@
*
* monochrome renderer error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef RASTERRS_H_
#define RASTERRS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX Raster_Err_
#define FT_ERR_BASE FT_Mod_Err_Raster
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* RASTERRS_H_ */
diff --git a/src/3rdparty/freetype/src/raster/rastpic.c b/src/3rdparty/freetype/src/raster/rastpic.c
deleted file mode 100644
index 1dc8981b8a..0000000000
--- a/src/3rdparty/freetype/src/raster/rastpic.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/***************************************************************************/
-/* */
-/* rastpic.c */
-/* */
-/* The FreeType position independent code services for raster module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "rastpic.h"
-#include "rasterrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftraster.c */
- void
- FT_Init_Class_ft_standard_raster( FT_Raster_Funcs* funcs );
-
-
- void
- ft_raster1_renderer_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->raster )
- {
- RasterPIC* container = (RasterPIC*)pic_container->raster;
-
-
- if ( --container->ref_count )
- return;
- FT_FREE( container );
- pic_container->raster = NULL;
- }
- }
-
-
- FT_Error
- ft_raster1_renderer_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- RasterPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* XXX: since this function also served the no longer available */
- /* raster5 renderer it uses reference counting, which could */
- /* be removed now */
- if ( pic_container->raster )
- {
- ((RasterPIC*)pic_container->raster)->ref_count++;
- return error;
- }
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->raster = container;
-
- container->ref_count = 1;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_standard_raster( &container->ft_standard_raster );
-
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/raster/rastpic.h b/src/3rdparty/freetype/src/raster/rastpic.h
deleted file mode 100644
index 6d0877c423..0000000000
--- a/src/3rdparty/freetype/src/raster/rastpic.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* rastpic.h */
-/* */
-/* The FreeType position independent code services for raster module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef RASTPIC_H_
-#define RASTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-FT_BEGIN_HEADER
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_STANDARD_RASTER_GET ft_standard_raster
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- typedef struct RasterPIC_
- {
- int ref_count;
- FT_Raster_Funcs ft_standard_raster;
-
- } RasterPIC;
-
-
-#define GET_PIC( lib ) \
- ( (RasterPIC*)( (lib)->pic_container.raster ) )
-#define FT_STANDARD_RASTER_GET ( GET_PIC( library )->ft_standard_raster )
-
-
- /* see rastpic.c for the implementation */
- void
- ft_raster1_renderer_class_pic_free( FT_Library library );
-
- FT_Error
- ft_raster1_renderer_class_pic_init( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* RASTPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/raster/rules.mk b/src/3rdparty/freetype/src/raster/rules.mk
index 7664671e80..3e949d7741 100644
--- a/src/3rdparty/freetype/src/raster/rules.mk
+++ b/src/3rdparty/freetype/src/raster/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/sfnt/Jamfile b/src/3rdparty/freetype/src/sfnt/Jamfile
deleted file mode 100644
index f646b3526e..0000000000
--- a/src/3rdparty/freetype/src/sfnt/Jamfile
+++ /dev/null
@@ -1,42 +0,0 @@
-# FreeType 2 src/sfnt Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) sfnt ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = pngshim
- sfdriver
- sfntpic
- sfobjs
- ttbdf
- ttcmap
- ttcolr
- ttcpal
- ttkern
- ttload
- ttmtx
- ttpost
- ttsbit
- ;
- }
- else
- {
- _sources = sfnt ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/sfnt Jamfile
diff --git a/src/3rdparty/freetype/src/sfnt/module.mk b/src/3rdparty/freetype/src/sfnt/module.mk
index 8c3b44fec7..0f459d8421 100644
--- a/src/3rdparty/freetype/src/sfnt/module.mk
+++ b/src/3rdparty/freetype/src/sfnt/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/sfnt/pngshim.c b/src/3rdparty/freetype/src/sfnt/pngshim.c
index 2e0904ffd2..1bd3a7eeb5 100644
--- a/src/3rdparty/freetype/src/sfnt/pngshim.c
+++ b/src/3rdparty/freetype/src/sfnt/pngshim.c
@@ -4,7 +4,7 @@
*
* PNG Bitmap glyph support.
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* Google, Inc.
* Written by Stuart Gill and Behdad Esfahbod.
*
@@ -17,10 +17,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
#include FT_CONFIG_STANDARD_LIBRARY_H
@@ -61,7 +60,12 @@
/* predates clang; the `__BYTE_ORDER__' preprocessor symbol was */
/* introduced in gcc 4.6 and clang 3.2, respectively. */
/* `__builtin_shuffle' for gcc was introduced in gcc 4.7.0. */
-#if ( ( defined( __GNUC__ ) && \
+ /* */
+ /* Intel compilers do not currently support __builtin_shuffle; */
+
+ /* The Intel check must be first. */
+#if !defined( __INTEL_COMPILER ) && \
+ ( ( defined( __GNUC__ ) && \
( ( __GNUC__ >= 5 ) || \
( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) ) || \
( defined( __clang__ ) && \
@@ -69,6 +73,7 @@
( ( __clang_major__ == 3 ) && ( __clang_minor__ >= 2 ) ) ) ) ) && \
defined( __OPTIMIZE__ ) && \
!defined( __EMSCRIPTEN__ ) && \
+ defined( __SSE__ ) && \
__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#ifdef __clang__
diff --git a/src/3rdparty/freetype/src/sfnt/pngshim.h b/src/3rdparty/freetype/src/sfnt/pngshim.h
index 06c6f6b20e..2d6e83d69b 100644
--- a/src/3rdparty/freetype/src/sfnt/pngshim.h
+++ b/src/3rdparty/freetype/src/sfnt/pngshim.h
@@ -4,7 +4,7 @@
*
* PNG Bitmap glyph support.
*
- * Copyright (C) 2013-2019 by
+ * Copyright (C) 2013-2020 by
* Google, Inc.
* Written by Stuart Gill and Behdad Esfahbod.
*
@@ -21,7 +21,6 @@
#define PNGSHIM_H_
-#include <ft2build.h>
#include "ttload.h"
diff --git a/src/3rdparty/freetype/src/sfnt/rules.mk b/src/3rdparty/freetype/src/sfnt/rules.mk
index ee3314eac3..f56ef060ed 100644
--- a/src/3rdparty/freetype/src/sfnt/rules.mk
+++ b/src/3rdparty/freetype/src/sfnt/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -28,19 +28,21 @@ SFNT_COMPILE := $(CC) $(ANSIFLAGS) \
# SFNT driver sources (i.e., C files)
#
-SFNT_DRV_SRC := $(SFNT_DIR)/pngshim.c \
- $(SFNT_DIR)/sfdriver.c \
- $(SFNT_DIR)/sfobjs.c \
- $(SFNT_DIR)/sfwoff.c \
- $(SFNT_DIR)/ttbdf.c \
- $(SFNT_DIR)/ttcmap.c \
- $(SFNT_DIR)/ttcolr.c \
- $(SFNT_DIR)/ttcpal.c \
- $(SFNT_DIR)/ttkern.c \
- $(SFNT_DIR)/ttload.c \
- $(SFNT_DIR)/ttmtx.c \
- $(SFNT_DIR)/ttpost.c \
- $(SFNT_DIR)/ttsbit.c
+SFNT_DRV_SRC := $(SFNT_DIR)/pngshim.c \
+ $(SFNT_DIR)/sfdriver.c \
+ $(SFNT_DIR)/sfobjs.c \
+ $(SFNT_DIR)/sfwoff.c \
+ $(SFNT_DIR)/sfwoff2.c \
+ $(SFNT_DIR)/ttbdf.c \
+ $(SFNT_DIR)/ttcmap.c \
+ $(SFNT_DIR)/ttcolr.c \
+ $(SFNT_DIR)/ttcpal.c \
+ $(SFNT_DIR)/ttkern.c \
+ $(SFNT_DIR)/ttload.c \
+ $(SFNT_DIR)/ttmtx.c \
+ $(SFNT_DIR)/ttpost.c \
+ $(SFNT_DIR)/ttsbit.c \
+ $(SFNT_DIR)/woff2tags.c
# SFNT driver headers
#
diff --git a/src/3rdparty/freetype/src/sfnt/sfdriver.c b/src/3rdparty/freetype/src/sfnt/sfdriver.c
index 2611685284..0460339a74 100644
--- a/src/3rdparty/freetype/src/sfnt/sfdriver.c
+++ b/src/3rdparty/freetype/src/sfnt/sfdriver.c
@@ -4,7 +4,7 @@
*
* High-level SFNT driver interface (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_TRUETYPE_IDS_H
+#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"
@@ -43,21 +42,21 @@
#ifdef TT_CONFIG_OPTION_BDF
#include "ttbdf.h"
-#include FT_SERVICE_BDF_H
+#include <freetype/internal/services/svbdf.h>
#endif
#include "ttcmap.h"
#include "ttkern.h"
#include "ttmtx.h"
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_TT_CMAP_H
+#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 FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/services/svmm.h>
#endif
@@ -195,7 +194,7 @@
else if ( (FT_ULong)face->num_glyphs < FT_UINT_MAX )
max_gid = (FT_UInt)face->num_glyphs;
else
- FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n",
+ FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08lx\n",
FT_UINT_MAX, face->num_glyphs ));
for ( i = 0; i < max_gid; i++ )
diff --git a/src/3rdparty/freetype/src/sfnt/sfdriver.h b/src/3rdparty/freetype/src/sfnt/sfdriver.h
index 8c174634b3..1ac2706325 100644
--- a/src/3rdparty/freetype/src/sfnt/sfdriver.h
+++ b/src/3rdparty/freetype/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
*
* High-level SFNT driver interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define SFDRIVER_H_
-#include <ft2build.h>
-#include FT_MODULE_H
+#include <freetype/ftmodapi.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/sferrors.h b/src/3rdparty/freetype/src/sfnt/sferrors.h
index 43e148d295..55c3e76b66 100644
--- a/src/3rdparty/freetype/src/sfnt/sferrors.h
+++ b/src/3rdparty/freetype/src/sfnt/sferrors.h
@@ -4,7 +4,7 @@
*
* SFNT error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
#ifndef SFERRORS_H_
#define SFERRORS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -33,7 +33,7 @@
#define FT_ERR_PREFIX SFNT_Err_
#define FT_ERR_BASE FT_Mod_Err_SFNT
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* SFERRORS_H_ */
diff --git a/src/3rdparty/freetype/src/sfnt/sfnt.c b/src/3rdparty/freetype/src/sfnt/sfnt.c
index b4faf34a3a..471239ff0b 100644
--- a/src/3rdparty/freetype/src/sfnt/sfnt.c
+++ b/src/3rdparty/freetype/src/sfnt/sfnt.c
@@ -4,7 +4,7 @@
*
* Single object library component.
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,12 +17,12 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "pngshim.c"
#include "sfdriver.c"
#include "sfobjs.c"
#include "sfwoff.c"
+#include "sfwoff2.c"
#include "ttbdf.c"
#include "ttcmap.c"
#include "ttcolr.c"
@@ -33,6 +33,7 @@
#include "ttmtx.c"
#include "ttpost.c"
#include "ttsbit.c"
+#include "woff2tags.c"
/* END */
diff --git a/src/3rdparty/freetype/src/sfnt/sfntpic.c b/src/3rdparty/freetype/src/sfnt/sfntpic.c
deleted file mode 100644
index db2d816ce6..0000000000
--- a/src/3rdparty/freetype/src/sfnt/sfntpic.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfntpic.c */
-/* */
-/* The FreeType position independent code services for sfnt module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "sfntpic.h"
-#include "sferrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from sfdriver.c */
- FT_Error
- FT_Create_Class_sfnt_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_sfnt_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec* clazz );
- void
- FT_Init_Class_sfnt_interface( FT_Library library,
- SFNT_Interface* clazz );
- void
- FT_Init_Class_sfnt_service_glyph_dict(
- FT_Library library,
- FT_Service_GlyphDictRec* clazz );
- void
- FT_Init_Class_sfnt_service_ps_name(
- FT_Library library,
- FT_Service_PsFontNameRec* clazz );
- void
- FT_Init_Class_tt_service_get_cmap_info(
- FT_Library library,
- FT_Service_TTCMapsRec* clazz );
- void
- FT_Init_Class_sfnt_service_sfnt_table(
- FT_Service_SFNT_TableRec* clazz );
-
-
- /* forward declaration of PIC init functions from ttcmap.c */
- FT_Error
- FT_Create_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class** output_class );
- void
- FT_Destroy_Class_tt_cmap_classes( FT_Library library,
- TT_CMap_Class* clazz );
-
-
- void
- sfnt_module_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->sfnt )
- {
- sfntModulePIC* container = (sfntModulePIC*)pic_container->sfnt;
-
-
- if ( container->sfnt_services )
- FT_Destroy_Class_sfnt_services( library,
- container->sfnt_services );
- container->sfnt_services = NULL;
-
- if ( container->tt_cmap_classes )
- FT_Destroy_Class_tt_cmap_classes( library,
- container->tt_cmap_classes );
- container->tt_cmap_classes = NULL;
-
- FT_FREE( container );
- pic_container->sfnt = NULL;
- }
- }
-
-
- FT_Error
- sfnt_module_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- sfntModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->sfnt = container;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- error = FT_Create_Class_sfnt_services( library,
- &container->sfnt_services );
- if ( error )
- goto Exit;
-
- error = FT_Create_Class_tt_cmap_classes( library,
- &container->tt_cmap_classes );
- if ( error )
- goto Exit;
-
- FT_Init_Class_sfnt_service_glyph_dict(
- library, &container->sfnt_service_glyph_dict );
- FT_Init_Class_sfnt_service_ps_name(
- library, &container->sfnt_service_ps_name );
- FT_Init_Class_tt_service_get_cmap_info(
- library, &container->tt_service_get_cmap_info );
- FT_Init_Class_sfnt_service_sfnt_table(
- &container->sfnt_service_sfnt_table );
-#ifdef TT_CONFIG_OPTION_BDF
- FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf );
-#endif
- FT_Init_Class_sfnt_interface( library, &container->sfnt_interface );
-
- Exit:
- if ( error )
- sfnt_module_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/sfnt/sfntpic.h b/src/3rdparty/freetype/src/sfnt/sfntpic.h
deleted file mode 100644
index 8f43122d81..0000000000
--- a/src/3rdparty/freetype/src/sfnt/sfntpic.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/***************************************************************************/
-/* */
-/* sfntpic.h */
-/* */
-/* The FreeType position independent code services for sfnt module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef SFNTPIC_H_
-#define SFNTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define SFNT_SERVICES_GET sfnt_services
-#define SFNT_SERVICE_GLYPH_DICT_GET sfnt_service_glyph_dict
-#define SFNT_SERVICE_PS_NAME_GET sfnt_service_ps_name
-#define TT_SERVICE_CMAP_INFO_GET tt_service_get_cmap_info
-#define TT_CMAP_CLASSES_GET tt_cmap_classes
-#define SFNT_SERVICE_SFNT_TABLE_GET sfnt_service_sfnt_table
-#define SFNT_SERVICE_BDF_GET sfnt_service_bdf
-#define SFNT_INTERFACE_GET sfnt_interface
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- /* some include files required for members of sfntModulePIC */
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_SFNT_H
-#include FT_SERVICE_TT_CMAP_H
-
-#ifdef TT_CONFIG_OPTION_BDF
-#include "ttbdf.h"
-#include FT_SERVICE_BDF_H
-#endif
-
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include "ttcmap.h"
-
-
-FT_BEGIN_HEADER
-
- typedef struct sfntModulePIC_
- {
- FT_ServiceDescRec* sfnt_services;
- FT_Service_GlyphDictRec sfnt_service_glyph_dict;
- FT_Service_PsFontNameRec sfnt_service_ps_name;
- FT_Service_TTCMapsRec tt_service_get_cmap_info;
- TT_CMap_Class* tt_cmap_classes;
- FT_Service_SFNT_TableRec sfnt_service_sfnt_table;
-#ifdef TT_CONFIG_OPTION_BDF
- FT_Service_BDFRec sfnt_service_bdf;
-#endif
- SFNT_Interface sfnt_interface;
-
- } sfntModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (sfntModulePIC*)( (lib)->pic_container.sfnt ) )
-
-#define SFNT_SERVICES_GET \
- ( GET_PIC( library )->sfnt_services )
-#define SFNT_SERVICE_GLYPH_DICT_GET \
- ( GET_PIC( library )->sfnt_service_glyph_dict )
-#define SFNT_SERVICE_PS_NAME_GET \
- ( GET_PIC( library )->sfnt_service_ps_name )
-#define TT_SERVICE_CMAP_INFO_GET \
- ( GET_PIC( library )->tt_service_get_cmap_info )
-#define TT_CMAP_CLASSES_GET \
- ( GET_PIC( library )->tt_cmap_classes )
-#define SFNT_SERVICE_SFNT_TABLE_GET \
- ( GET_PIC( library )->sfnt_service_sfnt_table )
-#define SFNT_SERVICE_BDF_GET \
- ( GET_PIC( library )->sfnt_service_bdf )
-#define SFNT_INTERFACE_GET \
- ( GET_PIC( library )->sfnt_interface )
-
-
- /* see sfntpic.c for the implementation */
- void
- sfnt_module_class_pic_free( FT_Library library );
-
- FT_Error
- sfnt_module_class_pic_init( FT_Library library );
-
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* SFNTPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/sfnt/sfobjs.c b/src/3rdparty/freetype/src/sfnt/sfobjs.c
index 6edf3ae1de..39460be2e6 100644
--- a/src/3rdparty/freetype/src/sfnt/sfobjs.c
+++ b/src/3rdparty/freetype/src/sfnt/sfobjs.c
@@ -4,7 +4,7 @@
*
* SFNT object management (base).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,22 +16,22 @@
*/
-#include <ft2build.h>
#include "sfobjs.h"
#include "ttload.h"
#include "ttcmap.h"
#include "ttkern.h"
#include "sfwoff.h"
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_TRUETYPE_IDS_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_SFNT_NAMES_H
+#include "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 FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
+#include <freetype/internal/services/svmm.h>
+#include <freetype/internal/services/svmetric.h>
#endif
#include "sferrors.h"
@@ -341,7 +341,9 @@
/* synthesized into a TTC with one offset table. */
static FT_Error
sfnt_open_font( FT_Stream stream,
- TT_Face face )
+ TT_Face face,
+ FT_Int* face_instance_index,
+ FT_Long* woff2_num_faces )
{
FT_Memory memory = stream->memory;
FT_Error error;
@@ -385,6 +387,25 @@
goto retry;
}
+ if ( tag == TTAG_wOF2 )
+ {
+ FT_TRACE2(( "sfnt_open_font: file is a WOFF2; synthesizing SFNT\n" ));
+
+ if ( FT_STREAM_SEEK( offset ) )
+ return error;
+
+ error = woff2_open_font( stream,
+ face,
+ face_instance_index,
+ woff2_num_faces );
+ if ( error )
+ return error;
+
+ /* Swap out stream and retry! */
+ stream = face->root.stream;
+ goto retry;
+ }
+
if ( tag != 0x00010000UL &&
tag != TTAG_ttcf &&
tag != TTAG_OTTO &&
@@ -461,9 +482,10 @@
FT_Parameter* params )
{
FT_Error error;
- FT_Library library = face->root.driver->root.library;
+ FT_Library library = face->root.driver->root.library;
SFNT_Service sfnt;
FT_Int face_index;
+ FT_Long woff2_num_faces = 0;
/* for now, parameters are unused */
@@ -514,15 +536,18 @@
FT_TRACE2(( "SFNT driver\n" ));
- error = sfnt_open_font( stream, face );
+ error = sfnt_open_font( stream,
+ face,
+ &face_instance_index,
+ &woff2_num_faces );
if ( error )
return error;
/* Stream may have changed in sfnt_open_font. */
stream = face->root.stream;
- FT_TRACE2(( "sfnt_init_face: %08p (index %d)\n",
- face,
+ FT_TRACE2(( "sfnt_init_face: %p (index %d)\n",
+ (void *)face,
face_instance_index ));
face_index = FT_ABS( face_instance_index ) & 0xFFFF;
@@ -689,6 +714,10 @@
face->root.num_faces = face->ttc_header.count;
face->root.face_index = face_instance_index;
+ /* `num_faces' for a WOFF2 needs to be handled separately. */
+ if ( woff2_num_faces )
+ face->root.num_faces = woff2_num_faces;
+
return error;
}
@@ -791,7 +820,7 @@
/* it doesn't contain outlines. */
/* */
- FT_TRACE2(( "sfnt_load_face: %08p\n\n", face ));
+ FT_TRACE2(( "sfnt_load_face: %p\n\n", (void *)face ));
/* do we have outlines in there? */
#ifdef FT_CONFIG_OPTION_INCREMENTAL
diff --git a/src/3rdparty/freetype/src/sfnt/sfobjs.h b/src/3rdparty/freetype/src/sfnt/sfobjs.h
index 3fbf2dd6bd..e8e3042083 100644
--- a/src/3rdparty/freetype/src/sfnt/sfobjs.h
+++ b/src/3rdparty/freetype/src/sfnt/sfobjs.h
@@ -4,7 +4,7 @@
*
* SFNT object management (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define SFOBJS_H_
-#include <ft2build.h>
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/sfnt.h>
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff.c b/src/3rdparty/freetype/src/sfnt/sfwoff.c
index ca4821a20a..f0a32e1e06 100644
--- a/src/3rdparty/freetype/src/sfnt/sfwoff.c
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff.c
@@ -4,7 +4,7 @@
*
* WOFF format management (base).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
#include "sfwoff.h"
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_GZIP_H
+#include <freetype/tttags.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/ftgzip.h>
/**************************************************************************
@@ -371,18 +370,18 @@
sfnt + table->OrigOffset, &output_len,
stream->cursor, table->CompLength );
if ( error )
- goto Exit;
+ goto Exit1;
if ( output_len != table->OrigLength )
{
FT_ERROR(( "woff_font_open: compressed table length mismatch\n" ));
error = FT_THROW( Invalid_Table );
- goto Exit;
+ goto Exit1;
}
#else /* !FT_CONFIG_OPTION_USE_ZLIB */
error = FT_THROW( Unimplemented_Feature );
- goto Exit;
+ goto Exit1;
#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
}
@@ -424,6 +423,10 @@
}
return error;
+
+ Exit1:
+ FT_FRAME_EXIT();
+ goto Exit;
}
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff.h b/src/3rdparty/freetype/src/sfnt/sfwoff.h
index 15495c32a2..d177ab1160 100644
--- a/src/3rdparty/freetype/src/sfnt/sfwoff.h
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff.h
@@ -4,7 +4,7 @@
*
* WOFFF format management (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define SFWOFF_H_
-#include <ft2build.h>
-#include FT_INTERNAL_SFNT_H
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/sfnt.h>
+#include <freetype/internal/ftobjs.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff2.c b/src/3rdparty/freetype/src/sfnt/sfwoff2.c
new file mode 100644
index 0000000000..5c8202f823
--- /dev/null
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff2.c
@@ -0,0 +1,2337 @@
+/****************************************************************************
+ *
+ * sfwoff2.c
+ *
+ * WOFF2 format management (base).
+ *
+ * Copyright (C) 2019-2020 by
+ * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+#include "sfwoff2.h"
+#include "woff2tags.h"
+#include <freetype/tttags.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+
+
+#ifdef FT_CONFIG_OPTION_USE_BROTLI
+
+#include <brotli/decode.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 sfwoff2
+
+
+#define READ_255USHORT( var ) FT_SET_ERROR( Read255UShort( stream, &var ) )
+
+#define READ_BASE128( var ) FT_SET_ERROR( ReadBase128( stream, &var ) )
+
+ /* `var' should be FT_ULong */
+#define ROUND4( var ) ( ( var + 3 ) & ~3UL )
+
+#define WRITE_USHORT( p, v ) \
+ do \
+ { \
+ *(p)++ = (FT_Byte)( (v) >> 8 ); \
+ *(p)++ = (FT_Byte)( (v) >> 0 ); \
+ \
+ } while ( 0 )
+
+#define WRITE_ULONG( p, v ) \
+ do \
+ { \
+ *(p)++ = (FT_Byte)( (v) >> 24 ); \
+ *(p)++ = (FT_Byte)( (v) >> 16 ); \
+ *(p)++ = (FT_Byte)( (v) >> 8 ); \
+ *(p)++ = (FT_Byte)( (v) >> 0 ); \
+ \
+ } while ( 0 )
+
+#define WRITE_SHORT( p, v ) \
+ do \
+ { \
+ *(p)++ = (FT_Byte)( (v) >> 8 ); \
+ *(p)++ = (FT_Byte)( (v) >> 0 ); \
+ \
+ } while ( 0 )
+
+#define WRITE_SFNT_BUF( buf, s ) \
+ write_buf( &sfnt, sfnt_size, &dest_offset, buf, s, memory )
+
+#define WRITE_SFNT_BUF_AT( offset, buf, s ) \
+ write_buf( &sfnt, sfnt_size, &offset, buf, s, memory )
+
+#define N_CONTOUR_STREAM 0
+#define N_POINTS_STREAM 1
+#define FLAG_STREAM 2
+#define GLYPH_STREAM 3
+#define COMPOSITE_STREAM 4
+#define BBOX_STREAM 5
+#define INSTRUCTION_STREAM 6
+
+
+ static void
+ stream_close( FT_Stream stream )
+ {
+ FT_Memory memory = stream->memory;
+
+
+ FT_FREE( stream->base );
+
+ stream->size = 0;
+ stream->base = NULL;
+ stream->close = NULL;
+ }
+
+
+ FT_CALLBACK_DEF( int )
+ compare_tags( const void* a,
+ const void* b )
+ {
+ WOFF2_Table table1 = *(WOFF2_Table*)a;
+ WOFF2_Table table2 = *(WOFF2_Table*)b;
+
+ FT_ULong tag1 = table1->Tag;
+ FT_ULong tag2 = table2->Tag;
+
+
+ if ( tag1 > tag2 )
+ return 1;
+ else if ( tag1 < tag2 )
+ return -1;
+ else
+ return 0;
+ }
+
+
+ static FT_Error
+ Read255UShort( FT_Stream stream,
+ FT_UShort* value )
+ {
+ const FT_Byte oneMoreByteCode1 = 255;
+ const FT_Byte oneMoreByteCode2 = 254;
+ const FT_Byte wordCode = 253;
+ const FT_UShort lowestUCode = 253;
+
+ FT_Error error = FT_Err_Ok;
+ FT_Byte code;
+ FT_Byte result_byte = 0;
+ FT_UShort result_short = 0;
+
+
+ if ( FT_READ_BYTE( code ) )
+ return error;
+ if ( code == wordCode )
+ {
+ /* Read next two bytes and store `FT_UShort' value. */
+ if ( FT_READ_USHORT( result_short ) )
+ return error;
+ *value = result_short;
+ return FT_Err_Ok;
+ }
+ else if ( code == oneMoreByteCode1 )
+ {
+ if ( FT_READ_BYTE( result_byte ) )
+ return error;
+ *value = result_byte + lowestUCode;
+ return FT_Err_Ok;
+ }
+ else if ( code == oneMoreByteCode2 )
+ {
+ if ( FT_READ_BYTE( result_byte ) )
+ return error;
+ *value = result_byte + lowestUCode * 2;
+ return FT_Err_Ok;
+ }
+ else
+ {
+ *value = code;
+ return FT_Err_Ok;
+ }
+ }
+
+
+ static FT_Error
+ ReadBase128( FT_Stream stream,
+ FT_ULong* value )
+ {
+ FT_ULong result = 0;
+ FT_Int i;
+ FT_Byte code;
+ FT_Error error = FT_Err_Ok;
+
+
+ for ( i = 0; i < 5; ++i )
+ {
+ code = 0;
+ if ( FT_READ_BYTE( code ) )
+ return error;
+
+ /* Leading zeros are invalid. */
+ if ( i == 0 && code == 0x80 )
+ return FT_THROW( Invalid_Table );
+
+ /* If any of top seven bits are set then we're about to overflow. */
+ if ( result & 0xfe000000 )
+ return FT_THROW( Invalid_Table );
+
+ result = ( result << 7 ) | ( code & 0x7f );
+
+ /* Spin until most significant bit of data byte is false. */
+ if ( ( code & 0x80 ) == 0 )
+ {
+ *value = result;
+ return FT_Err_Ok;
+ }
+ }
+
+ /* Make sure not to exceed the size bound. */
+ return FT_THROW( Invalid_Table );
+ }
+
+
+ /* Extend memory of `dst_bytes' buffer and copy data from `src'. */
+ static FT_Error
+ write_buf( FT_Byte** dst_bytes,
+ FT_ULong* dst_size,
+ FT_ULong* offset,
+ FT_Byte* src,
+ FT_ULong size,
+ FT_Memory memory )
+ {
+ FT_Error error = FT_Err_Ok;
+ /* We are reallocating memory for `dst', so its pointer may change. */
+ FT_Byte* dst = *dst_bytes;
+
+
+ /* Check whether we are within limits. */
+ if ( ( *offset + size ) > WOFF2_DEFAULT_MAX_SIZE )
+ return FT_THROW( Array_Too_Large );
+
+ /* Reallocate `dst'. */
+ if ( ( *offset + size ) > *dst_size )
+ {
+ FT_TRACE6(( "Reallocating %lu to %lu.\n",
+ *dst_size, (*offset + size) ));
+ if ( FT_REALLOC( dst,
+ (FT_ULong)( *dst_size ),
+ (FT_ULong)( *offset + size ) ) )
+ goto Exit;
+
+ *dst_size = *offset + size;
+ }
+
+ /* Copy data. */
+ ft_memcpy( dst + *offset, src, size );
+
+ *offset += size;
+ /* Set pointer of `dst' to its correct value. */
+ *dst_bytes = dst;
+
+ Exit:
+ return error;
+ }
+
+
+ /* Pad buffer to closest multiple of 4. */
+ static FT_Error
+ pad4( FT_Byte** sfnt_bytes,
+ FT_ULong* sfnt_size,
+ FT_ULong* out_offset,
+ FT_Memory memory )
+ {
+ FT_Byte* sfnt = *sfnt_bytes;
+ FT_ULong dest_offset = *out_offset;
+
+ FT_Byte zeroes[] = { 0, 0, 0 };
+ FT_ULong pad_bytes;
+
+
+ if ( dest_offset + 3 < dest_offset )
+ return FT_THROW( Invalid_Table );
+
+ pad_bytes = ROUND4( dest_offset ) - dest_offset;
+ if ( pad_bytes > 0 )
+ {
+ if ( WRITE_SFNT_BUF( &zeroes[0], pad_bytes ) )
+ return FT_THROW( Invalid_Table );
+ }
+
+ *sfnt_bytes = sfnt;
+ *out_offset = dest_offset;
+ return FT_Err_Ok;
+ }
+
+
+ /* Calculate table checksum of `buf'. */
+ static FT_ULong
+ compute_ULong_sum( FT_Byte* buf,
+ FT_ULong size )
+ {
+ FT_ULong checksum = 0;
+ FT_ULong aligned_size = size & ~3UL;
+ FT_ULong i;
+ FT_ULong v;
+
+
+ for ( i = 0; i < aligned_size; i += 4 )
+ checksum += ( (FT_ULong)buf[i ] << 24 ) |
+ ( (FT_ULong)buf[i + 1] << 16 ) |
+ ( (FT_ULong)buf[i + 2] << 8 ) |
+ ( (FT_ULong)buf[i + 3] << 0 );
+
+ /* If size is not aligned to 4, treat as if it is padded with 0s. */
+ if ( size != aligned_size )
+ {
+ v = 0;
+ for ( i = aligned_size ; i < size; ++i )
+ v |= (FT_ULong)buf[i] << ( 24 - 8 * ( i & 3 ) );
+ checksum += v;
+ }
+
+ return checksum;
+ }
+
+
+ static FT_Error
+ woff2_decompress( FT_Byte* dst,
+ FT_ULong dst_size,
+ const FT_Byte* src,
+ FT_ULong src_size )
+ {
+#ifdef FT_CONFIG_OPTION_USE_BROTLI
+
+ /* this cast is only of importance on 32bit systems; */
+ /* we don't validate it */
+ FT_Offset uncompressed_size = (FT_Offset)dst_size;
+ BrotliDecoderResult result;
+
+
+ result = BrotliDecoderDecompress( src_size,
+ src,
+ &uncompressed_size,
+ dst );
+
+ if ( result != BROTLI_DECODER_RESULT_SUCCESS ||
+ uncompressed_size != dst_size )
+ {
+ FT_ERROR(( "woff2_decompress: Stream length mismatch.\n" ));
+ return FT_THROW( Invalid_Table );
+ }
+
+ FT_TRACE2(( "woff2_decompress: Brotli stream decompressed.\n" ));
+ return FT_Err_Ok;
+
+#else /* !FT_CONFIG_OPTION_USE_BROTLI */
+
+ FT_ERROR(( "woff2_decompress: Brotli support not available.\n" ));
+ return FT_THROW( Unimplemented_Feature );
+
+#endif /* !FT_CONFIG_OPTION_USE_BROTLI */
+ }
+
+
+ static WOFF2_Table
+ find_table( WOFF2_Table* tables,
+ FT_UShort num_tables,
+ FT_ULong tag )
+ {
+ FT_Int i;
+
+
+ for ( i = 0; i < num_tables; i++ )
+ {
+ if ( tables[i]->Tag == tag )
+ return tables[i];
+ }
+ return NULL;
+ }
+
+
+ /* Read `numberOfHMetrics' field from `hhea' table. */
+ static FT_Error
+ read_num_hmetrics( FT_Stream stream,
+ FT_UShort* num_hmetrics )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_UShort num_metrics;
+
+
+ if ( FT_STREAM_SKIP( 34 ) )
+ return FT_THROW( Invalid_Table );
+
+ if ( FT_READ_USHORT( num_metrics ) )
+ return FT_THROW( Invalid_Table );
+
+ *num_hmetrics = num_metrics;
+
+ return error;
+ }
+
+
+ /* An auxiliary function for overflow-safe addition. */
+ static FT_Int
+ with_sign( FT_Byte flag,
+ FT_Int base_val )
+ {
+ /* Precondition: 0 <= base_val < 65536 (to avoid overflow). */
+ return ( flag & 1 ) ? base_val : -base_val;
+ }
+
+
+ /* An auxiliary function for overflow-safe addition. */
+ static FT_Int
+ safe_int_addition( FT_Int a,
+ FT_Int b,
+ FT_Int* result )
+ {
+ if ( ( ( a > 0 ) && ( b > FT_INT_MAX - a ) ) ||
+ ( ( a < 0 ) && ( b < FT_INT_MIN - a ) ) )
+ return FT_THROW( Invalid_Table );
+
+ *result = a + b;
+ return FT_Err_Ok;
+ }
+
+
+ /*
+ * Decode variable-length (flag, xCoordinate, yCoordinate) triplet for a
+ * simple glyph. See
+ *
+ * https://www.w3.org/TR/WOFF2/#triplet_decoding
+ */
+ static FT_Error
+ triplet_decode( const FT_Byte* flags_in,
+ const FT_Byte* in,
+ FT_ULong in_size,
+ FT_ULong n_points,
+ WOFF2_Point result,
+ FT_ULong* in_bytes_used )
+ {
+ FT_Int x = 0;
+ FT_Int y = 0;
+ FT_Int dx;
+ FT_Int dy;
+ FT_Int b0, b1, b2;
+
+ FT_ULong triplet_index = 0;
+ FT_ULong data_bytes;
+
+ FT_UInt i;
+
+
+ if ( n_points > in_size )
+ return FT_THROW( Invalid_Table );
+
+ for ( i = 0; i < n_points; ++i )
+ {
+ FT_Byte flag = flags_in[i];
+ FT_Bool on_curve = !( flag >> 7 );
+
+
+ flag &= 0x7f;
+ if ( flag < 84 )
+ data_bytes = 1;
+ else if ( flag < 120 )
+ data_bytes = 2;
+ else if ( flag < 124 )
+ data_bytes = 3;
+ else
+ data_bytes = 4;
+
+ /* Overflow checks */
+ if ( triplet_index + data_bytes > in_size ||
+ triplet_index + data_bytes < triplet_index )
+ return FT_THROW( Invalid_Table );
+
+ if ( flag < 10 )
+ {
+ dx = 0;
+ dy = with_sign( flag,
+ ( ( flag & 14 ) << 7 ) + in[triplet_index] );
+ }
+ else if ( flag < 20 )
+ {
+ dx = with_sign( flag,
+ ( ( ( flag - 10 ) & 14 ) << 7 ) +
+ in[triplet_index] );
+ dy = 0;
+ }
+ else if ( flag < 84 )
+ {
+ b0 = flag - 20;
+ b1 = in[triplet_index];
+ dx = with_sign( flag,
+ 1 + ( b0 & 0x30 ) + ( b1 >> 4 ) );
+ dy = with_sign( flag >> 1,
+ 1 + ( ( b0 & 0x0c ) << 2 ) + ( b1 & 0x0f ) );
+ }
+ else if ( flag < 120 )
+ {
+ b0 = flag - 84;
+ dx = with_sign( flag,
+ 1 + ( ( b0 / 12 ) << 8 ) + in[triplet_index] );
+ dy = with_sign( flag >> 1,
+ 1 + ( ( ( b0 % 12 ) >> 2 ) << 8 ) +
+ in[triplet_index + 1] );
+ }
+ else if ( flag < 124 )
+ {
+ b2 = in[triplet_index + 1];
+ dx = with_sign( flag,
+ ( in[triplet_index] << 4 ) + ( b2 >> 4 ) );
+ dy = with_sign( flag >> 1,
+ ( ( b2 & 0x0f ) << 8 ) + in[triplet_index + 2] );
+ }
+ else
+ {
+ dx = with_sign( flag,
+ ( in[triplet_index] << 8 ) +
+ in[triplet_index + 1] );
+ dy = with_sign( flag >> 1,
+ ( in[triplet_index + 2] << 8 ) +
+ in[triplet_index + 3] );
+ }
+
+ triplet_index += data_bytes;
+
+ if ( safe_int_addition( x, dx, &x ) )
+ return FT_THROW( Invalid_Table );
+
+ if ( safe_int_addition( y, dy, &y ) )
+ return FT_THROW( Invalid_Table );
+
+ result[i].x = x;
+ result[i].y = y;
+ result[i].on_curve = on_curve;
+ }
+
+ *in_bytes_used = triplet_index;
+ return FT_Err_Ok;
+ }
+
+
+ /* Store decoded points in glyph buffer. */
+ static FT_Error
+ store_points( FT_ULong n_points,
+ const WOFF2_Point points,
+ FT_UShort n_contours,
+ FT_UShort instruction_len,
+ FT_Byte* dst,
+ FT_ULong dst_size,
+ FT_ULong* glyph_size )
+ {
+ FT_UInt flag_offset = 10 + ( 2 * n_contours ) + 2 + instruction_len;
+ FT_Byte last_flag = 0xFFU;
+ FT_Byte repeat_count = 0;
+ FT_Int last_x = 0;
+ FT_Int last_y = 0;
+ FT_UInt x_bytes = 0;
+ FT_UInt y_bytes = 0;
+ FT_UInt xy_bytes;
+ FT_UInt i;
+ FT_UInt x_offset;
+ FT_UInt y_offset;
+ FT_Byte* pointer;
+
+
+ for ( i = 0; i < n_points; ++i )
+ {
+ const WOFF2_PointRec point = points[i];
+
+ FT_Byte flag = point.on_curve ? GLYF_ON_CURVE : 0;
+ FT_Int dx = point.x - last_x;
+ FT_Int dy = point.y - last_y;
+
+
+ if ( dx == 0 )
+ flag |= GLYF_THIS_X_IS_SAME;
+ else if ( dx > -256 && dx < 256 )
+ {
+ flag |= GLYF_X_SHORT | ( dx > 0 ? GLYF_THIS_X_IS_SAME : 0 );
+ x_bytes += 1;
+ }
+ else
+ x_bytes += 2;
+
+ if ( dy == 0 )
+ flag |= GLYF_THIS_Y_IS_SAME;
+ else if ( dy > -256 && dy < 256 )
+ {
+ flag |= GLYF_Y_SHORT | ( dy > 0 ? GLYF_THIS_Y_IS_SAME : 0 );
+ y_bytes += 1;
+ }
+ else
+ y_bytes += 2;
+
+ if ( flag == last_flag && repeat_count != 255 )
+ {
+ dst[flag_offset - 1] |= GLYF_REPEAT;
+ repeat_count++;
+ }
+ else
+ {
+ if ( repeat_count != 0 )
+ {
+ if ( flag_offset >= dst_size )
+ return FT_THROW( Invalid_Table );
+
+ dst[flag_offset++] = repeat_count;
+ }
+ if ( flag_offset >= dst_size )
+ return FT_THROW( Invalid_Table );
+
+ dst[flag_offset++] = flag;
+ repeat_count = 0;
+ }
+
+ last_x = point.x;
+ last_y = point.y;
+ last_flag = flag;
+ }
+
+ if ( repeat_count != 0 )
+ {
+ if ( flag_offset >= dst_size )
+ return FT_THROW( Invalid_Table );
+
+ dst[flag_offset++] = repeat_count;
+ }
+
+ xy_bytes = x_bytes + y_bytes;
+ if ( xy_bytes < x_bytes ||
+ flag_offset + xy_bytes < flag_offset ||
+ flag_offset + xy_bytes > dst_size )
+ return FT_THROW( Invalid_Table );
+
+ x_offset = flag_offset;
+ y_offset = flag_offset + x_bytes;
+ last_x = 0;
+ last_y = 0;
+
+ for ( i = 0; i < n_points; ++i )
+ {
+ FT_Int dx = points[i].x - last_x;
+ FT_Int dy = points[i].y - last_y;
+
+
+ if ( dx == 0 )
+ ;
+ else if ( dx > -256 && dx < 256 )
+ dst[x_offset++] = (FT_Byte)FT_ABS( dx );
+ else
+ {
+ pointer = dst + x_offset;
+ WRITE_SHORT( pointer, dx );
+ x_offset += 2;
+ }
+
+ last_x += dx;
+
+ if ( dy == 0 )
+ ;
+ else if ( dy > -256 && dy < 256 )
+ dst[y_offset++] = (FT_Byte)FT_ABS( dy );
+ else
+ {
+ pointer = dst + y_offset;
+ WRITE_SHORT( pointer, dy );
+ y_offset += 2;
+ }
+
+ last_y += dy;
+ }
+
+ *glyph_size = y_offset;
+ return FT_Err_Ok;
+ }
+
+
+ static void
+ compute_bbox( FT_ULong n_points,
+ const WOFF2_Point points,
+ FT_Byte* dst,
+ FT_UShort* src_x_min )
+ {
+ FT_Int x_min = 0;
+ FT_Int y_min = 0;
+ FT_Int x_max = 0;
+ FT_Int y_max = 0;
+
+ FT_UInt i;
+
+ FT_ULong offset;
+ FT_Byte* pointer;
+
+
+ if ( n_points > 0 )
+ {
+ x_min = points[0].x;
+ y_min = points[0].y;
+ x_max = points[0].x;
+ y_max = points[0].y;
+ }
+
+ for ( i = 1; i < n_points; ++i )
+ {
+ FT_Int x = points[i].x;
+ FT_Int y = points[i].y;
+
+
+ x_min = FT_MIN( x, x_min );
+ y_min = FT_MIN( y, y_min );
+ x_max = FT_MAX( x, x_max );
+ y_max = FT_MAX( y, y_max );
+ }
+
+ /* Write values to `glyf' record. */
+ offset = 2;
+ pointer = dst + offset;
+
+ WRITE_SHORT( pointer, x_min );
+ WRITE_SHORT( pointer, y_min );
+ WRITE_SHORT( pointer, x_max );
+ WRITE_SHORT( pointer, y_max );
+
+ *src_x_min = (FT_UShort)x_min;
+ }
+
+
+ static FT_Error
+ compositeGlyph_size( FT_Stream stream,
+ FT_ULong offset,
+ FT_ULong* size,
+ FT_Bool* have_instructions )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_ULong start_offset = offset;
+ FT_Bool we_have_inst = FALSE;
+ FT_UShort flags = FLAG_MORE_COMPONENTS;
+
+
+ if ( FT_STREAM_SEEK( start_offset ) )
+ goto Exit;
+ while ( flags & FLAG_MORE_COMPONENTS )
+ {
+ FT_ULong arg_size;
+
+
+ if ( FT_READ_USHORT( flags ) )
+ goto Exit;
+ we_have_inst |= ( flags & FLAG_WE_HAVE_INSTRUCTIONS ) != 0;
+ /* glyph index */
+ arg_size = 2;
+ if ( flags & FLAG_ARG_1_AND_2_ARE_WORDS )
+ arg_size += 4;
+ else
+ arg_size += 2;
+
+ if ( flags & FLAG_WE_HAVE_A_SCALE )
+ arg_size += 2;
+ else if ( flags & FLAG_WE_HAVE_AN_X_AND_Y_SCALE )
+ arg_size += 4;
+ else if ( flags & FLAG_WE_HAVE_A_TWO_BY_TWO )
+ arg_size += 8;
+
+ if ( FT_STREAM_SKIP( arg_size ) )
+ goto Exit;
+ }
+
+ *size = FT_STREAM_POS() - start_offset;
+ *have_instructions = we_have_inst;
+
+ Exit:
+ return error;
+ }
+
+
+ /* Store loca values (provided by `reconstruct_glyf') to output stream. */
+ static FT_Error
+ store_loca( FT_ULong* loca_values,
+ FT_ULong loca_values_size,
+ FT_UShort index_format,
+ FT_ULong* checksum,
+ FT_Byte** sfnt_bytes,
+ FT_ULong* sfnt_size,
+ FT_ULong* out_offset,
+ FT_Memory memory )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_Byte* sfnt = *sfnt_bytes;
+ FT_ULong dest_offset = *out_offset;
+
+ FT_Byte* loca_buf = NULL;
+ FT_Byte* dst = NULL;
+
+ FT_UInt i = 0;
+ FT_ULong loca_buf_size;
+
+ const FT_ULong offset_size = index_format ? 4 : 2;
+
+
+ if ( ( loca_values_size << 2 ) >> 2 != loca_values_size )
+ goto Fail;
+
+ loca_buf_size = loca_values_size * offset_size;
+ if ( FT_NEW_ARRAY( loca_buf, loca_buf_size ) )
+ goto Fail;
+
+ dst = loca_buf;
+ for ( i = 0; i < loca_values_size; i++ )
+ {
+ FT_ULong value = loca_values[i];
+
+
+ if ( index_format )
+ WRITE_ULONG( dst, value );
+ else
+ WRITE_USHORT( dst, ( value >> 1 ) );
+ }
+
+ *checksum = compute_ULong_sum( loca_buf, loca_buf_size );
+ /* Write `loca' table to sfnt buffer. */
+ if ( WRITE_SFNT_BUF( loca_buf, loca_buf_size ) )
+ goto Fail;
+
+ /* Set pointer `sfnt_bytes' to its correct value. */
+ *sfnt_bytes = sfnt;
+ *out_offset = dest_offset;
+
+ FT_FREE( loca_buf );
+ return error;
+
+ Fail:
+ if ( !error )
+ error = FT_THROW( Invalid_Table );
+
+ FT_FREE( loca_buf );
+
+ return error;
+ }
+
+
+ static FT_Error
+ reconstruct_glyf( FT_Stream stream,
+ FT_ULong* glyf_checksum,
+ FT_ULong* loca_checksum,
+ FT_Byte** sfnt_bytes,
+ FT_ULong* sfnt_size,
+ FT_ULong* out_offset,
+ WOFF2_Info info,
+ FT_Memory memory )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_Byte* sfnt = *sfnt_bytes;
+
+ /* current position in stream */
+ const FT_ULong pos = FT_STREAM_POS();
+
+ FT_UInt num_substreams = 7;
+
+ FT_UShort num_glyphs;
+ FT_UShort index_format;
+ FT_ULong expected_loca_length;
+ FT_UInt offset;
+ FT_UInt i;
+ FT_ULong points_size;
+ FT_ULong bitmap_length;
+ FT_ULong glyph_buf_size;
+ FT_ULong bbox_bitmap_offset;
+
+ const FT_ULong glyf_start = *out_offset;
+ FT_ULong dest_offset = *out_offset;
+
+ WOFF2_Substream substreams = NULL;
+
+ FT_ULong* loca_values = NULL;
+ FT_UShort* n_points_arr = NULL;
+ FT_Byte* glyph_buf = NULL;
+ WOFF2_Point points = NULL;
+
+
+ if ( FT_NEW_ARRAY( substreams, num_substreams ) )
+ goto Fail;
+
+ if ( FT_STREAM_SKIP( 4 ) )
+ goto Fail;
+ if ( FT_READ_USHORT( num_glyphs ) )
+ goto Fail;
+ if ( FT_READ_USHORT( index_format ) )
+ goto Fail;
+
+ FT_TRACE4(( "num_glyphs = %u; index_format = %u\n",
+ num_glyphs, index_format ));
+
+ info->num_glyphs = num_glyphs;
+
+ /* Calculate expected length of loca and compare. */
+ /* See https://www.w3.org/TR/WOFF2/#conform-mustRejectLoca */
+ /* index_format = 0 => Short version `loca'. */
+ /* index_format = 1 => Long version `loca'. */
+ expected_loca_length = ( index_format ? 4 : 2 ) *
+ ( (FT_ULong)num_glyphs + 1 );
+ if ( info->loca_table->dst_length != expected_loca_length )
+ goto Fail;
+
+ offset = ( 2 + num_substreams ) * 4;
+ if ( offset > info->glyf_table->TransformLength )
+ goto Fail;
+
+ for ( i = 0; i < num_substreams; ++i )
+ {
+ FT_ULong substream_size;
+
+
+ if ( FT_READ_ULONG( substream_size ) )
+ goto Fail;
+ if ( substream_size > info->glyf_table->TransformLength - offset )
+ goto Fail;
+
+ substreams[i].start = pos + offset;
+ substreams[i].offset = pos + offset;
+ substreams[i].size = substream_size;
+
+ FT_TRACE5(( " Substream %d: offset = %lu; size = %lu;\n",
+ i, substreams[i].offset, substreams[i].size ));
+ offset += substream_size;
+ }
+
+ if ( FT_NEW_ARRAY( loca_values, num_glyphs + 1 ) )
+ goto Fail;
+
+ points_size = 0;
+ bbox_bitmap_offset = substreams[BBOX_STREAM].offset;
+
+ /* Size of bboxBitmap = 4 * floor((numGlyphs + 31) / 32) */
+ bitmap_length = ( ( num_glyphs + 31U ) >> 5 ) << 2;
+ substreams[BBOX_STREAM].offset += bitmap_length;
+
+ glyph_buf_size = WOFF2_DEFAULT_GLYPH_BUF;
+ if ( FT_NEW_ARRAY( glyph_buf, glyph_buf_size ) )
+ goto Fail;
+
+ if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
+ goto Fail;
+
+ for ( i = 0; i < num_glyphs; ++i )
+ {
+ FT_ULong glyph_size = 0;
+ FT_UShort n_contours = 0;
+ FT_Bool have_bbox = FALSE;
+ FT_Byte bbox_bitmap;
+ FT_ULong bbox_offset;
+ FT_UShort x_min = 0;
+
+
+ /* Set `have_bbox'. */
+ bbox_offset = bbox_bitmap_offset + ( i >> 3 );
+ if ( FT_STREAM_SEEK( bbox_offset ) ||
+ FT_READ_BYTE( bbox_bitmap ) )
+ goto Fail;
+ if ( bbox_bitmap & ( 0x80 >> ( i & 7 ) ) )
+ have_bbox = TRUE;
+
+ /* Read value from `nContourStream'. */
+ if ( FT_STREAM_SEEK( substreams[N_CONTOUR_STREAM].offset ) ||
+ FT_READ_USHORT( n_contours ) )
+ goto Fail;
+ substreams[N_CONTOUR_STREAM].offset += 2;
+
+ if ( n_contours == 0xffff )
+ {
+ /* composite glyph */
+ FT_Bool have_instructions = FALSE;
+ FT_UShort instruction_size = 0;
+ FT_ULong composite_size;
+ FT_ULong size_needed;
+ FT_Byte* pointer = NULL;
+
+
+ /* Composite glyphs must have explicit bbox. */
+ if ( !have_bbox )
+ goto Fail;
+
+ if ( compositeGlyph_size( stream,
+ substreams[COMPOSITE_STREAM].offset,
+ &composite_size,
+ &have_instructions) )
+ goto Fail;
+
+ if ( have_instructions )
+ {
+ if ( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) ||
+ READ_255USHORT( instruction_size ) )
+ goto Fail;
+ substreams[GLYPH_STREAM].offset = FT_STREAM_POS();
+ }
+
+ size_needed = 12 + composite_size + instruction_size;
+ if ( glyph_buf_size < size_needed )
+ {
+ if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
+ goto Fail;
+ glyph_buf_size = size_needed;
+ }
+
+ pointer = glyph_buf + glyph_size;
+ WRITE_USHORT( pointer, n_contours );
+ glyph_size += 2;
+
+ /* Read x_min for current glyph. */
+ if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
+ FT_READ_USHORT( x_min ) )
+ goto Fail;
+ /* No increment here because we read again. */
+
+ if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
+ FT_STREAM_READ( glyph_buf + glyph_size, 8 ) )
+ goto Fail;
+
+ substreams[BBOX_STREAM].offset += 8;
+ glyph_size += 8;
+
+ if ( FT_STREAM_SEEK( substreams[COMPOSITE_STREAM].offset ) ||
+ FT_STREAM_READ( glyph_buf + glyph_size, composite_size ) )
+ goto Fail;
+
+ substreams[COMPOSITE_STREAM].offset += composite_size;
+ glyph_size += composite_size;
+
+ if ( have_instructions )
+ {
+ pointer = glyph_buf + glyph_size;
+ WRITE_USHORT( pointer, instruction_size );
+ glyph_size += 2;
+
+ if ( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) ||
+ FT_STREAM_READ( glyph_buf + glyph_size, instruction_size ) )
+ goto Fail;
+
+ substreams[INSTRUCTION_STREAM].offset += instruction_size;
+ glyph_size += instruction_size;
+ }
+ }
+ else if ( n_contours > 0 )
+ {
+ /* simple glyph */
+ FT_ULong total_n_points = 0;
+ FT_UShort n_points_contour;
+ FT_UInt j;
+ FT_ULong flag_size;
+ FT_ULong triplet_size;
+ FT_ULong triplet_bytes_used;
+ FT_Byte* flags_buf = NULL;
+ FT_Byte* triplet_buf = NULL;
+ FT_UShort instruction_size;
+ FT_ULong size_needed;
+ FT_Int end_point;
+ FT_UInt contour_ix;
+
+ FT_Byte* pointer = NULL;
+
+
+ if ( FT_NEW_ARRAY( n_points_arr, n_contours ) )
+ goto Fail;
+
+ if ( FT_STREAM_SEEK( substreams[N_POINTS_STREAM].offset ) )
+ goto Fail;
+
+ for ( j = 0; j < n_contours; ++j )
+ {
+ if ( READ_255USHORT( n_points_contour ) )
+ goto Fail;
+ n_points_arr[j] = n_points_contour;
+ /* Prevent negative/overflow. */
+ if ( total_n_points + n_points_contour < total_n_points )
+ goto Fail;
+ total_n_points += n_points_contour;
+ }
+ substreams[N_POINTS_STREAM].offset = FT_STREAM_POS();
+
+ flag_size = total_n_points;
+ if ( flag_size > substreams[FLAG_STREAM].size )
+ goto Fail;
+
+ flags_buf = stream->base + substreams[FLAG_STREAM].offset;
+ triplet_buf = stream->base + substreams[GLYPH_STREAM].offset;
+
+ if ( substreams[GLYPH_STREAM].size <
+ ( substreams[GLYPH_STREAM].offset -
+ substreams[GLYPH_STREAM].start ) )
+ goto Fail;
+
+ triplet_size = substreams[GLYPH_STREAM].size -
+ ( substreams[GLYPH_STREAM].offset -
+ substreams[GLYPH_STREAM].start );
+ triplet_bytes_used = 0;
+
+ /* Create array to store point information. */
+ points_size = total_n_points;
+ if ( FT_NEW_ARRAY( points, points_size ) )
+ goto Fail;
+
+ if ( triplet_decode( flags_buf,
+ triplet_buf,
+ triplet_size,
+ total_n_points,
+ points,
+ &triplet_bytes_used ) )
+ goto Fail;
+
+ substreams[FLAG_STREAM].offset += flag_size;
+ substreams[GLYPH_STREAM].offset += triplet_bytes_used;
+
+ if ( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) ||
+ READ_255USHORT( instruction_size ) )
+ goto Fail;
+
+ substreams[GLYPH_STREAM].offset = FT_STREAM_POS();
+
+ if ( total_n_points >= ( 1 << 27 ) )
+ goto Fail;
+
+ size_needed = 12 +
+ ( 2 * n_contours ) +
+ ( 5 * total_n_points ) +
+ instruction_size;
+ if ( glyph_buf_size < size_needed )
+ {
+ if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
+ goto Fail;
+ glyph_buf_size = size_needed;
+ }
+
+ pointer = glyph_buf + glyph_size;
+ WRITE_USHORT( pointer, n_contours );
+ glyph_size += 2;
+
+ if ( have_bbox )
+ {
+ /* Read x_min for current glyph. */
+ if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
+ FT_READ_USHORT( x_min ) )
+ goto Fail;
+ /* No increment here because we read again. */
+
+ if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) ||
+ FT_STREAM_READ( glyph_buf + glyph_size, 8 ) )
+ goto Fail;
+ substreams[BBOX_STREAM].offset += 8;
+ }
+ else
+ compute_bbox( total_n_points, points, glyph_buf, &x_min );
+
+ glyph_size = CONTOUR_OFFSET_END_POINT;
+
+ pointer = glyph_buf + glyph_size;
+ end_point = -1;
+
+ for ( contour_ix = 0; contour_ix < n_contours; ++contour_ix )
+ {
+ end_point += n_points_arr[contour_ix];
+ if ( end_point >= 65536 )
+ goto Fail;
+
+ WRITE_SHORT( pointer, end_point );
+ glyph_size += 2;
+ }
+
+ WRITE_USHORT( pointer, instruction_size );
+ glyph_size += 2;
+
+ if ( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) ||
+ FT_STREAM_READ( glyph_buf + glyph_size, instruction_size ) )
+ goto Fail;
+
+ substreams[INSTRUCTION_STREAM].offset += instruction_size;
+ glyph_size += instruction_size;
+
+ if ( store_points( total_n_points,
+ points,
+ n_contours,
+ instruction_size,
+ glyph_buf,
+ glyph_buf_size,
+ &glyph_size ) )
+ goto Fail;
+
+ FT_FREE( points );
+ FT_FREE( n_points_arr );
+ }
+ else
+ {
+ /* Empty glyph. */
+ /* Must not have a bbox. */
+ if ( have_bbox )
+ {
+ FT_ERROR(( "Empty glyph has a bbox.\n" ));
+ goto Fail;
+ }
+ }
+
+ loca_values[i] = dest_offset - glyf_start;
+
+ if ( WRITE_SFNT_BUF( glyph_buf, glyph_size ) )
+ goto Fail;
+
+ if ( pad4( &sfnt, sfnt_size, &dest_offset, memory ) )
+ goto Fail;
+
+ *glyf_checksum += compute_ULong_sum( glyph_buf, glyph_size );
+
+ /* Store x_mins, may be required to reconstruct `hmtx'. */
+ if ( n_contours > 0 )
+ info->x_mins[i] = (FT_Short)x_min;
+ }
+
+ info->glyf_table->dst_length = dest_offset - info->glyf_table->dst_offset;
+ info->loca_table->dst_offset = dest_offset;
+
+ /* `loca[n]' will be equal to the length of the `glyf' table. */
+ loca_values[num_glyphs] = info->glyf_table->dst_length;
+
+ if ( store_loca( loca_values,
+ num_glyphs + 1,
+ index_format,
+ loca_checksum,
+ &sfnt,
+ sfnt_size,
+ &dest_offset,
+ memory ) )
+ goto Fail;
+
+ info->loca_table->dst_length = dest_offset - info->loca_table->dst_offset;
+
+ FT_TRACE4(( " loca table info:\n" ));
+ FT_TRACE4(( " dst_offset = %lu\n", info->loca_table->dst_offset ));
+ FT_TRACE4(( " dst_length = %lu\n", info->loca_table->dst_length ));
+ FT_TRACE4(( " checksum = %09lx\n", *loca_checksum ));
+
+ /* Set pointer `sfnt_bytes' to its correct value. */
+ *sfnt_bytes = sfnt;
+ *out_offset = dest_offset;
+
+ FT_FREE( substreams );
+ FT_FREE( loca_values );
+ FT_FREE( n_points_arr );
+ FT_FREE( glyph_buf );
+ FT_FREE( points );
+
+ return error;
+
+ Fail:
+ if ( !error )
+ error = FT_THROW( Invalid_Table );
+
+ /* Set pointer `sfnt_bytes' to its correct value. */
+ *sfnt_bytes = sfnt;
+
+ FT_FREE( substreams );
+ FT_FREE( loca_values );
+ FT_FREE( n_points_arr );
+ FT_FREE( glyph_buf );
+ FT_FREE( points );
+
+ return error;
+ }
+
+
+ /* Get `x_mins' for untransformed `glyf' table. */
+ static FT_Error
+ get_x_mins( FT_Stream stream,
+ WOFF2_Table* tables,
+ FT_UShort num_tables,
+ WOFF2_Info info,
+ FT_Memory memory )
+ {
+ FT_UShort num_glyphs;
+ FT_UShort index_format;
+ FT_ULong glyf_offset;
+ FT_UShort glyf_offset_short;
+ FT_ULong loca_offset;
+ FT_Int i;
+ FT_Error error = FT_Err_Ok;
+ FT_ULong offset_size;
+
+ /* At this point of time those tables might not have been read yet. */
+ const WOFF2_Table maxp_table = find_table( tables, num_tables,
+ TTAG_maxp );
+ const WOFF2_Table head_table = find_table( tables, num_tables,
+ TTAG_head );
+
+
+ if ( !maxp_table )
+ {
+ FT_ERROR(( "`maxp' table is missing.\n" ));
+ return FT_THROW( Invalid_Table );
+ }
+
+ if ( !head_table )
+ {
+ FT_ERROR(( "`head' table is missing.\n" ));
+ return FT_THROW( Invalid_Table );
+ }
+
+ if ( !info->loca_table )
+ {
+ FT_ERROR(( "`loca' table is missing.\n" ));
+ return FT_THROW( Invalid_Table );
+ }
+
+ /* Read `numGlyphs' field from `maxp' table. */
+ if ( FT_STREAM_SEEK( maxp_table->src_offset ) || FT_STREAM_SKIP( 8 ) )
+ return error;
+
+ if ( FT_READ_USHORT( num_glyphs ) )
+ return error;
+
+ info->num_glyphs = num_glyphs;
+
+ /* Read `indexToLocFormat' field from `head' table. */
+ if ( FT_STREAM_SEEK( head_table->src_offset ) ||
+ FT_STREAM_SKIP( 50 ) )
+ return error;
+
+ if ( FT_READ_USHORT( index_format ) )
+ return error;
+
+ offset_size = index_format ? 4 : 2;
+
+ /* Create `x_mins' array. */
+ if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
+ return error;
+
+ loca_offset = info->loca_table->src_offset;
+
+ for ( i = 0; i < num_glyphs; ++i )
+ {
+ if ( FT_STREAM_SEEK( loca_offset ) )
+ return error;
+
+ loca_offset += offset_size;
+
+ if ( index_format )
+ {
+ if ( FT_READ_ULONG( glyf_offset ) )
+ return error;
+ }
+ else
+ {
+ if ( FT_READ_USHORT( glyf_offset_short ) )
+ return error;
+
+ glyf_offset = (FT_ULong)( glyf_offset_short );
+ glyf_offset = glyf_offset << 1;
+ }
+
+ glyf_offset += info->glyf_table->src_offset;
+
+ if ( FT_STREAM_SEEK( glyf_offset ) || FT_STREAM_SKIP( 2 ) )
+ return error;
+
+ if ( FT_READ_SHORT( info->x_mins[i] ) )
+ return error;
+ }
+
+ return error;
+ }
+
+
+ static FT_Error
+ reconstruct_hmtx( FT_Stream stream,
+ FT_UShort num_glyphs,
+ FT_UShort num_hmetrics,
+ FT_Short* x_mins,
+ FT_ULong* checksum,
+ FT_Byte** sfnt_bytes,
+ FT_ULong* sfnt_size,
+ FT_ULong* out_offset,
+ FT_Memory memory )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_Byte* sfnt = *sfnt_bytes;
+ FT_ULong dest_offset = *out_offset;
+
+ FT_Byte hmtx_flags;
+ FT_Bool has_proportional_lsbs, has_monospace_lsbs;
+ FT_ULong hmtx_table_size;
+ FT_Int i;
+
+ FT_UShort* advance_widths = NULL;
+ FT_Short* lsbs = NULL;
+ FT_Byte* hmtx_table = NULL;
+ FT_Byte* dst = NULL;
+
+
+ if ( FT_READ_BYTE( hmtx_flags ) )
+ goto Fail;
+
+ has_proportional_lsbs = ( hmtx_flags & 1 ) == 0;
+ has_monospace_lsbs = ( hmtx_flags & 2 ) == 0;
+
+ /* Bits 2-7 are reserved and MUST be zero. */
+ if ( ( hmtx_flags & 0xFC ) != 0 )
+ goto Fail;
+
+ /* Are you REALLY transformed? */
+ if ( has_proportional_lsbs && has_monospace_lsbs )
+ goto Fail;
+
+ /* Cannot have a transformed `hmtx' without `glyf'. */
+ if ( ( num_hmetrics > num_glyphs ) ||
+ ( num_hmetrics < 1 ) )
+ goto Fail;
+
+ /* Must have at least one entry. */
+ if ( num_hmetrics < 1 )
+ goto Fail;
+
+ if ( FT_NEW_ARRAY( advance_widths, num_hmetrics ) ||
+ FT_NEW_ARRAY( lsbs, num_glyphs ) )
+ goto Fail;
+
+ /* Read `advanceWidth' stream. Always present. */
+ for ( i = 0; i < num_hmetrics; i++ )
+ {
+ FT_UShort advance_width;
+
+
+ if ( FT_READ_USHORT( advance_width ) )
+ goto Fail;
+
+ advance_widths[i] = advance_width;
+ }
+
+ /* lsb values for proportional glyphs. */
+ for ( i = 0; i < num_hmetrics; i++ )
+ {
+ FT_Short lsb;
+
+
+ if ( has_proportional_lsbs )
+ {
+ if ( FT_READ_SHORT( lsb ) )
+ goto Fail;
+ }
+ else
+ lsb = x_mins[i];
+
+ lsbs[i] = lsb;
+ }
+
+ /* lsb values for monospaced glyphs. */
+ for ( i = num_hmetrics; i < num_glyphs; i++ )
+ {
+ FT_Short lsb;
+
+
+ if ( has_monospace_lsbs )
+ {
+ if ( FT_READ_SHORT( lsb ) )
+ goto Fail;
+ }
+ else
+ lsb = x_mins[i];
+
+ lsbs[i] = lsb;
+ }
+
+ /* Build the hmtx table. */
+ hmtx_table_size = 2 * num_hmetrics + 2 * num_glyphs;
+ if ( FT_NEW_ARRAY( hmtx_table, hmtx_table_size ) )
+ goto Fail;
+
+ dst = hmtx_table;
+ FT_TRACE6(( "hmtx values: \n" ));
+ for ( i = 0; i < num_glyphs; i++ )
+ {
+ if ( i < num_hmetrics )
+ {
+ WRITE_SHORT( dst, advance_widths[i] );
+ FT_TRACE6(( "%d ", advance_widths[i] ));
+ }
+
+ WRITE_SHORT( dst, lsbs[i] );
+ FT_TRACE6(( "%d ", lsbs[i] ));
+ }
+ FT_TRACE6(( "\n" ));
+
+ *checksum = compute_ULong_sum( hmtx_table, hmtx_table_size );
+ /* Write `hmtx' table to sfnt buffer. */
+ if ( WRITE_SFNT_BUF( hmtx_table, hmtx_table_size ) )
+ goto Fail;
+
+ /* Set pointer `sfnt_bytes' to its correct value. */
+ *sfnt_bytes = sfnt;
+ *out_offset = dest_offset;
+
+ FT_FREE( advance_widths );
+ FT_FREE( lsbs );
+ FT_FREE( hmtx_table );
+
+ return error;
+
+ Fail:
+ FT_FREE( advance_widths );
+ FT_FREE( lsbs );
+ FT_FREE( hmtx_table );
+
+ if ( !error )
+ error = FT_THROW( Invalid_Table );
+
+ return error;
+ }
+
+
+ static FT_Error
+ reconstruct_font( FT_Byte* transformed_buf,
+ FT_ULong transformed_buf_size,
+ WOFF2_Table* indices,
+ WOFF2_Header woff2,
+ WOFF2_Info info,
+ FT_Byte** sfnt_bytes,
+ FT_ULong* sfnt_size,
+ FT_Memory memory )
+ {
+ /* Memory management of `transformed_buf' is handled by the caller. */
+
+ FT_Error error = FT_Err_Ok;
+ FT_Stream stream = NULL;
+ FT_Byte* buf_cursor = NULL;
+ FT_Byte* table_entry = NULL;
+
+ /* We are reallocating memory for `sfnt', so its pointer may change. */
+ FT_Byte* sfnt = *sfnt_bytes;
+
+ FT_UShort num_tables = woff2->num_tables;
+ FT_ULong dest_offset = 12 + num_tables * 16UL;
+
+ FT_ULong checksum = 0;
+ FT_ULong loca_checksum = 0;
+ FT_Int nn = 0;
+ FT_UShort num_hmetrics = 0;
+ FT_ULong font_checksum = info->header_checksum;
+ FT_Bool is_glyf_xform = FALSE;
+
+ FT_ULong table_entry_offset = 12;
+
+
+ /* A few table checks before reconstruction. */
+ /* `glyf' must be present with `loca'. */
+ info->glyf_table = find_table( indices, num_tables, TTAG_glyf );
+ info->loca_table = find_table( indices, num_tables, TTAG_loca );
+
+ if ( ( info->glyf_table == NULL ) ^ ( info->loca_table == NULL ) )
+ {
+ FT_ERROR(( "One of `glyf'/`loca' tables missing.\n" ));
+ return FT_THROW( Invalid_Table );
+ }
+
+ /* Both `glyf' and `loca' must have same transformation. */
+ if ( info->glyf_table != NULL )
+ {
+ if ( ( info->glyf_table->flags & WOFF2_FLAGS_TRANSFORM ) !=
+ ( info->loca_table->flags & WOFF2_FLAGS_TRANSFORM ) )
+ {
+ FT_ERROR(( "Transformation mismatch"
+ " between `glyf' and `loca' table." ));
+ return FT_THROW( Invalid_Table );
+ }
+ }
+
+ /* Create buffer for table entries. */
+ if ( FT_NEW_ARRAY( table_entry, 16 ) )
+ goto Fail;
+
+ /* Create a stream for the uncompressed buffer. */
+ if ( FT_NEW( stream ) )
+ goto Fail;
+ FT_Stream_OpenMemory( stream, transformed_buf, transformed_buf_size );
+
+ FT_ASSERT( FT_STREAM_POS() == 0 );
+
+ /* Reconstruct/copy tables to output stream. */
+ for ( nn = 0; nn < num_tables; nn++ )
+ {
+ WOFF2_TableRec table = *( indices[nn] );
+
+
+ FT_TRACE3(( "Seeking to %ld with table size %ld.\n",
+ table.src_offset, table.src_length ));
+ FT_TRACE3(( "Table tag: %c%c%c%c.\n",
+ (FT_Char)( table.Tag >> 24 ),
+ (FT_Char)( table.Tag >> 16 ),
+ (FT_Char)( table.Tag >> 8 ),
+ (FT_Char)( table.Tag ) ));
+
+ if ( FT_STREAM_SEEK( table.src_offset ) )
+ goto Fail;
+
+ if ( table.src_offset + table.src_length > transformed_buf_size )
+ goto Fail;
+
+ /* Get stream size for fields of `hmtx' table. */
+ if ( table.Tag == TTAG_hhea )
+ {
+ if ( read_num_hmetrics( stream, &num_hmetrics ) )
+ goto Fail;
+ }
+
+ info->num_hmetrics = num_hmetrics;
+
+ checksum = 0;
+ if ( ( table.flags & WOFF2_FLAGS_TRANSFORM ) != WOFF2_FLAGS_TRANSFORM )
+ {
+ /* Check whether `head' is at least 12 bytes. */
+ if ( table.Tag == TTAG_head )
+ {
+ if ( table.src_length < 12 )
+ goto Fail;
+
+ buf_cursor = transformed_buf + table.src_offset + 8;
+ /* Set checkSumAdjustment = 0 */
+ WRITE_ULONG( buf_cursor, 0 );
+ }
+
+ table.dst_offset = dest_offset;
+
+ checksum = compute_ULong_sum( transformed_buf + table.src_offset,
+ table.src_length );
+ FT_TRACE4(( "Checksum = %09lx.\n", checksum ));
+
+ if ( WRITE_SFNT_BUF( transformed_buf + table.src_offset,
+ table.src_length ) )
+ goto Fail;
+ }
+ else
+ {
+ FT_TRACE3(( "This table is transformed.\n" ));
+
+ if ( table.Tag == TTAG_glyf )
+ {
+ is_glyf_xform = TRUE;
+ table.dst_offset = dest_offset;
+
+ if ( reconstruct_glyf( stream,
+ &checksum,
+ &loca_checksum,
+ &sfnt,
+ sfnt_size,
+ &dest_offset,
+ info,
+ memory ) )
+ goto Fail;
+
+ FT_TRACE4(( "Checksum = %09lx.\n", checksum ));
+ }
+
+ else if ( table.Tag == TTAG_loca )
+ checksum = loca_checksum;
+
+ else if ( table.Tag == TTAG_hmtx )
+ {
+ /* If glyf is not transformed and hmtx is, handle separately. */
+ if ( !is_glyf_xform )
+ {
+ if ( get_x_mins( stream, indices, num_tables, info, memory ) )
+ goto Fail;
+ }
+
+ table.dst_offset = dest_offset;
+
+ if ( reconstruct_hmtx( stream,
+ info->num_glyphs,
+ info->num_hmetrics,
+ info->x_mins,
+ &checksum,
+ &sfnt,
+ sfnt_size,
+ &dest_offset,
+ memory ) )
+ goto Fail;
+ }
+ else
+ {
+ /* Unknown transform. */
+ FT_ERROR(( "Unknown table transform.\n" ));
+ goto Fail;
+ }
+ }
+
+ font_checksum += checksum;
+
+ buf_cursor = &table_entry[0];
+ WRITE_ULONG( buf_cursor, table.Tag );
+ WRITE_ULONG( buf_cursor, checksum );
+ WRITE_ULONG( buf_cursor, table.dst_offset );
+ WRITE_ULONG( buf_cursor, table.dst_length );
+
+ WRITE_SFNT_BUF_AT( table_entry_offset, table_entry, 16 );
+
+ /* Update checksum. */
+ font_checksum += compute_ULong_sum( table_entry, 16 );
+
+ if ( pad4( &sfnt, sfnt_size, &dest_offset, memory ) )
+ goto Fail;
+
+ /* Sanity check. */
+ if ( (FT_ULong)( table.dst_offset + table.dst_length ) > dest_offset )
+ {
+ FT_ERROR(( "Table was partially written.\n" ));
+ goto Fail;
+ }
+ }
+
+ /* Update `head' checkSumAdjustment. */
+ info->head_table = find_table( indices, num_tables, TTAG_head );
+ if ( !info->head_table )
+ {
+ FT_ERROR(( "`head' table is missing.\n" ));
+ goto Fail;
+ }
+
+ if ( info->head_table->dst_length < 12 )
+ goto Fail;
+
+ buf_cursor = sfnt + info->head_table->dst_offset + 8;
+ font_checksum = 0xB1B0AFBA - font_checksum;
+
+ WRITE_ULONG( buf_cursor, font_checksum );
+
+ FT_TRACE2(( "Final checksum = %09lx.\n", font_checksum ));
+
+ woff2->actual_sfnt_size = dest_offset;
+
+ /* Set pointer of sfnt stream to its correct value. */
+ *sfnt_bytes = sfnt;
+
+ FT_FREE( table_entry );
+ FT_Stream_Close( stream );
+ FT_FREE( stream );
+
+ return error;
+
+ Fail:
+ if ( !error )
+ error = FT_THROW( Invalid_Table );
+
+ /* Set pointer of sfnt stream to its correct value. */
+ *sfnt_bytes = sfnt;
+
+ FT_FREE( table_entry );
+ FT_Stream_Close( stream );
+ FT_FREE( stream );
+
+ return error;
+ }
+
+
+ /* Replace `face->root.stream' with a stream containing the extracted */
+ /* SFNT of a WOFF2 font. */
+
+ FT_LOCAL_DEF( FT_Error )
+ woff2_open_font( FT_Stream stream,
+ TT_Face face,
+ FT_Int* face_instance_index,
+ FT_Long* num_faces )
+ {
+ FT_Memory memory = stream->memory;
+ FT_Error error = FT_Err_Ok;
+ FT_Int face_index;
+
+ WOFF2_HeaderRec woff2;
+ WOFF2_InfoRec info = { 0, 0, 0, NULL, NULL, NULL, NULL };
+ WOFF2_Table tables = NULL;
+ WOFF2_Table* indices = NULL;
+ WOFF2_Table* temp_indices = NULL;
+ WOFF2_Table last_table;
+
+ FT_Int nn;
+ FT_ULong j;
+ FT_ULong flags;
+ FT_UShort xform_version;
+ FT_ULong src_offset = 0;
+
+ FT_UInt glyf_index;
+ FT_UInt loca_index;
+ FT_UInt32 file_offset;
+
+ FT_Byte* sfnt = NULL;
+ FT_Stream sfnt_stream = NULL;
+ FT_Byte* sfnt_header;
+ FT_ULong sfnt_size;
+
+ FT_Byte* uncompressed_buf = NULL;
+
+ static const FT_Frame_Field woff2_header_fields[] =
+ {
+#undef FT_STRUCTURE
+#define FT_STRUCTURE WOFF2_HeaderRec
+
+ FT_FRAME_START( 48 ),
+ FT_FRAME_ULONG ( signature ),
+ FT_FRAME_ULONG ( flavor ),
+ FT_FRAME_ULONG ( length ),
+ FT_FRAME_USHORT ( num_tables ),
+ FT_FRAME_SKIP_BYTES( 2 ),
+ FT_FRAME_ULONG ( totalSfntSize ),
+ FT_FRAME_ULONG ( totalCompressedSize ),
+ FT_FRAME_SKIP_BYTES( 2 * 2 ),
+ FT_FRAME_ULONG ( metaOffset ),
+ FT_FRAME_ULONG ( metaLength ),
+ FT_FRAME_ULONG ( metaOrigLength ),
+ FT_FRAME_ULONG ( privOffset ),
+ FT_FRAME_ULONG ( privLength ),
+ FT_FRAME_END
+ };
+
+
+ FT_ASSERT( stream == face->root.stream );
+ FT_ASSERT( FT_STREAM_POS() == 0 );
+
+ face_index = FT_ABS( *face_instance_index ) & 0xFFFF;
+
+ /* Read WOFF2 Header. */
+ if ( FT_STREAM_READ_FIELDS( woff2_header_fields, &woff2 ) )
+ return error;
+
+ FT_TRACE4(( "signature -> 0x%lX\n", woff2.signature ));
+ FT_TRACE2(( "flavor -> 0x%08lx\n", woff2.flavor ));
+ FT_TRACE4(( "length -> %lu\n", woff2.length ));
+ FT_TRACE2(( "num_tables -> %hu\n", woff2.num_tables ));
+ FT_TRACE4(( "totalSfntSize -> %lu\n", woff2.totalSfntSize ));
+ FT_TRACE4(( "metaOffset -> %lu\n", woff2.metaOffset ));
+ FT_TRACE4(( "metaLength -> %lu\n", woff2.metaLength ));
+ FT_TRACE4(( "privOffset -> %lu\n", woff2.privOffset ));
+ FT_TRACE4(( "privLength -> %lu\n", woff2.privLength ));
+
+ /* Make sure we don't recurse back here. */
+ if ( woff2.flavor == TTAG_wOF2 )
+ return FT_THROW( Invalid_Table );
+
+ /* Miscellaneous checks. */
+ if ( woff2.length != stream->size ||
+ woff2.num_tables == 0 ||
+ 48 + woff2.num_tables * 20UL >= woff2.length ||
+ ( woff2.metaOffset == 0 && ( woff2.metaLength != 0 ||
+ woff2.metaOrigLength != 0 ) ) ||
+ ( woff2.metaLength != 0 && woff2.metaOrigLength == 0 ) ||
+ ( woff2.metaOffset >= woff2.length ) ||
+ ( woff2.length - woff2.metaOffset < woff2.metaLength ) ||
+ ( woff2.privOffset == 0 && woff2.privLength != 0 ) ||
+ ( woff2.privOffset >= woff2.length ) ||
+ ( woff2.length - woff2.privOffset < woff2.privLength ) )
+ {
+ FT_ERROR(( "woff2_open_font: invalid WOFF2 header\n" ));
+ return FT_THROW( Invalid_Table );
+ }
+
+ FT_TRACE2(( "woff2_open_font: WOFF2 Header is valid.\n" ));
+
+ woff2.ttc_fonts = NULL;
+
+ /* Read table directory. */
+ if ( FT_NEW_ARRAY( tables, woff2.num_tables ) ||
+ FT_NEW_ARRAY( indices, woff2.num_tables ) )
+ goto Exit;
+
+ FT_TRACE2((
+ "\n"
+ " tag flags transform origLen transformLen offset\n"
+ " -----------------------------------------------------------\n" ));
+ /* " XXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX" */
+
+ for ( nn = 0; nn < woff2.num_tables; nn++ )
+ {
+ WOFF2_Table table = tables + nn;
+
+
+ if ( FT_READ_BYTE( table->FlagByte ) )
+ goto Exit;
+
+ if ( ( table->FlagByte & 0x3f ) == 0x3f )
+ {
+ if ( FT_READ_ULONG( table->Tag ) )
+ goto Exit;
+ }
+ else
+ {
+ table->Tag = woff2_known_tags( table->FlagByte & 0x3f );
+ if ( !table->Tag )
+ {
+ FT_ERROR(( "woff2_open_font: Unknown table tag." ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+ }
+
+ flags = 0;
+ xform_version = ( table->FlagByte >> 6 ) & 0x03;
+
+ /* 0 means xform for glyph/loca, non-0 for others. */
+ if ( table->Tag == TTAG_glyf || table->Tag == TTAG_loca )
+ {
+ if ( xform_version == 0 )
+ flags |= WOFF2_FLAGS_TRANSFORM;
+ }
+ else if ( xform_version != 0 )
+ flags |= WOFF2_FLAGS_TRANSFORM;
+
+ flags |= xform_version;
+
+ if ( READ_BASE128( table->dst_length ) )
+ goto Exit;
+
+ table->TransformLength = table->dst_length;
+
+ if ( ( flags & WOFF2_FLAGS_TRANSFORM ) != 0 )
+ {
+ if ( READ_BASE128( table->TransformLength ) )
+ goto Exit;
+
+ if ( table->Tag == TTAG_loca && table->TransformLength )
+ {
+ FT_ERROR(( "woff2_open_font: Invalid loca `transformLength'.\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+ }
+
+ if ( src_offset + table->TransformLength < src_offset )
+ {
+ FT_ERROR(( "woff2_open_font: invalid WOFF2 table directory.\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ table->src_offset = src_offset;
+ table->src_length = table->TransformLength;
+ src_offset += table->TransformLength;
+ table->flags = flags;
+
+ FT_TRACE2(( " %c%c%c%c %08d %08d %08ld %08ld %08ld\n",
+ (FT_Char)( table->Tag >> 24 ),
+ (FT_Char)( table->Tag >> 16 ),
+ (FT_Char)( table->Tag >> 8 ),
+ (FT_Char)( table->Tag ),
+ table->FlagByte & 0x3f,
+ ( table->FlagByte >> 6 ) & 0x03,
+ table->dst_length,
+ table->TransformLength,
+ table->src_offset ));
+
+ indices[nn] = table;
+ }
+
+ /* End of last table is uncompressed size. */
+ last_table = indices[woff2.num_tables - 1];
+
+ woff2.uncompressed_size = last_table->src_offset +
+ last_table->src_length;
+ if ( woff2.uncompressed_size < last_table->src_offset )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ FT_TRACE2(( "Table directory parsed.\n" ));
+
+ /* Check for and read collection directory. */
+ woff2.num_fonts = 1;
+ woff2.header_version = 0;
+
+ if ( woff2.flavor == TTAG_ttcf )
+ {
+ FT_TRACE2(( "Font is a TTC, reading collection directory.\n" ));
+
+ if ( FT_READ_ULONG( woff2.header_version ) )
+ goto Exit;
+
+ if ( woff2.header_version != 0x00010000 &&
+ woff2.header_version != 0x00020000 )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ if ( READ_255USHORT( woff2.num_fonts ) )
+ goto Exit;
+
+ if ( !woff2.num_fonts )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ FT_TRACE4(( "Number of fonts in TTC: %d\n", woff2.num_fonts ));
+
+ if ( FT_NEW_ARRAY( woff2.ttc_fonts, woff2.num_fonts ) )
+ goto Exit;
+
+ for ( nn = 0; nn < woff2.num_fonts; nn++ )
+ {
+ WOFF2_TtcFont ttc_font = woff2.ttc_fonts + nn;
+
+
+ if ( READ_255USHORT( ttc_font->num_tables ) )
+ goto Exit;
+ if ( FT_READ_ULONG( ttc_font->flavor ) )
+ goto Exit;
+
+ if ( FT_NEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) )
+ goto Exit;
+
+ FT_TRACE5(( "Number of tables in font %d: %d\n",
+ nn, ttc_font->num_tables ));
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( ttc_font->num_tables )
+ FT_TRACE6(( " Indices: " ));
+#endif
+
+ glyf_index = 0;
+ loca_index = 0;
+
+ for ( j = 0; j < ttc_font->num_tables; j++ )
+ {
+ FT_UShort table_index;
+ WOFF2_Table table;
+
+
+ if ( READ_255USHORT( table_index ) )
+ goto Exit;
+
+ FT_TRACE6(( "%hu ", table_index ));
+ if ( table_index >= woff2.num_tables )
+ {
+ FT_ERROR(( "woff2_open_font: invalid table index\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ ttc_font->table_indices[j] = table_index;
+
+ table = indices[table_index];
+ if ( table->Tag == TTAG_loca )
+ loca_index = table_index;
+ if ( table->Tag == TTAG_glyf )
+ glyf_index = table_index;
+ }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( ttc_font->num_tables )
+ FT_TRACE6(( "\n" ));
+#endif
+
+ /* glyf and loca must be consecutive */
+ if ( glyf_index > 0 || loca_index > 0 )
+ {
+ if ( glyf_index > loca_index ||
+ loca_index - glyf_index != 1 )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+ }
+ }
+
+ /* Collection directory reading complete. */
+ FT_TRACE2(( "WOFF2 collection directory is valid.\n" ));
+ }
+ else
+ woff2.ttc_fonts = NULL;
+
+ woff2.compressed_offset = FT_STREAM_POS();
+ file_offset = ROUND4( woff2.compressed_offset +
+ woff2.totalCompressedSize );
+
+ /* Some more checks before we start reading the tables. */
+ if ( file_offset > woff2.length )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ if ( woff2.metaOffset )
+ {
+ if ( file_offset != woff2.metaOffset )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+ file_offset = ROUND4(woff2.metaOffset + woff2.metaLength);
+ }
+
+ if ( woff2.privOffset )
+ {
+ if ( file_offset != woff2.privOffset )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+ file_offset = ROUND4(woff2.privOffset + woff2.privLength);
+ }
+
+ if ( file_offset != ( ROUND4( woff2.length ) ) )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* Validate requested face index. */
+ *num_faces = woff2.num_fonts;
+ /* value -(N+1) requests information on index N */
+ if ( *face_instance_index < 0 )
+ face_index--;
+
+ if ( face_index >= woff2.num_fonts )
+ {
+ if ( *face_instance_index >= 0 )
+ {
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
+ else
+ face_index = 0;
+ }
+
+ /* Only retain tables of the requested face in a TTC. */
+ if ( woff2.header_version )
+ {
+ WOFF2_TtcFont ttc_font = woff2.ttc_fonts + face_index;
+
+
+ /* Create a temporary array. */
+ if ( FT_NEW_ARRAY( temp_indices,
+ ttc_font->num_tables ) )
+ goto Exit;
+
+ FT_TRACE4(( "Storing tables for TTC face index %d.\n", face_index ));
+ for ( nn = 0; nn < ttc_font->num_tables; nn++ )
+ temp_indices[nn] = indices[ttc_font->table_indices[nn]];
+
+ /* Resize array to required size. */
+ if ( FT_RENEW_ARRAY( indices,
+ woff2.num_tables,
+ ttc_font->num_tables ) )
+ goto Exit;
+
+ for ( nn = 0; nn < ttc_font->num_tables; nn++ )
+ indices[nn] = temp_indices[nn];
+
+ FT_FREE( temp_indices );
+
+ /* Change header values. */
+ woff2.flavor = ttc_font->flavor;
+ woff2.num_tables = ttc_font->num_tables;
+ }
+
+ /* We need to allocate this much at the minimum. */
+ sfnt_size = 12 + woff2.num_tables * 16UL;
+ /* This is what we normally expect. */
+ /* Initially trust `totalSfntSize' and change later as required. */
+ if ( woff2.totalSfntSize > sfnt_size )
+ {
+ /* However, adjust the value to something reasonable. */
+
+ /* Factor 64 is heuristic. */
+ if ( ( woff2.totalSfntSize >> 6 ) > woff2.length )
+ sfnt_size = woff2.length << 6;
+ else
+ sfnt_size = woff2.totalSfntSize;
+
+ /* Value 1<<26 = 67108864 is heuristic. */
+ if (sfnt_size >= (1 << 26))
+ sfnt_size = 1 << 26;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( sfnt_size != woff2.totalSfntSize )
+ FT_TRACE4(( "adjusting estimate of uncompressed font size"
+ " to %lu bytes\n",
+ sfnt_size ));
+#endif
+ }
+
+ /* Write sfnt header. */
+ if ( FT_ALLOC( sfnt, sfnt_size ) ||
+ FT_NEW( sfnt_stream ) )
+ goto Exit;
+
+ sfnt_header = sfnt;
+
+ WRITE_ULONG( sfnt_header, woff2.flavor );
+
+ if ( woff2.num_tables )
+ {
+ FT_UInt searchRange, entrySelector, rangeShift, x;
+
+
+ x = woff2.num_tables;
+ entrySelector = 0;
+ while ( x )
+ {
+ x >>= 1;
+ entrySelector += 1;
+ }
+ entrySelector--;
+
+ searchRange = ( 1 << entrySelector ) * 16;
+ rangeShift = ( woff2.num_tables * 16 ) - searchRange;
+
+ WRITE_USHORT( sfnt_header, woff2.num_tables );
+ WRITE_USHORT( sfnt_header, searchRange );
+ WRITE_USHORT( sfnt_header, entrySelector );
+ WRITE_USHORT( sfnt_header, rangeShift );
+ }
+
+ info.header_checksum = compute_ULong_sum( sfnt, 12 );
+
+ /* Sort tables by tag. */
+ ft_qsort( indices,
+ woff2.num_tables,
+ sizeof ( WOFF2_Table ),
+ compare_tags );
+
+ if ( woff2.uncompressed_size < 1 )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ if ( woff2.uncompressed_size > sfnt_size )
+ {
+ FT_ERROR(( "woff2_open_font: SFNT table lengths are too large.\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* Allocate memory for uncompressed table data. */
+ if ( FT_ALLOC( uncompressed_buf, woff2.uncompressed_size ) ||
+ FT_FRAME_ENTER( woff2.totalCompressedSize ) )
+ goto Exit;
+
+ /* Uncompress the stream. */
+ error = woff2_decompress( uncompressed_buf,
+ woff2.uncompressed_size,
+ stream->cursor,
+ woff2.totalCompressedSize );
+
+ FT_FRAME_EXIT();
+
+ if ( error )
+ goto Exit;
+
+ error = reconstruct_font( uncompressed_buf,
+ woff2.uncompressed_size,
+ indices,
+ &woff2,
+ &info,
+ &sfnt,
+ &sfnt_size,
+ memory );
+
+ if ( error )
+ goto Exit;
+
+ /* Resize `sfnt' to actual size of sfnt stream. */
+ if ( woff2.actual_sfnt_size < sfnt_size )
+ {
+ FT_TRACE5(( "Trimming sfnt stream from %lu to %lu.\n",
+ sfnt_size, woff2.actual_sfnt_size ));
+ if ( FT_REALLOC( sfnt,
+ (FT_ULong)( sfnt_size ),
+ (FT_ULong)( woff2.actual_sfnt_size ) ) )
+ goto Exit;
+ }
+
+ /* `reconstruct_font' has done all the work. */
+ /* Swap out stream and return. */
+ FT_Stream_OpenMemory( sfnt_stream, sfnt, woff2.actual_sfnt_size );
+ sfnt_stream->memory = stream->memory;
+ sfnt_stream->close = stream_close;
+
+ FT_Stream_Free(
+ face->root.stream,
+ ( face->root.face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
+
+ face->root.stream = sfnt_stream;
+ face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
+
+ /* Set face_index to 0 or -1. */
+ if ( *face_instance_index >= 0 )
+ *face_instance_index = 0;
+ else
+ *face_instance_index = -1;
+
+ FT_TRACE2(( "woff2_open_font: SFNT synthesized.\n" ));
+
+ Exit:
+ FT_FREE( tables );
+ FT_FREE( indices );
+ FT_FREE( uncompressed_buf );
+ FT_FREE( info.x_mins );
+
+ if ( woff2.ttc_fonts )
+ {
+ WOFF2_TtcFont ttc_font = woff2.ttc_fonts;
+
+
+ for ( nn = 0; nn < woff2.num_fonts; nn++ )
+ {
+ FT_FREE( ttc_font->table_indices );
+ ttc_font++;
+ }
+
+ FT_FREE( woff2.ttc_fonts );
+ }
+
+ if ( error )
+ {
+ FT_FREE( sfnt );
+ if ( sfnt_stream )
+ {
+ FT_Stream_Close( sfnt_stream );
+ FT_FREE( sfnt_stream );
+ }
+ }
+
+ return error;
+ }
+
+
+#undef READ_255USHORT
+#undef READ_BASE128
+#undef ROUND4
+#undef WRITE_USHORT
+#undef WRITE_ULONG
+#undef WRITE_SHORT
+#undef WRITE_SFNT_BUF
+#undef WRITE_SFNT_BUF_AT
+
+#undef N_CONTOUR_STREAM
+#undef N_POINTS_STREAM
+#undef FLAG_STREAM
+#undef GLYPH_STREAM
+#undef COMPOSITE_STREAM
+#undef BBOX_STREAM
+#undef INSTRUCTION_STREAM
+
+
+/* END */
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff2.h b/src/3rdparty/freetype/src/sfnt/sfwoff2.h
new file mode 100644
index 0000000000..798f66bd0a
--- /dev/null
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff2.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+ *
+ * sfwoff2.h
+ *
+ * WOFFF2 format management (specification).
+ *
+ * Copyright (C) 2019-2020 by
+ * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef SFWOFF2_H_
+#define SFWOFF2_H_
+
+
+#include <freetype/internal/sfnt.h>
+#include <freetype/internal/ftobjs.h>
+
+
+FT_BEGIN_HEADER
+
+
+ /* Leave the first byte open to store `flag_byte'. */
+#define WOFF2_FLAGS_TRANSFORM 1 << 8
+
+#define WOFF2_SFNT_HEADER_SIZE 12
+#define WOFF2_SFNT_ENTRY_SIZE 16
+
+ /* Suggested maximum size for output. */
+#define WOFF2_DEFAULT_MAX_SIZE 30 * 1024 * 1024
+
+ /* 98% of Google Fonts have no glyph above 5k bytes. */
+#define WOFF2_DEFAULT_GLYPH_BUF 5120
+
+ /* Composite glyph flags. */
+ /* See `CompositeGlyph.java' in `sfntly' for full definitions. */
+#define FLAG_ARG_1_AND_2_ARE_WORDS 1 << 0
+#define FLAG_WE_HAVE_A_SCALE 1 << 3
+#define FLAG_MORE_COMPONENTS 1 << 5
+#define FLAG_WE_HAVE_AN_X_AND_Y_SCALE 1 << 6
+#define FLAG_WE_HAVE_A_TWO_BY_TWO 1 << 7
+#define FLAG_WE_HAVE_INSTRUCTIONS 1 << 8
+
+ /* Simple glyph flags */
+#define GLYF_ON_CURVE 1 << 0
+#define GLYF_X_SHORT 1 << 1
+#define GLYF_Y_SHORT 1 << 2
+#define GLYF_REPEAT 1 << 3
+#define GLYF_THIS_X_IS_SAME 1 << 4
+#define GLYF_THIS_Y_IS_SAME 1 << 5
+
+ /* Other constants */
+#define CONTOUR_OFFSET_END_POINT 10
+
+
+ FT_LOCAL( FT_Error )
+ woff2_open_font( FT_Stream stream,
+ TT_Face face,
+ FT_Int* face_index,
+ FT_Long* num_faces );
+
+
+FT_END_HEADER
+
+#endif /* SFWOFF2_H_ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/src/sfnt/ttbdf.c b/src/3rdparty/freetype/src/sfnt/ttbdf.c
index 853599fc43..a287d3afc4 100644
--- a/src/3rdparty/freetype/src/sfnt/ttbdf.c
+++ b/src/3rdparty/freetype/src/sfnt/ttbdf.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded BDF properties (body).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,10 +16,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
#include "ttbdf.h"
#include "sferrors.h"
diff --git a/src/3rdparty/freetype/src/sfnt/ttbdf.h b/src/3rdparty/freetype/src/sfnt/ttbdf.h
index e4164e61fc..e60c01cb8b 100644
--- a/src/3rdparty/freetype/src/sfnt/ttbdf.h
+++ b/src/3rdparty/freetype/src/sfnt/ttbdf.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded BDF properties (specification).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define TTBDF_H_
-#include <ft2build.h>
#include "ttload.h"
-#include FT_BDF_H
+#include <freetype/ftbdf.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/ttcmap.c b/src/3rdparty/freetype/src/sfnt/ttcmap.c
index 683f3b1818..556a712199 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcmap.c
+++ b/src/3rdparty/freetype/src/sfnt/ttcmap.c
@@ -4,7 +4,7 @@
*
* TrueType character mapping table (cmap) support (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,14 +16,13 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include "sferrors.h" /* must come before FT_INTERNAL_VALIDATE_H */
+#include "sferrors.h" /* must come before `ftvalid.h' */
-#include FT_INTERNAL_VALIDATE_H
-#include FT_INTERNAL_STREAM_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include <freetype/internal/ftvalid.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/services/svpscmap.h>
#include "ttload.h"
#include "ttcmap.h"
#include "ttpost.h"
@@ -3752,6 +3751,7 @@
static const TT_CMap_Class tt_cmap_classes[] =
{
+#undef TTCMAPCITEM
#define TTCMAPCITEM( a ) &a,
#include "ttcmapc.h"
NULL,
@@ -3764,29 +3764,33 @@
FT_LOCAL_DEF( FT_Error )
tt_face_build_cmaps( TT_Face face )
{
- FT_Byte* table = face->cmap_table;
- FT_Byte* limit = table + face->cmap_size;
+ FT_Byte* const table = face->cmap_table;
+ FT_Byte* limit;
FT_UInt volatile num_cmaps;
- FT_Byte* volatile p = table;
+ FT_Byte* volatile p = table;
FT_Library library = FT_FACE_LIBRARY( face );
FT_UNUSED( library );
- if ( !p || p + 4 > limit )
+ if ( !p || face->cmap_size < 4 )
return FT_THROW( Invalid_Table );
- /* only recognize format 0 */
- if ( TT_NEXT_USHORT( p ) != 0 )
- {
- FT_ERROR(( "tt_face_build_cmaps:"
- " unsupported `cmap' table format = %d\n",
- TT_PEEK_USHORT( p - 2 ) ));
- return FT_THROW( Invalid_Table );
- }
+ /* Version 1.8.3 of the OpenType specification contains the following */
+ /* (https://docs.microsoft.com/en-us/typography/opentype/spec/cmap): */
+ /* */
+ /* The 'cmap' table version number remains at 0x0000 for fonts that */
+ /* make use of the newer subtable formats. */
+ /* */
+ /* This essentially means that a version format test is useless. */
+
+ /* ignore format */
+ p += 2;
num_cmaps = TT_NEXT_USHORT( p );
+ FT_TRACE4(( "tt_face_build_cmaps: %d cmaps\n", num_cmaps ));
+ limit = table + face->cmap_size;
for ( ; num_cmaps > 0 && p + 8 <= limit; num_cmaps-- )
{
FT_CharMapRec charmap;
diff --git a/src/3rdparty/freetype/src/sfnt/ttcmap.h b/src/3rdparty/freetype/src/sfnt/ttcmap.h
index 36801c939e..c7d7c21d2c 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcmap.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcmap.h
@@ -4,7 +4,7 @@
*
* TrueType character mapping table (cmap) support (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,10 +20,9 @@
#define TTCMAP_H_
-#include <ft2build.h>
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_INTERNAL_VALIDATE_H
-#include FT_SERVICE_TT_CMAP_H
+#include <freetype/internal/tttypes.h>
+#include <freetype/internal/ftvalid.h>
+#include <freetype/internal/services/svttcmap.h>
FT_BEGIN_HEADER
@@ -91,6 +90,11 @@ FT_BEGIN_HEADER
};
+#undef TTCMAPCITEM
+#define TTCMAPCITEM( a ) FT_CALLBACK_TABLE const TT_CMap_ClassRec a;
+#include "ttcmapc.h"
+
+
typedef struct TT_ValidatorRec_
{
FT_ValidatorRec validator;
diff --git a/src/3rdparty/freetype/src/sfnt/ttcmapc.h b/src/3rdparty/freetype/src/sfnt/ttcmapc.h
index ace9e69ca8..2e4ce5075b 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcmapc.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcmapc.h
@@ -4,7 +4,7 @@
*
* TT CMAP classes definitions (specification only).
*
- * Copyright (C) 2009-2019 by
+ * Copyright (C) 2009-2020 by
* Oran Agra and Mickey Gabel.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttcolr.c b/src/3rdparty/freetype/src/sfnt/ttcolr.c
index 6b537d95b8..9025e356ce 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcolr.c
+++ b/src/3rdparty/freetype/src/sfnt/ttcolr.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType colored glyph layer support (body).
*
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -27,11 +27,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_COLOR_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
+#include <freetype/ftcolor.h>
#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
@@ -40,9 +39,9 @@
/* NOTE: These are the table sizes calculated through the specs. */
-#define BASE_GLYPH_SIZE 6
-#define LAYER_SIZE 4
-#define COLR_HEADER_SIZE 14
+#define BASE_GLYPH_SIZE 6U
+#define LAYER_SIZE 4U
+#define COLR_HEADER_SIZE 14U
typedef struct BaseGlyphRecord_
diff --git a/src/3rdparty/freetype/src/sfnt/ttcolr.h b/src/3rdparty/freetype/src/sfnt/ttcolr.h
index 817489a855..6412162669 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcolr.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcolr.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType colored glyph layer support (specification).
*
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -22,7 +22,6 @@
#define __TTCOLR_H__
-#include <ft2build.h>
#include "ttload.h"
diff --git a/src/3rdparty/freetype/src/sfnt/ttcpal.c b/src/3rdparty/freetype/src/sfnt/ttcpal.c
index 3482169a89..9c514bafe5 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcpal.c
+++ b/src/3rdparty/freetype/src/sfnt/ttcpal.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType color palette support (body).
*
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -27,11 +27,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_COLOR_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
+#include <freetype/ftcolor.h>
#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
@@ -40,8 +39,8 @@
/* NOTE: These are the table sizes calculated through the specs. */
-#define CPAL_V0_HEADER_BASE_SIZE 12
-#define COLOR_SIZE 4
+#define CPAL_V0_HEADER_BASE_SIZE 12U
+#define COLOR_SIZE 4U
/* all data from `CPAL' not covered in FT_Palette_Data */
@@ -140,7 +139,7 @@
3U * 4 > table_size )
goto InvalidTable;
- p += face->palette_data.num_palettes * 2;
+ p += face->palette_data.num_palettes * 2U;
type_offset = FT_NEXT_ULONG( p );
label_offset = FT_NEXT_ULONG( p );
@@ -150,7 +149,7 @@
{
if ( type_offset >= table_size )
goto InvalidTable;
- if ( face->palette_data.num_palettes * 2 >
+ if ( face->palette_data.num_palettes * 2U >
table_size - type_offset )
goto InvalidTable;
@@ -171,7 +170,7 @@
{
if ( label_offset >= table_size )
goto InvalidTable;
- if ( face->palette_data.num_palettes * 2 >
+ if ( face->palette_data.num_palettes * 2U >
table_size - label_offset )
goto InvalidTable;
@@ -192,7 +191,7 @@
{
if ( entry_label_offset >= table_size )
goto InvalidTable;
- if ( face->palette_data.num_palette_entries * 2 >
+ if ( face->palette_data.num_palette_entries * 2U >
table_size - entry_label_offset )
goto InvalidTable;
diff --git a/src/3rdparty/freetype/src/sfnt/ttcpal.h b/src/3rdparty/freetype/src/sfnt/ttcpal.h
index d1b244f3e3..b544be696a 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcpal.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcpal.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType color palette support (specification).
*
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -22,7 +22,6 @@
#define __TTCPAL_H__
-#include <ft2build.h>
#include "ttload.h"
diff --git a/src/3rdparty/freetype/src/sfnt/ttkern.c b/src/3rdparty/freetype/src/sfnt/ttkern.c
index 8d1b781090..d4a70c7855 100644
--- a/src/3rdparty/freetype/src/sfnt/ttkern.c
+++ b/src/3rdparty/freetype/src/sfnt/ttkern.c
@@ -5,7 +5,7 @@
* Load the basic TrueType kerning table. This doesn't handle
* kerning data within the GPOS table at the moment.
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,10 +17,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
#include "ttkern.h"
#include "sferrors.h"
diff --git a/src/3rdparty/freetype/src/sfnt/ttkern.h b/src/3rdparty/freetype/src/sfnt/ttkern.h
index 5f283e5e62..f44b5bdeb0 100644
--- a/src/3rdparty/freetype/src/sfnt/ttkern.h
+++ b/src/3rdparty/freetype/src/sfnt/ttkern.h
@@ -5,7 +5,7 @@
* Load the basic TrueType kerning table. This doesn't handle
* kerning data within the GPOS table at the moment.
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,9 +21,8 @@
#define TTKERN_H_
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/tttypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/ttload.c b/src/3rdparty/freetype/src/sfnt/ttload.c
index 5443bf4b69..4b46f41357 100644
--- a/src/3rdparty/freetype/src/sfnt/ttload.c
+++ b/src/3rdparty/freetype/src/sfnt/ttload.c
@@ -5,7 +5,7 @@
* Load the basic TrueType tables, i.e., tables that can be either in
* TTF or OTF fonts (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,10 +17,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
#include "ttload.h"
#include "sferrors.h"
@@ -65,8 +64,8 @@
#endif
- FT_TRACE4(( "tt_face_lookup_table: %08p, `%c%c%c%c' -- ",
- face,
+ FT_TRACE4(( "tt_face_lookup_table: %p, `%c%c%c%c' -- ",
+ (void *)face,
(FT_Char)( tag >> 24 ),
(FT_Char)( tag >> 16 ),
(FT_Char)( tag >> 8 ),
@@ -363,7 +362,7 @@
};
- FT_TRACE2(( "tt_face_load_font_dir: %08p\n", face ));
+ FT_TRACE2(( "tt_face_load_font_dir: %p\n", (void *)face ));
/* read the offset table */
@@ -397,7 +396,15 @@
}
}
else
+ {
valid_entries = sfnt.num_tables;
+ if ( !valid_entries )
+ {
+ FT_TRACE2(( "tt_face_load_font_dir: no valid tables found\n" ));
+ error = FT_THROW( Unknown_File_Format );
+ goto Exit;
+ }
+ }
face->num_tables = valid_entries;
face->format_tag = sfnt.format_tag;
@@ -916,7 +923,7 @@
/* load language tags */
{
TT_LangTag entry = table->langTags;
- TT_LangTag limit = entry + table->numLangTagRecords;
+ TT_LangTag limit = FT_OFFSET( entry, table->numLangTagRecords );
for ( ; entry < limit; entry++ )
@@ -1307,7 +1314,7 @@
/* we don't load the glyph names, we do that in another */
/* module (ttpost). */
- FT_TRACE3(( "FormatType: 0x%x\n", post->FormatType ));
+ FT_TRACE3(( "FormatType: 0x%lx\n", post->FormatType ));
FT_TRACE3(( "isFixedPitch: %s\n", post->isFixedPitch
? " yes" : " no" ));
diff --git a/src/3rdparty/freetype/src/sfnt/ttload.h b/src/3rdparty/freetype/src/sfnt/ttload.h
index cc18c18694..4e53d8b782 100644
--- a/src/3rdparty/freetype/src/sfnt/ttload.h
+++ b/src/3rdparty/freetype/src/sfnt/ttload.h
@@ -5,7 +5,7 @@
* Load the basic TrueType tables, i.e., tables that can be either in
* TTF or OTF fonts (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,9 +21,8 @@
#define TTLOAD_H_
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/tttypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/ttmtx.c b/src/3rdparty/freetype/src/sfnt/ttmtx.c
index b6725c962f..021123336e 100644
--- a/src/3rdparty/freetype/src/sfnt/ttmtx.c
+++ b/src/3rdparty/freetype/src/sfnt/ttmtx.c
@@ -4,7 +4,7 @@
*
* Load the metrics tables common to TTF and OTF fonts (body).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,13 +16,12 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#include FT_SERVICE_METRICS_VARIATIONS_H
+#include <freetype/internal/services/svmetric.h>
#endif
#include "ttmtx.h"
diff --git a/src/3rdparty/freetype/src/sfnt/ttmtx.h b/src/3rdparty/freetype/src/sfnt/ttmtx.h
index 5b0b60b641..dba65ca9ba 100644
--- a/src/3rdparty/freetype/src/sfnt/ttmtx.h
+++ b/src/3rdparty/freetype/src/sfnt/ttmtx.h
@@ -4,7 +4,7 @@
*
* Load the metrics tables common to TTF and OTF fonts (specification).
*
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define TTMTX_H_
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/tttypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/ttpost.c b/src/3rdparty/freetype/src/sfnt/ttpost.c
index 636a0a004a..e93a4bf1b1 100644
--- a/src/3rdparty/freetype/src/sfnt/ttpost.c
+++ b/src/3rdparty/freetype/src/sfnt/ttpost.c
@@ -5,7 +5,7 @@
* PostScript name table processing for TrueType and OpenType fonts
* (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,10 +25,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
@@ -54,7 +53,7 @@
#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include <freetype/internal/services/svpscmap.h>
#define MAC_NAME( x ) (FT_String*)psnames->macintosh_name( (FT_UInt)(x) )
@@ -240,7 +239,7 @@
break;
else
{
- FT_TRACE6(( "load_format_20: %d byte left in post table\n",
+ FT_TRACE6(( "load_format_20: %ld byte left in post table\n",
post_limit - FT_STREAM_POS() ));
if ( FT_READ_BYTE( len ) )
diff --git a/src/3rdparty/freetype/src/sfnt/ttpost.h b/src/3rdparty/freetype/src/sfnt/ttpost.h
index 812a0fc92d..94c7d16800 100644
--- a/src/3rdparty/freetype/src/sfnt/ttpost.h
+++ b/src/3rdparty/freetype/src/sfnt/ttpost.h
@@ -5,7 +5,7 @@
* PostScript name table processing for TrueType and OpenType fonts
* (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -23,7 +23,7 @@
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include <freetype/internal/tttypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/sfnt/ttsbit.c b/src/3rdparty/freetype/src/sfnt/ttsbit.c
index 23bd9d7eb0..9dd4419710 100644
--- a/src/3rdparty/freetype/src/sfnt/ttsbit.c
+++ b/src/3rdparty/freetype/src/sfnt/ttsbit.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded bitmap support (body).
*
- * Copyright (C) 2005-2019 by
+ * Copyright (C) 2005-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Copyright 2013 by Google, Inc.
@@ -19,11 +19,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_BITMAP_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
+#include <freetype/ftbitmap.h>
#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
@@ -348,7 +347,7 @@
FT_TRACE2(( "tt_face_load_strike_metrics:"
" sanitizing invalid ascender and descender\n"
" "
- " values for strike %d (%dppem, %dppem)\n",
+ " values for strike %ld (%dppem, %dppem)\n",
strike_index,
metrics->x_ppem, metrics->y_ppem ));
diff --git a/src/3rdparty/freetype/src/sfnt/ttsbit.h b/src/3rdparty/freetype/src/sfnt/ttsbit.h
index 5ab8ff5568..b867e43a61 100644
--- a/src/3rdparty/freetype/src/sfnt/ttsbit.h
+++ b/src/3rdparty/freetype/src/sfnt/ttsbit.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded bitmap support (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define TTSBIT_H_
-#include <ft2build.h>
#include "ttload.h"
diff --git a/src/3rdparty/freetype/src/sfnt/woff2tags.c b/src/3rdparty/freetype/src/sfnt/woff2tags.c
new file mode 100644
index 0000000000..fd9f2e6c5d
--- /dev/null
+++ b/src/3rdparty/freetype/src/sfnt/woff2tags.c
@@ -0,0 +1,109 @@
+/****************************************************************************
+ *
+ * woff2tags.c
+ *
+ * WOFF2 Font table tags (base).
+ *
+ * Copyright (C) 2019-2020 by
+ * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#include <freetype/tttags.h>
+#include "woff2tags.h"
+
+ /*
+ * Return tag from index in the order given in WOFF2 specification.
+ *
+ * See
+ *
+ * https://www.w3.org/TR/WOFF2/#table_dir_format
+ *
+ * for details.
+ */
+ FT_LOCAL_DEF( FT_ULong )
+ woff2_known_tags( FT_Byte index )
+ {
+ const FT_ULong known_tags[63] =
+ {
+ FT_MAKE_TAG('c', 'm', 'a', 'p'), /* 0 */
+ FT_MAKE_TAG('h', 'e', 'a', 'd'), /* 1 */
+ FT_MAKE_TAG('h', 'h', 'e', 'a'), /* 2 */
+ FT_MAKE_TAG('h', 'm', 't', 'x'), /* 3 */
+ FT_MAKE_TAG('m', 'a', 'x', 'p'), /* 4 */
+ FT_MAKE_TAG('n', 'a', 'm', 'e'), /* 5 */
+ FT_MAKE_TAG('O', 'S', '/', '2'), /* 6 */
+ FT_MAKE_TAG('p', 'o', 's', 't'), /* 7 */
+ FT_MAKE_TAG('c', 'v', 't', ' '), /* 8 */
+ FT_MAKE_TAG('f', 'p', 'g', 'm'), /* 9 */
+ FT_MAKE_TAG('g', 'l', 'y', 'f'), /* 10 */
+ FT_MAKE_TAG('l', 'o', 'c', 'a'), /* 11 */
+ FT_MAKE_TAG('p', 'r', 'e', 'p'), /* 12 */
+ FT_MAKE_TAG('C', 'F', 'F', ' '), /* 13 */
+ FT_MAKE_TAG('V', 'O', 'R', 'G'), /* 14 */
+ FT_MAKE_TAG('E', 'B', 'D', 'T'), /* 15 */
+ FT_MAKE_TAG('E', 'B', 'L', 'C'), /* 16 */
+ FT_MAKE_TAG('g', 'a', 's', 'p'), /* 17 */
+ FT_MAKE_TAG('h', 'd', 'm', 'x'), /* 18 */
+ FT_MAKE_TAG('k', 'e', 'r', 'n'), /* 19 */
+ FT_MAKE_TAG('L', 'T', 'S', 'H'), /* 20 */
+ FT_MAKE_TAG('P', 'C', 'L', 'T'), /* 21 */
+ FT_MAKE_TAG('V', 'D', 'M', 'X'), /* 22 */
+ FT_MAKE_TAG('v', 'h', 'e', 'a'), /* 23 */
+ FT_MAKE_TAG('v', 'm', 't', 'x'), /* 24 */
+ FT_MAKE_TAG('B', 'A', 'S', 'E'), /* 25 */
+ FT_MAKE_TAG('G', 'D', 'E', 'F'), /* 26 */
+ FT_MAKE_TAG('G', 'P', 'O', 'S'), /* 27 */
+ FT_MAKE_TAG('G', 'S', 'U', 'B'), /* 28 */
+ FT_MAKE_TAG('E', 'B', 'S', 'C'), /* 29 */
+ FT_MAKE_TAG('J', 'S', 'T', 'F'), /* 30 */
+ FT_MAKE_TAG('M', 'A', 'T', 'H'), /* 31 */
+ FT_MAKE_TAG('C', 'B', 'D', 'T'), /* 32 */
+ FT_MAKE_TAG('C', 'B', 'L', 'C'), /* 33 */
+ FT_MAKE_TAG('C', 'O', 'L', 'R'), /* 34 */
+ FT_MAKE_TAG('C', 'P', 'A', 'L'), /* 35 */
+ FT_MAKE_TAG('S', 'V', 'G', ' '), /* 36 */
+ FT_MAKE_TAG('s', 'b', 'i', 'x'), /* 37 */
+ FT_MAKE_TAG('a', 'c', 'n', 't'), /* 38 */
+ FT_MAKE_TAG('a', 'v', 'a', 'r'), /* 39 */
+ FT_MAKE_TAG('b', 'd', 'a', 't'), /* 40 */
+ FT_MAKE_TAG('b', 'l', 'o', 'c'), /* 41 */
+ FT_MAKE_TAG('b', 's', 'l', 'n'), /* 42 */
+ FT_MAKE_TAG('c', 'v', 'a', 'r'), /* 43 */
+ FT_MAKE_TAG('f', 'd', 's', 'c'), /* 44 */
+ FT_MAKE_TAG('f', 'e', 'a', 't'), /* 45 */
+ FT_MAKE_TAG('f', 'm', 't', 'x'), /* 46 */
+ FT_MAKE_TAG('f', 'v', 'a', 'r'), /* 47 */
+ FT_MAKE_TAG('g', 'v', 'a', 'r'), /* 48 */
+ FT_MAKE_TAG('h', 's', 't', 'y'), /* 49 */
+ FT_MAKE_TAG('j', 'u', 's', 't'), /* 50 */
+ FT_MAKE_TAG('l', 'c', 'a', 'r'), /* 51 */
+ FT_MAKE_TAG('m', 'o', 'r', 't'), /* 52 */
+ FT_MAKE_TAG('m', 'o', 'r', 'x'), /* 53 */
+ FT_MAKE_TAG('o', 'p', 'b', 'd'), /* 54 */
+ FT_MAKE_TAG('p', 'r', 'o', 'p'), /* 55 */
+ FT_MAKE_TAG('t', 'r', 'a', 'k'), /* 56 */
+ FT_MAKE_TAG('Z', 'a', 'p', 'f'), /* 57 */
+ FT_MAKE_TAG('S', 'i', 'l', 'f'), /* 58 */
+ FT_MAKE_TAG('G', 'l', 'a', 't'), /* 59 */
+ FT_MAKE_TAG('G', 'l', 'o', 'c'), /* 60 */
+ FT_MAKE_TAG('F', 'e', 'a', 't'), /* 61 */
+ FT_MAKE_TAG('S', 'i', 'l', 'l'), /* 62 */
+ };
+
+
+ if ( index > 62 )
+ return 0;
+
+ return known_tags[index];
+ }
+
+
+/* END */
diff --git a/src/3rdparty/freetype/src/sfnt/woff2tags.h b/src/3rdparty/freetype/src/sfnt/woff2tags.h
new file mode 100644
index 0000000000..c437c77aa1
--- /dev/null
+++ b/src/3rdparty/freetype/src/sfnt/woff2tags.h
@@ -0,0 +1,39 @@
+/****************************************************************************
+ *
+ * woff2tags.h
+ *
+ * WOFFF2 Font table tags (specification).
+ *
+ * Copyright (C) 2019-2020 by
+ * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef WOFF2TAGS_H
+#define WOFF2TAGS_H
+
+
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/compiler-macros.h>
+
+
+FT_BEGIN_HEADER
+
+
+ FT_LOCAL( FT_ULong )
+ woff2_known_tags( FT_Byte index );
+
+
+FT_END_HEADER
+
+#endif /* WOFF2TAGS_H */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/src/smooth/Jamfile b/src/3rdparty/freetype/src/smooth/Jamfile
deleted file mode 100644
index 6ca1cede9e..0000000000
--- a/src/3rdparty/freetype/src/smooth/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/smooth Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) smooth ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ftgrays
- ftsmooth
- ftspic
- ;
- }
- else
- {
- _sources = smooth ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/smooth Jamfile
diff --git a/src/3rdparty/freetype/src/smooth/ftgrays.c b/src/3rdparty/freetype/src/smooth/ftgrays.c
index fd357a50fc..681900fd40 100644
--- a/src/3rdparty/freetype/src/smooth/ftgrays.c
+++ b/src/3rdparty/freetype/src/smooth/ftgrays.c
@@ -4,7 +4,7 @@
*
* A new `perfect' anti-aliasing renderer (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -278,12 +278,11 @@ typedef ptrdiff_t FT_PtrDist;
#else /* !STANDALONE_ */
-#include <ft2build.h>
#include "ftgrays.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_OUTLINE_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftcalc.h>
+#include <freetype/ftoutln.h>
#include "ftsmerrs.h"
@@ -1649,7 +1648,7 @@ typedef ptrdiff_t FT_PtrDist;
if ( !ras.invalid )
gray_record_cell( RAS_VAR );
- FT_TRACE7(( "band [%d..%d]: %d cell%s\n",
+ FT_TRACE7(( "band [%d..%d]: %ld cell%s\n",
ras.min_ey,
ras.max_ey,
ras.num_cells,
diff --git a/src/3rdparty/freetype/src/smooth/ftgrays.h b/src/3rdparty/freetype/src/smooth/ftgrays.h
index e9f9c7a4ad..caba632833 100644
--- a/src/3rdparty/freetype/src/smooth/ftgrays.h
+++ b/src/3rdparty/freetype/src/smooth/ftgrays.h
@@ -4,7 +4,7 @@
*
* FreeType smooth renderer declaration
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -28,7 +28,7 @@
#include "ftimage.h"
#else
#include <ft2build.h>
-#include FT_IMAGE_H
+#include <freetype/ftimage.h>
#endif
diff --git a/src/3rdparty/freetype/src/smooth/ftsmerrs.h b/src/3rdparty/freetype/src/smooth/ftsmerrs.h
index d52c0dd9e2..e93f3df9b3 100644
--- a/src/3rdparty/freetype/src/smooth/ftsmerrs.h
+++ b/src/3rdparty/freetype/src/smooth/ftsmerrs.h
@@ -4,7 +4,7 @@
*
* smooth renderer error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef FTSMERRS_H_
#define FTSMERRS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX Smooth_Err_
#define FT_ERR_BASE FT_Mod_Err_Smooth
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* FTSMERRS_H_ */
diff --git a/src/3rdparty/freetype/src/smooth/ftsmooth.c b/src/3rdparty/freetype/src/smooth/ftsmooth.c
index cd034d2b40..5d66bd6fc4 100644
--- a/src/3rdparty/freetype/src/smooth/ftsmooth.c
+++ b/src/3rdparty/freetype/src/smooth/ftsmooth.c
@@ -4,7 +4,7 @@
*
* Anti-aliasing renderer interface (body).
*
- * Copyright (C) 2000-2019 by
+ * Copyright (C) 2000-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,46 +16,15 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_OUTLINE_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftoutln.h>
#include "ftsmooth.h"
#include "ftgrays.h"
#include "ftsmerrs.h"
- /* initialize renderer -- init its raster */
- static FT_Error
- ft_smooth_init( FT_Renderer render )
- {
-
-#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
- FT_Vector* sub = render->root.library->lcd_geometry;
-
-
- /* set up default subpixel geometry for striped RGB panels. */
- sub[0].x = -21;
- sub[0].y = 0;
- sub[1].x = 0;
- sub[1].y = 0;
- sub[2].x = 21;
- sub[2].y = 0;
-
-#elif 0 /* or else, once ClearType patents expire */
-
- FT_Library_SetLcdFilter( render->root.library, FT_LCD_FILTER_DEFAULT );
-
-#endif
-
- render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
-
- return 0;
- }
-
-
/* sets render-specific mode */
static FT_Error
ft_smooth_set_mode( FT_Renderer render,
@@ -107,14 +76,359 @@
FT_Outline_Get_CBox( &slot->outline, cbox );
}
+ typedef struct TOrigin_
+ {
+ unsigned char* origin; /* pixmap origin at the bottom-left */
+ int pitch; /* pitch to go down one row */
+
+ } TOrigin;
+
+#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+
+ /* initialize renderer -- init its raster */
+ static FT_Error
+ ft_smooth_init( FT_Renderer render )
+ {
+ FT_Vector* sub = render->root.library->lcd_geometry;
+
+
+ /* set up default subpixel geometry for striped RGB panels. */
+ sub[0].x = -21;
+ sub[0].y = 0;
+ sub[1].x = 0;
+ sub[1].y = 0;
+ sub[2].x = 21;
+ sub[2].y = 0;
+
+ render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
+
+ return 0;
+ }
+
+
+ /* This function writes every third byte in direct rendering mode */
+ static void
+ ft_smooth_lcd_spans( int y,
+ int count,
+ const FT_Span* spans,
+ TOrigin* target )
+ {
+ unsigned char* dst_line = target->origin - y * target->pitch;
+ unsigned char* dst;
+ unsigned short w;
+
+
+ for ( ; count--; spans++ )
+ for ( dst = dst_line + spans->x * 3, w = spans->len; w--; dst += 3 )
+ *dst = spans->coverage;
+ }
+
+
+ static FT_Error
+ ft_smooth_raster_lcd( FT_Renderer render,
+ FT_Outline* outline,
+ FT_Bitmap* bitmap )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_Vector* sub = render->root.library->lcd_geometry;
+ FT_Pos x, y;
+
+ FT_Raster_Params params;
+ TOrigin target;
+
+
+ /* Render 3 separate coverage bitmaps, shifting the outline. */
+ /* Set up direct rendering to record them on each third byte. */
+ params.source = outline;
+ params.flags = FT_RASTER_FLAG_AA | FT_RASTER_FLAG_DIRECT;
+ params.gray_spans = (FT_SpanFunc)ft_smooth_lcd_spans;
+ params.user = &target;
+
+ 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, &params );
+ 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, &params );
+ 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, &params );
+ x = sub[2].x;
+ y = sub[2].y;
+
+ Exit:
+ FT_Outline_Translate( outline, x, y );
+
+ return error;
+ }
+
- /* convert a slot's glyph image into a bitmap */
static FT_Error
- ft_smooth_render_generic( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin,
- FT_Render_Mode required_mode )
+ ft_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, &params );
+ 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, &params );
+ 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, &params );
+ x = sub[2].y;
+ y = -sub[2].x;
+ bitmap->buffer -= 2 * pitch;
+
+ Exit:
+ FT_Outline_Translate( outline, x, y );
+
+ bitmap->pitch /= 3;
+ bitmap->rows *= 3;
+
+ return error;
+ }
+
+#else /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+
+ /* initialize renderer -- init its raster */
+ static FT_Error
+ ft_smooth_init( FT_Renderer render )
+ {
+ /* set up default LCD filtering */
+ FT_Library_SetLcdFilter( render->root.library, FT_LCD_FILTER_DEFAULT );
+
+ render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
+
+ return 0;
+ }
+
+
+ static FT_Error
+ ft_smooth_raster_lcd( FT_Renderer render,
+ FT_Outline* outline,
+ FT_Bitmap* bitmap )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_Vector* points = outline->points;
+ FT_Vector* points_end = FT_OFFSET( points, outline->n_points );
+ FT_Vector* vec;
+
+ FT_Raster_Params params;
+
+
+ params.target = bitmap;
+ params.source = outline;
+ params.flags = FT_RASTER_FLAG_AA;
+
+ /* implode outline */
+ for ( vec = points; vec < points_end; vec++ )
+ vec->x *= 3;
+
+ /* render outline into the bitmap */
+ error = render->raster_render( render->raster, &params );
+
+ /* 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, &params );
+
+ /* deflate outline */
+ for ( vec = points; vec < points_end; vec++ )
+ vec->y /= 3;
+
+ return error;
+ }
+
+#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+
+/* Oversampling scale to be used in rendering overlaps */
+#define SCALE ( 1 << 2 )
+
+ /* This function averages inflated spans in direct rendering mode */
+ static void
+ ft_smooth_overlap_spans( int y,
+ int count,
+ const FT_Span* spans,
+ TOrigin* target )
+ {
+ unsigned char* dst = target->origin - ( y / SCALE ) * target->pitch;
+ unsigned short x;
+ unsigned int cover, sum;
+
+
+ /* When accumulating the oversampled spans we need to assure that */
+ /* fully covered pixels are equal to 255 and do not overflow. */
+ /* It is important that the SCALE is a power of 2, each subpixel */
+ /* cover can also reach a power of 2 after rounding, and the total */
+ /* is clamped to 255 when it adds up to 256. */
+ for ( ; count--; spans++ )
+ {
+ cover = ( spans->coverage + SCALE * SCALE / 2 ) / ( SCALE * SCALE );
+ for ( x = 0; x < spans->len; x++ )
+ {
+ sum = dst[( spans->x + x ) / SCALE] + cover;
+ dst[( spans->x + x ) / SCALE] = (unsigned char)( sum - ( sum >> 8 ) );
+ }
+ }
+ }
+
+
+ static FT_Error
+ ft_smooth_raster_overlap( FT_Renderer render,
+ FT_Outline* outline,
+ FT_Bitmap* bitmap )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_Vector* points = outline->points;
+ FT_Vector* points_end = FT_OFFSET( points, outline->n_points );
+ FT_Vector* vec;
+
+ FT_Raster_Params params;
+ TOrigin target;
+
+
+ /* Reject outlines that are too wide for 16-bit FT_Span. */
+ /* Other limits are applied upstream with the same error code. */
+ if ( bitmap->width * SCALE > 0x7FFF )
+ return FT_THROW( Raster_Overflow );
+
+ /* Set up direct rendering to average oversampled spans. */
+ params.source = outline;
+ params.flags = FT_RASTER_FLAG_AA | FT_RASTER_FLAG_DIRECT;
+ params.gray_spans = (FT_SpanFunc)ft_smooth_overlap_spans;
+ params.user = &target;
+
+ 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, &params );
+
+ /* deflate outline */
+ for ( vec = points; vec < points_end; vec++ )
+ {
+ vec->x /= SCALE;
+ vec->y /= SCALE;
+ }
+
+ return error;
+ }
+
+#undef SCALE
+
+ static FT_Error
+ ft_smooth_render( FT_Renderer render,
+ FT_GlyphSlot slot,
+ FT_Render_Mode mode,
+ const FT_Vector* origin )
{
FT_Error error = FT_Err_Ok;
FT_Outline* outline = &slot->outline;
@@ -122,10 +436,6 @@
FT_Memory memory = render->root.memory;
FT_Pos x_shift = 0;
FT_Pos y_shift = 0;
- FT_Int hmul = ( mode == FT_RENDER_MODE_LCD );
- FT_Int vmul = ( mode == FT_RENDER_MODE_LCD_V );
-
- FT_Raster_Params params;
/* check glyph image format */
@@ -136,7 +446,10 @@
}
/* check mode */
- if ( mode != required_mode )
+ if ( mode != FT_RENDER_MODE_NORMAL &&
+ mode != FT_RENDER_MODE_LIGHT &&
+ mode != FT_RENDER_MODE_LCD &&
+ mode != FT_RENDER_MODE_LCD_V )
{
error = FT_THROW( Cannot_Render_Glyph );
goto Exit;
@@ -155,6 +468,9 @@
goto Exit;
}
+ if ( !bitmap->rows || !bitmap->pitch )
+ goto Exit;
+
/* allocate new one */
if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
goto Exit;
@@ -178,188 +494,57 @@
if ( x_shift || y_shift )
FT_Outline_Translate( outline, x_shift, y_shift );
- /* set up parameters */
- params.target = bitmap;
- params.source = outline;
- params.flags = FT_RASTER_FLAG_AA;
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
- /* implode outline if needed */
+ if ( mode == FT_RENDER_MODE_NORMAL ||
+ mode == FT_RENDER_MODE_LIGHT )
{
- FT_Vector* points = outline->points;
- FT_Vector* points_end = points + outline->n_points;
- FT_Vector* vec;
-
-
- if ( hmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->x *= 3;
-
- if ( vmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->y *= 3;
- }
-
- /* render outline into the bitmap */
- error = render->raster_render( render->raster, &params );
-
- /* deflate outline if needed */
- {
- FT_Vector* points = outline->points;
- FT_Vector* points_end = points + outline->n_points;
- FT_Vector* vec;
+ if ( outline->flags & FT_OUTLINE_OVERLAP )
+ error = ft_smooth_raster_overlap( render, outline, bitmap );
+ else
+ {
+ FT_Raster_Params params;
- if ( hmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->x /= 3;
+ params.target = bitmap;
+ params.source = outline;
+ params.flags = FT_RASTER_FLAG_AA;
- if ( vmul )
- for ( vec = points; vec < points_end; vec++ )
- vec->y /= 3;
+ error = render->raster_render( render->raster, &params );
+ }
}
-
- if ( error )
- goto Exit;
-
- /* finally apply filtering */
- if ( hmul || vmul )
+ else
{
- FT_Byte* lcd_weights;
- FT_Bitmap_LcdFilterFunc lcd_filter_func;
+ 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
- /* Per-face LCD filtering takes priority if set up. */
- if ( slot->face && slot->face->internal->lcd_filter_func )
+ /* finally apply filtering */
{
- lcd_weights = slot->face->internal->lcd_weights;
- lcd_filter_func = slot->face->internal->lcd_filter_func;
- }
- else
- {
- lcd_weights = slot->library->lcd_weights;
- lcd_filter_func = slot->library->lcd_filter_func;
- }
+ FT_Byte* lcd_weights;
+ FT_Bitmap_LcdFilterFunc lcd_filter_func;
- if ( lcd_filter_func )
- lcd_filter_func( bitmap, lcd_weights );
- }
-
-#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
- if ( hmul ) /* lcd */
- {
- FT_Byte* line;
- FT_Byte* temp = NULL;
- FT_UInt i, j;
-
- unsigned int height = bitmap->rows;
- unsigned int width = bitmap->width;
- int pitch = bitmap->pitch;
-
- FT_Vector* sub = slot->library->lcd_geometry;
-
-
- /* Render 3 separate monochrome bitmaps, shifting the outline. */
- width /= 3;
-
- FT_Outline_Translate( outline,
- -sub[0].x,
- -sub[0].y );
- error = render->raster_render( render->raster, &params );
- if ( error )
- goto Exit;
-
- bitmap->buffer += width;
- FT_Outline_Translate( outline,
- sub[0].x - sub[1].x,
- sub[0].y - sub[1].y );
- error = render->raster_render( render->raster, &params );
- bitmap->buffer -= width;
- if ( error )
- goto Exit;
-
- bitmap->buffer += 2 * width;
- FT_Outline_Translate( outline,
- sub[1].x - sub[2].x,
- sub[1].y - sub[2].y );
- error = render->raster_render( render->raster, &params );
- bitmap->buffer -= 2 * width;
- if ( error )
- goto Exit;
-
- x_shift -= sub[2].x;
- y_shift -= sub[2].y;
-
- /* XXX: Rearrange the bytes according to FT_PIXEL_MODE_LCD. */
- /* XXX: It is more efficient to render every third byte above. */
-
- if ( FT_ALLOC( temp, (FT_ULong)pitch ) )
- goto Exit;
-
- for ( i = 0; i < height; i++ )
- {
- line = bitmap->buffer + i * (FT_ULong)pitch;
- for ( j = 0; j < width; j++ )
+ /* Per-face LCD filtering takes priority if set up. */
+ if ( slot->face && slot->face->internal->lcd_filter_func )
{
- temp[3 * j ] = line[j];
- temp[3 * j + 1] = line[j + width];
- temp[3 * j + 2] = line[j + width + width];
+ lcd_weights = slot->face->internal->lcd_weights;
+ lcd_filter_func = slot->face->internal->lcd_filter_func;
}
- FT_MEM_COPY( line, temp, pitch );
+ else
+ {
+ lcd_weights = slot->library->lcd_weights;
+ lcd_filter_func = slot->library->lcd_filter_func;
+ }
+
+ if ( lcd_filter_func )
+ lcd_filter_func( bitmap, lcd_weights );
}
- FT_FREE( temp );
- }
- else if ( vmul ) /* lcd_v */
- {
- int pitch = bitmap->pitch;
-
- FT_Vector* sub = slot->library->lcd_geometry;
-
-
- /* Render 3 separate monochrome bitmaps, shifting the outline. */
- /* Notice that the subpixel geometry vectors are rotated. */
- /* Triple the pitch to render on each third row. */
- bitmap->pitch *= 3;
- bitmap->rows /= 3;
-
- FT_Outline_Translate( outline,
- -sub[0].y,
- sub[0].x );
- error = render->raster_render( render->raster, &params );
- 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, &params );
- 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, &params );
- bitmap->buffer -= 2 * pitch;
- if ( error )
- goto Exit;
-
- x_shift -= sub[2].y;
- y_shift += sub[2].x;
-
- bitmap->pitch /= 3;
- bitmap->rows *= 3;
- }
- else /* grayscale */
- error = render->raster_render( render->raster, &params );
+#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
-#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+ }
Exit:
if ( !error )
@@ -380,45 +565,6 @@
}
- /* convert a slot's glyph image into a bitmap */
- static FT_Error
- ft_smooth_render( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin )
- {
- if ( mode == FT_RENDER_MODE_LIGHT )
- mode = FT_RENDER_MODE_NORMAL;
-
- return ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_NORMAL );
- }
-
-
- /* convert a slot's glyph image into a horizontal LCD bitmap */
- static FT_Error
- ft_smooth_render_lcd( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin )
- {
- return ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_LCD );
- }
-
-
- /* convert a slot's glyph image into a vertical LCD bitmap */
- static FT_Error
- ft_smooth_render_lcd_v( FT_Renderer render,
- FT_GlyphSlot slot,
- FT_Render_Mode mode,
- const FT_Vector* origin )
- {
- return ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_LCD_V );
- }
-
-
FT_DEFINE_RENDERER(
ft_smooth_renderer_class,
@@ -446,58 +592,4 @@
)
- FT_DEFINE_RENDERER(
- ft_smooth_lcd_renderer_class,
-
- FT_MODULE_RENDERER,
- sizeof ( FT_RendererRec ),
-
- "smooth-lcd",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) NULL, /* get_interface */
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd, /* render_glyph */
- (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
-
- (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */
- )
-
-
- FT_DEFINE_RENDERER(
- ft_smooth_lcdv_renderer_class,
-
- FT_MODULE_RENDERER,
- sizeof ( FT_RendererRec ),
-
- "smooth-lcdv",
- 0x10000L,
- 0x20000L,
-
- NULL, /* module specific interface */
-
- (FT_Module_Constructor)ft_smooth_init, /* module_init */
- (FT_Module_Destructor) NULL, /* module_done */
- (FT_Module_Requester) NULL, /* get_interface */
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd_v, /* render_glyph */
- (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
-
- (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */
- )
-
-
/* END */
diff --git a/src/3rdparty/freetype/src/smooth/ftsmooth.h b/src/3rdparty/freetype/src/smooth/ftsmooth.h
index fbb21a31d0..22a88d54ec 100644
--- a/src/3rdparty/freetype/src/smooth/ftsmooth.h
+++ b/src/3rdparty/freetype/src/smooth/ftsmooth.h
@@ -4,7 +4,7 @@
*
* Anti-aliasing renderer interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define FTSMOOTH_H_
-#include <ft2build.h>
-#include FT_RENDER_H
+#include <freetype/ftrender.h>
FT_BEGIN_HEADER
@@ -29,10 +28,6 @@ FT_BEGIN_HEADER
FT_DECLARE_RENDERER( ft_smooth_renderer_class )
- FT_DECLARE_RENDERER( ft_smooth_lcd_renderer_class )
-
- FT_DECLARE_RENDERER( ft_smooth_lcdv_renderer_class )
-
FT_END_HEADER
diff --git a/src/3rdparty/freetype/src/smooth/ftspic.c b/src/3rdparty/freetype/src/smooth/ftspic.c
deleted file mode 100644
index 10f04cf4cc..0000000000
--- a/src/3rdparty/freetype/src/smooth/ftspic.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftspic.c */
-/* */
-/* The FreeType position independent code services for smooth module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "ftspic.h"
-#include "ftsmerrs.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ftgrays.c */
- void
- FT_Init_Class_ft_grays_raster( FT_Raster_Funcs* funcs );
-
-
- void
- ft_smooth_renderer_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->smooth )
- {
- SmoothPIC* container = (SmoothPIC*)pic_container->smooth;
-
-
- if ( --container->ref_count )
- return;
-
- FT_FREE( container );
- pic_container->smooth = NULL;
- }
- }
-
-
- FT_Error
- ft_smooth_renderer_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- SmoothPIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* since this function also serve smooth_lcd and smooth_lcdv renderers,
- it implements reference counting */
- if ( pic_container->smooth )
- {
- ((SmoothPIC*)pic_container->smooth)->ref_count++;
- return error;
- }
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->smooth = container;
-
- container->ref_count = 1;
-
- /* initialize pointer table - */
- /* this is how the module usually expects this data */
- FT_Init_Class_ft_grays_raster( &container->ft_grays_raster );
-
- return error;
- }
-
-
- /* re-route these init and free functions to the above functions */
- FT_Error
- ft_smooth_lcd_renderer_class_pic_init( FT_Library library )
- {
- return ft_smooth_renderer_class_pic_init( library );
- }
-
-
- void
- ft_smooth_lcd_renderer_class_pic_free( FT_Library library )
- {
- ft_smooth_renderer_class_pic_free( library );
- }
-
-
- FT_Error
- ft_smooth_lcdv_renderer_class_pic_init( FT_Library library )
- {
- return ft_smooth_renderer_class_pic_init( library );
- }
-
-
- void
- ft_smooth_lcdv_renderer_class_pic_free( FT_Library library )
- {
- ft_smooth_renderer_class_pic_free( library );
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/smooth/ftspic.h b/src/3rdparty/freetype/src/smooth/ftspic.h
deleted file mode 100644
index 80fb64cff4..0000000000
--- a/src/3rdparty/freetype/src/smooth/ftspic.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftspic.h */
-/* */
-/* The FreeType position independent code services for smooth module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef FTSPIC_H_
-#define FTSPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-FT_BEGIN_HEADER
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_GRAYS_RASTER_GET ft_grays_raster
-
-#else /* FT_CONFIG_OPTION_PIC */
-
- typedef struct SmoothPIC_
- {
- int ref_count;
- FT_Raster_Funcs ft_grays_raster;
-
- } SmoothPIC;
-
-
-#define GET_PIC( lib ) \
- ( (SmoothPIC*)( (lib)->pic_container.smooth ) )
-#define FT_GRAYS_RASTER_GET ( GET_PIC( library )->ft_grays_raster )
-
-
- /* see ftspic.c for the implementation */
- void
- ft_smooth_renderer_class_pic_free( FT_Library library );
-
- void
- ft_smooth_lcd_renderer_class_pic_free( FT_Library library );
-
- void
- ft_smooth_lcdv_renderer_class_pic_free( FT_Library library );
-
- FT_Error
- ft_smooth_renderer_class_pic_init( FT_Library library );
-
- FT_Error
- ft_smooth_lcd_renderer_class_pic_init( FT_Library library );
-
- FT_Error
- ft_smooth_lcdv_renderer_class_pic_init( FT_Library library );
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-FT_END_HEADER
-
-#endif /* FTSPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/smooth/module.mk b/src/3rdparty/freetype/src/smooth/module.mk
index 44b76dfec6..9b1507f1e0 100644
--- a/src/3rdparty/freetype/src/smooth/module.mk
+++ b/src/3rdparty/freetype/src/smooth/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -18,10 +18,6 @@ FTMODULE_H_COMMANDS += SMOOTH_RENDERER
define SMOOTH_RENDERER
$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_renderer_class $(CLOSE_DRIVER)
$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer$(ECHO_DRIVER_DONE)
-$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_lcd_renderer_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer for LCDs$(ECHO_DRIVER_DONE)
-$(OPEN_DRIVER) FT_Renderer_Class, ft_smooth_lcdv_renderer_class $(CLOSE_DRIVER)
-$(ECHO_DRIVER)smooth $(ECHO_DRIVER_DESC)anti-aliased bitmap renderer for vertical LCDs$(ECHO_DRIVER_DONE)
endef
# EOF
diff --git a/src/3rdparty/freetype/src/smooth/rules.mk b/src/3rdparty/freetype/src/smooth/rules.mk
index 0153ac24a4..b08056fac5 100644
--- a/src/3rdparty/freetype/src/smooth/rules.mk
+++ b/src/3rdparty/freetype/src/smooth/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/smooth/smooth.c b/src/3rdparty/freetype/src/smooth/smooth.c
index 9c543d3360..04b531c087 100644
--- a/src/3rdparty/freetype/src/smooth/smooth.c
+++ b/src/3rdparty/freetype/src/smooth/smooth.c
@@ -4,7 +4,7 @@
*
* FreeType anti-aliasing rasterer module component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "ftgrays.c"
#include "ftsmooth.c"
diff --git a/src/3rdparty/freetype/src/tools/Jamfile b/src/3rdparty/freetype/src/tools/Jamfile
deleted file mode 100644
index 475161e07f..0000000000
--- a/src/3rdparty/freetype/src/tools/Jamfile
+++ /dev/null
@@ -1,5 +0,0 @@
-# Jamfile for src/tools
-#
-SubDir FT2_TOP src tools ;
-
-Main apinames : apinames.c ;
diff --git a/src/3rdparty/freetype/src/tools/afblue.pl b/src/3rdparty/freetype/src/tools/afblue.pl
index 937d4ecf6e..bbc4f472c9 100644
--- a/src/3rdparty/freetype/src/tools/afblue.pl
+++ b/src/3rdparty/freetype/src/tools/afblue.pl
@@ -5,7 +5,7 @@
#
# Process a blue zone character data file.
#
-# Copyright (C) 2013-2019 by
+# Copyright (C) 2013-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/tools/chktrcmp.py b/src/3rdparty/freetype/src/tools/chktrcmp.py
index 4c40bdafdb..4c40bdafdb 100644..100755
--- a/src/3rdparty/freetype/src/tools/chktrcmp.py
+++ b/src/3rdparty/freetype/src/tools/chktrcmp.py
diff --git a/src/3rdparty/freetype/src/tools/docmaker/content.py b/src/3rdparty/freetype/src/tools/docmaker/content.py
deleted file mode 100644
index 198780aee4..0000000000
--- a/src/3rdparty/freetype/src/tools/docmaker/content.py
+++ /dev/null
@@ -1,672 +0,0 @@
-#
-# content.py
-#
-# Parse comment blocks to build content blocks (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This file contains routines to parse documentation comment blocks,
-# building more structured objects out of them.
-#
-
-
-from sources import *
-from utils import *
-
-import string, re
-
-
-#
-# Regular expressions to detect code sequences. `Code sequences' are simply
-# code fragments embedded in '{' and '}', as demonstrated in the following
-# example.
-#
-# {
-# x = y + z;
-# if ( zookoo == 2 )
-# {
-# foobar();
-# }
-# }
-#
-# Note that the indentation of the first opening brace and the last closing
-# brace must be exactly the same. The code sequence itself should have a
-# larger indentation than the surrounding braces.
-#
-re_code_start = re.compile( r"(\s*){\s*$" )
-re_code_end = re.compile( r"(\s*)}\s*$" )
-
-
-#
-# A regular expression to isolate identifiers from other text. Two syntax
-# forms are supported:
-#
-# <name>
-# <name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'. Use `<id>' if there are multiple, valid `<name>' entries; in the
-# index, `<id>' will be appended in parentheses.
-#
-# For example,
-#
-# stem_darkening[autofit]
-#
-# becomes `stem_darkening (autofit)' in the index.
-#
-re_identifier = re.compile( r"""
- ((?:\w|-)+
- (?:\[(?:\w|-)+\])?)
- """, re.VERBOSE )
-
-
-#
-# We collect macro names ending in `_H' (group 1), as defined in
-# `freetype/config/ftheader.h'. While outputting the object data, we use
-# this info together with the object's file location (group 2) to emit the
-# appropriate header file macro and its associated file name before the
-# object itself.
-#
-# Example:
-#
-# #define FT_FREETYPE_H <freetype.h>
-#
-re_header_macro = re.compile( r'^#define\s{1,}(\w{1,}_H)\s{1,}<(.*)>' )
-
-
-################################################################
-##
-## DOC CODE CLASS
-##
-## The `DocCode' class is used to store source code lines.
-##
-## `self.lines' contains a set of source code lines that will be dumped as
-## HTML in a <PRE> tag.
-##
-## The object is filled line by line by the parser; it strips the leading
-## `margin' space from each input line before storing it in `self.lines'.
-##
-class DocCode:
-
- def __init__( self, margin, lines ):
- self.lines = []
- self.words = None
-
- # remove margin spaces
- for l in lines:
- if string.strip( l[:margin] ) == "":
- l = l[margin:]
- self.lines.append( l )
-
- def dump( self, prefix = "", width = 60 ):
- lines = self.dump_lines( 0, width )
- for l in lines:
- print( prefix + l )
-
- def dump_lines( self, margin = 0, width = 60 ):
- result = []
- for l in self.lines:
- result.append( " " * margin + l )
- return result
-
-
-
-################################################################
-##
-## DOC PARA CLASS
-##
-## `Normal' text paragraphs are stored in the `DocPara' class.
-##
-## `self.words' contains the list of words that make up the paragraph.
-##
-class DocPara:
-
- def __init__( self, lines ):
- self.lines = None
- self.words = []
- for l in lines:
- l = string.strip( l )
- self.words.extend( string.split( l ) )
-
- def dump( self, prefix = "", width = 60 ):
- lines = self.dump_lines( 0, width )
- for l in lines:
- print( prefix + l )
-
- def dump_lines( self, margin = 0, width = 60 ):
- cur = "" # current line
- col = 0 # current width
- result = []
-
- for word in self.words:
- ln = len( word )
- if col > 0:
- ln = ln + 1
-
- if col + ln > width:
- result.append( " " * margin + cur )
- cur = word
- col = len( word )
- else:
- if col > 0:
- cur = cur + " "
- cur = cur + word
- col = col + ln
-
- if col > 0:
- result.append( " " * margin + cur )
-
- return result
-
-
-################################################################
-##
-## DOC FIELD CLASS
-##
-## The `DocField' class stores a list containing either `DocPara' or
-## `DocCode' objects. Each DocField object also has an optional `name'
-## that is used when the object corresponds to a field or value definition.
-##
-class DocField:
-
- def __init__( self, name, lines ):
- self.name = name # can be `None' for normal paragraphs/sources
- self.items = [] # list of items
-
- mode_none = 0 # start parsing mode
- mode_code = 1 # parsing code sequences
- mode_para = 3 # parsing normal paragraph
-
- margin = -1 # current code sequence indentation
- cur_lines = []
-
- # analyze the markup lines to check whether they contain paragraphs,
- # code sequences, or fields definitions
- #
- start = 0
- mode = mode_none
-
- for l in lines:
- # are we parsing a code sequence?
- if mode == mode_code:
- m = re_code_end.match( l )
- if m and len( m.group( 1 ) ) <= margin:
- # that's it, we finished the code sequence
- code = DocCode( 0, cur_lines )
- self.items.append( code )
- margin = -1
- cur_lines = []
- mode = mode_none
- else:
- # otherwise continue the code sequence
- cur_lines.append( l[margin:] )
- else:
- # start of code sequence?
- m = re_code_start.match( l )
- if m:
- # save current lines
- if cur_lines:
- para = DocPara( cur_lines )
- self.items.append( para )
- cur_lines = []
-
- # switch to code extraction mode
- margin = len( m.group( 1 ) )
- mode = mode_code
- else:
- if not string.split( l ) and cur_lines:
- # if the line is empty, we end the current paragraph,
- # if any
- para = DocPara( cur_lines )
- self.items.append( para )
- cur_lines = []
- else:
- # otherwise, simply add the line to the current
- # paragraph
- cur_lines.append( l )
-
- if mode == mode_code:
- # unexpected end of code sequence
- code = DocCode( margin, cur_lines )
- self.items.append( code )
- elif cur_lines:
- para = DocPara( cur_lines )
- self.items.append( para )
-
- def dump( self, prefix = "" ):
- if self.field:
- print( prefix + self.field + " ::" )
- prefix = prefix + "----"
-
- first = 1
- for p in self.items:
- if not first:
- print( "" )
- p.dump( prefix )
- first = 0
-
- def dump_lines( self, margin = 0, width = 60 ):
- result = []
- nl = None
-
- for p in self.items:
- if nl:
- result.append( "" )
-
- result.extend( p.dump_lines( margin, width ) )
- nl = 1
-
- return result
-
-
-#
-# A regular expression to detect field definitions.
-#
-# Examples:
-#
-# foo ::
-# foo.bar ::
-#
-re_field = re.compile( r"""
- \s*
- (
- \w*
- |
- \w (\w | \.)* \w
- )
- \s* ::
- """, re.VERBOSE )
-
-
-################################################################
-##
-## DOC MARKUP CLASS
-##
-class DocMarkup:
-
- def __init__( self, tag, lines ):
- self.tag = string.lower( tag )
- self.fields = []
-
- cur_lines = []
- field = None
- mode = 0
-
- for l in lines:
- m = re_field.match( l )
- if m:
- # We detected the start of a new field definition.
-
- # first, save the current one
- if cur_lines:
- f = DocField( field, cur_lines )
- self.fields.append( f )
- cur_lines = []
- field = None
-
- field = m.group( 1 ) # record field name
- ln = len( m.group( 0 ) )
- l = " " * ln + l[ln:]
- cur_lines = [l]
- else:
- cur_lines.append( l )
-
- if field or cur_lines:
- f = DocField( field, cur_lines )
- self.fields.append( f )
-
- def get_name( self ):
- try:
- return self.fields[0].items[0].words[0]
- except:
- return None
-
- def dump( self, margin ):
- print( " " * margin + "<" + self.tag + ">" )
- for f in self.fields:
- f.dump( " " )
- print( " " * margin + "</" + self.tag + ">" )
-
-
-################################################################
-##
-## DOC CHAPTER CLASS
-##
-class DocChapter:
-
- def __init__( self, block ):
- self.block = block
- self.sections = []
- if block:
- self.name = block.name
- self.title = block.get_markup_words( "title" )
- self.order = block.get_markup_words( "sections" )
- else:
- self.name = "Other"
- self.title = string.split( "Miscellaneous" )
- self.order = []
-
-
-################################################################
-##
-## DOC SECTION CLASS
-##
-class DocSection:
-
- def __init__( self, name = "Other" ):
- self.name = name
- self.blocks = {}
- self.block_names = [] # ordered block names in section
- self.defs = []
- self.abstract = ""
- self.description = ""
- self.order = []
- self.title = "ERROR"
- self.chapter = None
-
- def add_def( self, block ):
- self.defs.append( block )
-
- def add_block( self, block ):
- self.block_names.append( block.name )
- self.blocks[block.name] = block
-
- def process( self ):
- # look up one block that contains a valid section description
- for block in self.defs:
- title = block.get_markup_text( "title" )
- if title:
- self.title = title
- self.abstract = block.get_markup_words( "abstract" )
- self.description = block.get_markup_items( "description" )
- self.order = block.get_markup_words_all( "order" )
- return
-
- def reorder( self ):
- self.block_names = sort_order_list( self.block_names, self.order )
-
-
-################################################################
-##
-## CONTENT PROCESSOR CLASS
-##
-class ContentProcessor:
-
- def __init__( self ):
- """Initialize a block content processor."""
- self.reset()
-
- self.sections = {} # dictionary of documentation sections
- self.section = None # current documentation section
-
- self.chapters = [] # list of chapters
-
- self.headers = {} # dictionary of header macros
-
- def set_section( self, section_name ):
- """Set current section during parsing."""
- if not section_name in self.sections:
- section = DocSection( section_name )
- self.sections[section_name] = section
- self.section = section
- else:
- self.section = self.sections[section_name]
-
- def add_chapter( self, block ):
- chapter = DocChapter( block )
- self.chapters.append( chapter )
-
- def reset( self ):
- """Reset the content processor for a new block."""
- self.markups = []
- self.markup = None
- self.markup_lines = []
-
- def add_markup( self ):
- """Add a new markup section."""
- if self.markup and self.markup_lines:
-
- # get rid of last line of markup if it's empty
- marks = self.markup_lines
- if len( marks ) > 0 and not string.strip( marks[-1] ):
- self.markup_lines = marks[:-1]
-
- m = DocMarkup( self.markup, self.markup_lines )
-
- self.markups.append( m )
-
- self.markup = None
- self.markup_lines = []
-
- def process_content( self, content ):
- """Process a block content and return a list of DocMarkup objects
- corresponding to it."""
- markup = None
- markup_lines = []
- first = 1
-
- margin = -1
- in_code = 0
-
- for line in content:
- if in_code:
- m = re_code_end.match( line )
- if m and len( m.group( 1 ) ) <= margin:
- in_code = 0
- margin = -1
- else:
- m = re_code_start.match( line )
- if m:
- in_code = 1
- margin = len( m.group( 1 ) )
-
- found = None
-
- if not in_code:
- for t in re_markup_tags:
- m = t.match( line )
- if m:
- found = string.lower( m.group( 1 ) )
- prefix = len( m.group( 0 ) )
- # remove markup from line
- line = " " * prefix + line[prefix:]
- break
-
- # is it the start of a new markup section ?
- if found:
- first = 0
- self.add_markup() # add current markup content
- self.markup = found
- if len( string.strip( line ) ) > 0:
- self.markup_lines.append( line )
- elif first == 0:
- self.markup_lines.append( line )
-
- self.add_markup()
-
- return self.markups
-
- def parse_sources( self, source_processor ):
- blocks = source_processor.blocks
- count = len( blocks )
-
- for n in range( count ):
- source = blocks[n]
- if source.content:
- # this is a documentation comment, we need to catch
- # all following normal blocks in the "follow" list
- #
- follow = []
- m = n + 1
- while m < count and not blocks[m].content:
- follow.append( blocks[m] )
- m = m + 1
-
- doc_block = DocBlock( source, follow, self )
-
- def finish( self ):
- # process all sections to extract their abstract, description
- # and ordered list of items
- #
- for sec in self.sections.values():
- sec.process()
-
- # process chapters to check that all sections are correctly
- # listed there
- for chap in self.chapters:
- for sec in chap.order:
- if sec in self.sections:
- section = self.sections[sec]
- section.chapter = chap
- section.reorder()
- chap.sections.append( section )
- else:
- sys.stderr.write( "WARNING: chapter '" + \
- chap.name + "' in " + chap.block.location() + \
- " lists unknown section '" + sec + "'\n" )
-
- # check that all sections are in a chapter
- #
- others = []
- for sec in self.sections.values():
- if not sec.chapter:
- sec.reorder()
- others.append( sec )
-
- # create a new special chapter for all remaining sections
- # when necessary
- #
- if others:
- chap = DocChapter( None )
- chap.sections = others
- self.chapters.append( chap )
-
-
-################################################################
-##
-## DOC BLOCK CLASS
-##
-class DocBlock:
-
- def __init__( self, source, follow, processor ):
- processor.reset()
-
- self.source = source
- self.code = []
- self.type = "ERRTYPE"
- self.name = "ERRNAME"
- self.section = processor.section
- self.markups = processor.process_content( source.content )
-
- # compute block type from first markup tag
- try:
- self.type = self.markups[0].tag
- except:
- pass
-
- # compute block name from first markup paragraph
- try:
- markup = self.markups[0]
- para = markup.fields[0].items[0]
- name = para.words[0]
- m = re_identifier.match( name )
- if m:
- name = m.group( 1 )
- self.name = name
- except:
- pass
-
- if self.type == "section":
- # detect new section starts
- processor.set_section( self.name )
- processor.section.add_def( self )
- elif self.type == "chapter":
- # detect new chapter
- processor.add_chapter( self )
- else:
- processor.section.add_block( self )
-
- # now, compute the source lines relevant to this documentation
- # block. We keep normal comments in for obvious reasons (??)
- source = []
- for b in follow:
- if b.format:
- break
- for l in b.lines:
- # collect header macro definitions
- m = re_header_macro.match( l )
- if m:
- processor.headers[m.group( 2 )] = m.group( 1 );
-
- # we use "/* */" as a separator
- if re_source_sep.match( l ):
- break
- source.append( l )
-
- # now strip the leading and trailing empty lines from the sources
- start = 0
- end = len( source ) - 1
-
- while start < end and not string.strip( source[start] ):
- start = start + 1
-
- while start < end and not string.strip( source[end] ):
- end = end - 1
-
- if start == end and not string.strip( source[start] ):
- self.code = []
- else:
- self.code = source[start:end + 1]
-
- def location( self ):
- return self.source.location()
-
- def get_markup( self, tag_name ):
- """Return the DocMarkup corresponding to a given tag in a block."""
- for m in self.markups:
- if m.tag == string.lower( tag_name ):
- return m
- return None
-
- def get_markup_words( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- return m.fields[0].items[0].words
- except:
- return []
-
- def get_markup_words_all( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- words = []
- for item in m.fields[0].items:
- # We honour empty lines in an `<Order>' section element by
- # adding the sentinel `/empty/'. The formatter should then
- # convert it to an appropriate representation in the
- # `section_enter' function.
- words += item.words
- words.append( "/empty/" )
- return words
- except:
- return []
-
- def get_markup_text( self, tag_name ):
- result = self.get_markup_words( tag_name )
- return string.join( result )
-
- def get_markup_items( self, tag_name ):
- try:
- m = self.get_markup( tag_name )
- return m.fields[0].items
- except:
- return None
-
-# eof
diff --git a/src/3rdparty/freetype/src/tools/docmaker/docbeauty.py b/src/3rdparty/freetype/src/tools/docmaker/docbeauty.py
deleted file mode 100644
index 0b021fa6c9..0000000000
--- a/src/3rdparty/freetype/src/tools/docmaker/docbeauty.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/env python
-#
-# DocBeauty (c) 2003, 2004, 2008 David Turner <david@freetype.org>
-#
-# This program is used to beautify the documentation comments used
-# in the FreeType 2 public headers.
-#
-
-from sources import *
-from content import *
-from utils import *
-
-import sys, os, string, getopt
-
-
-content_processor = ContentProcessor()
-
-
-def beautify_block( block ):
- if block.content:
- content_processor.reset()
-
- markups = content_processor.process_content( block.content )
- text = []
- first = 1
-
- for markup in markups:
- text.extend( markup.beautify( first ) )
- first = 0
-
- # now beautify the documentation "borders" themselves
- lines = [" /*************************************************************************"]
- for l in text:
- lines.append( " *" + l )
- lines.append( " */" )
-
- block.lines = lines
-
-
-def usage():
- print( "\nDocBeauty 0.1 Usage information\n" )
- print( " docbeauty [options] file1 [file2 ...]\n" )
- print( "using the following options:\n" )
- print( " -h : print this page" )
- print( " -b : backup original files with the 'orig' extension" )
- print( "" )
- print( " --backup : same as -b" )
-
-
-def main( argv ):
- """main program loop"""
-
- global output_dir
-
- try:
- opts, args = getopt.getopt( sys.argv[1:], \
- "hb", \
- ["help", "backup"] )
- except getopt.GetoptError:
- usage()
- sys.exit( 2 )
-
- if args == []:
- usage()
- sys.exit( 1 )
-
- # process options
- #
- output_dir = None
- do_backup = None
-
- for opt in opts:
- if opt[0] in ( "-h", "--help" ):
- usage()
- sys.exit( 0 )
-
- if opt[0] in ( "-b", "--backup" ):
- do_backup = 1
-
- # create context and processor
- source_processor = SourceProcessor()
-
- # retrieve the list of files to process
- file_list = make_file_list( args )
- for filename in file_list:
- source_processor.parse_file( filename )
-
- for block in source_processor.blocks:
- beautify_block( block )
-
- new_name = filename + ".new"
- ok = None
-
- try:
- file = open( new_name, "wt" )
- for block in source_processor.blocks:
- for line in block.lines:
- file.write( line )
- file.write( "\n" )
- file.close()
- except:
- ok = 0
-
-
-# if called from the command line
-#
-if __name__ == '__main__':
- main( sys.argv )
-
-
-# eof
diff --git a/src/3rdparty/freetype/src/tools/docmaker/docmaker.py b/src/3rdparty/freetype/src/tools/docmaker/docmaker.py
deleted file mode 100644
index eb49afb0a0..0000000000
--- a/src/3rdparty/freetype/src/tools/docmaker/docmaker.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env python
-#
-# docmaker.py
-#
-# Convert source code markup to HTML documentation.
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This program is a re-write of the original DocMaker tool used to generate
-# the API Reference of the FreeType font rendering engine by converting
-# in-source comments into structured HTML.
-#
-# This new version is capable of outputting XML data as well as accepting
-# more liberal formatting options. It also uses regular expression matching
-# and substitution to speed up operation significantly.
-#
-
-from sources import *
-from content import *
-from utils import *
-from formatter import *
-from tohtml import *
-
-import utils
-
-import sys, glob, getopt
-
-
-def usage():
- print( "\nDocMaker Usage information\n" )
- print( " docmaker [options] file1 [file2 ...]\n" )
- print( "using the following options:\n" )
- print( " -h : print this page" )
- print( " -t : set project title, as in '-t \"My Project\"'" )
- print( " -o : set output directory, as in '-o mydir'" )
- print( " -p : set documentation prefix, as in '-p ft2'" )
- print( "" )
- print( " --title : same as -t, as in '--title=\"My Project\"'" )
- print( " --output : same as -o, as in '--output=mydir'" )
- print( " --prefix : same as -p, as in '--prefix=ft2'" )
-
-
-def main( argv ):
- """Main program loop."""
-
- global output_dir
-
- try:
- opts, args = getopt.getopt( sys.argv[1:],
- "ht:o:p:",
- ["help", "title=", "output=", "prefix="] )
- except getopt.GetoptError:
- usage()
- sys.exit( 2 )
-
- if args == []:
- usage()
- sys.exit( 1 )
-
- # process options
- project_title = "Project"
- project_prefix = None
- output_dir = None
-
- for opt in opts:
- if opt[0] in ( "-h", "--help" ):
- usage()
- sys.exit( 0 )
-
- if opt[0] in ( "-t", "--title" ):
- project_title = opt[1]
-
- if opt[0] in ( "-o", "--output" ):
- utils.output_dir = opt[1]
-
- if opt[0] in ( "-p", "--prefix" ):
- project_prefix = opt[1]
-
- check_output()
-
- # create context and processor
- source_processor = SourceProcessor()
- content_processor = ContentProcessor()
-
- # retrieve the list of files to process
- file_list = make_file_list( args )
- for filename in file_list:
- source_processor.parse_file( filename )
- content_processor.parse_sources( source_processor )
-
- # process sections
- content_processor.finish()
-
- formatter = HtmlFormatter( content_processor,
- project_title,
- project_prefix )
-
- formatter.toc_dump()
- formatter.index_dump()
- formatter.section_dump_all()
-
-
-# if called from the command line
-if __name__ == '__main__':
- main( sys.argv )
-
-# eof
diff --git a/src/3rdparty/freetype/src/tools/docmaker/formatter.py b/src/3rdparty/freetype/src/tools/docmaker/formatter.py
deleted file mode 100644
index 2708fd40d6..0000000000
--- a/src/3rdparty/freetype/src/tools/docmaker/formatter.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#
-# formatter.py
-#
-# Convert parsed content blocks to a structured document (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This is the base Formatter class. Its purpose is to convert a content
-# processor's data into specific documents (i.e., table of contents, global
-# index, and individual API reference indices).
-#
-# You need to sub-class it to output anything sensible. For example, the
-# file `tohtml.py' contains the definition of the `HtmlFormatter' sub-class
-# to output HTML.
-#
-
-
-from sources import *
-from content import *
-from utils import *
-
-
-################################################################
-##
-## FORMATTER CLASS
-##
-class Formatter:
-
- def __init__( self, processor ):
- self.processor = processor
- self.identifiers = {}
- self.chapters = processor.chapters
- self.sections = processor.sections.values()
- self.block_index = []
-
- # store all blocks in a dictionary
- self.blocks = []
- for section in self.sections:
- for block in section.blocks.values():
- self.add_identifier( block.name, block )
-
- # add enumeration values to the index, since this is useful
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- self.add_identifier( field.name, block )
-
- self.block_index = self.identifiers.keys()
- self.block_index.sort( key = index_key )
-
- # also add section names to dictionary (without making them appear
- # in the index)
- for section in self.sections:
- self.add_identifier( section.name, section )
-
- def add_identifier( self, name, block ):
- if name in self.identifiers:
- # duplicate name!
- sys.stderr.write( "WARNING: duplicate definition for"
- + " '" + name + "' "
- + "in " + block.location() + ", "
- + "previous definition in "
- + self.identifiers[name].location()
- + "\n" )
- else:
- self.identifiers[name] = block
-
- #
- # formatting the table of contents
- #
- def toc_enter( self ):
- pass
-
- def toc_chapter_enter( self, chapter ):
- pass
-
- def toc_section_enter( self, section ):
- pass
-
- def toc_section_exit( self, section ):
- pass
-
- def toc_chapter_exit( self, chapter ):
- pass
-
- def toc_index( self, index_filename ):
- pass
-
- def toc_exit( self ):
- pass
-
- def toc_dump( self, toc_filename = None, index_filename = None ):
- output = None
- if toc_filename:
- output = open_output( toc_filename )
-
- self.toc_enter()
-
- for chap in self.processor.chapters:
-
- self.toc_chapter_enter( chap )
-
- for section in chap.sections:
- self.toc_section_enter( section )
- self.toc_section_exit( section )
-
- self.toc_chapter_exit( chap )
-
- self.toc_index( index_filename )
-
- self.toc_exit()
-
- if output:
- close_output( output )
-
- #
- # formatting the index
- #
- def index_enter( self ):
- pass
-
- def index_name_enter( self, name ):
- pass
-
- def index_name_exit( self, name ):
- pass
-
- def index_exit( self ):
- pass
-
- def index_dump( self, index_filename = None ):
- output = None
- if index_filename:
- output = open_output( index_filename )
-
- self.index_enter()
-
- for name in self.block_index:
- self.index_name_enter( name )
- self.index_name_exit( name )
-
- self.index_exit()
-
- if output:
- close_output( output )
-
- #
- # formatting a section
- #
- def section_enter( self, section ):
- pass
-
- def block_enter( self, block ):
- pass
-
- def markup_enter( self, markup, block = None ):
- pass
-
- def field_enter( self, field, markup = None, block = None ):
- pass
-
- def field_exit( self, field, markup = None, block = None ):
- pass
-
- def markup_exit( self, markup, block = None ):
- pass
-
- def block_exit( self, block ):
- pass
-
- def section_exit( self, section ):
- pass
-
- def section_dump( self, section, section_filename = None ):
- output = None
- if section_filename:
- output = open_output( section_filename )
-
- self.section_enter( section )
-
- for name in section.block_names:
- skip_entry = 0
- try:
- block = self.identifiers[name]
- # `block_names' can contain field names also,
- # which we filter out
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- if field.name == name:
- skip_entry = 1
- except:
- skip_entry = 1 # this happens e.g. for `/empty/' entries
-
- if skip_entry:
- continue
-
- self.block_enter( block )
-
- for markup in block.markups[1:]: # always ignore first markup!
- self.markup_enter( markup, block )
-
- for field in markup.fields:
- self.field_enter( field, markup, block )
- self.field_exit( field, markup, block )
-
- self.markup_exit( markup, block )
-
- self.block_exit( block )
-
- self.section_exit( section )
-
- if output:
- close_output( output )
-
- def section_dump_all( self ):
- for section in self.sections:
- self.section_dump( section )
-
-# eof
diff --git a/src/3rdparty/freetype/src/tools/docmaker/sources.py b/src/3rdparty/freetype/src/tools/docmaker/sources.py
deleted file mode 100644
index e3b95e0faa..0000000000
--- a/src/3rdparty/freetype/src/tools/docmaker/sources.py
+++ /dev/null
@@ -1,410 +0,0 @@
-#
-# sources.py
-#
-# Convert source code comments to multi-line blocks (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-#
-# This library file contains definitions of classes needed to decompose C
-# source code files into a series of multi-line `blocks'. There are two
-# kinds of blocks.
-#
-# - Normal blocks, which contain source code or ordinary comments.
-#
-# - Documentation blocks, which have restricted formatting, and whose text
-# always start with a documentation markup tag like `<Function>',
-# `<Type>', etc.
-#
-# The routines to process the content of documentation blocks are contained
-# in file `content.py'; the classes and methods found here only deal with
-# text parsing and basic documentation block extraction.
-#
-
-
-import fileinput, re, string
-
-
-################################################################
-##
-## SOURCE BLOCK FORMAT CLASS
-##
-## A simple class containing compiled regular expressions to detect
-## potential documentation format block comments within C source code.
-##
-## The `column' pattern must contain a group to `unbox' the content of
-## documentation comment blocks.
-##
-## Later on, paragraphs are converted to long lines, which simplifies the
-## regular expressions that act upon the text.
-##
-class SourceBlockFormat:
-
- def __init__( self, id, start, column, end ):
- """Create a block pattern, used to recognize special documentation
- blocks."""
- self.id = id
- self.start = re.compile( start, re.VERBOSE )
- self.column = re.compile( column, re.VERBOSE )
- self.end = re.compile( end, re.VERBOSE )
-
-
-#
-# Format 1 documentation comment blocks.
-#
-# /************************************/ (at least 2 asterisks)
-# /* */
-# /* */
-# /* */
-# /************************************/ (at least 2 asterisks)
-#
-start = r'''
- \s* # any number of whitespace
- /\*{2,}/ # followed by '/' and at least two asterisks then '/'
- \s*$ # probably followed by whitespace
-'''
-
-column = r'''
- \s* # any number of whitespace
- /\*{1} # followed by '/' and precisely one asterisk
- ([^*].*) # followed by anything (group 1)
- \*{1}/ # followed by one asterisk and a '/'
- \s*$ # probably followed by whitespace
-'''
-
-re_source_block_format1 = SourceBlockFormat( 1, start, column, start )
-
-
-#
-# Format 2 documentation comment blocks.
-#
-# /************************************ (at least 2 asterisks)
-# *
-# * (1 asterisk)
-# *
-# */ (1 or more asterisks)
-#
-start = r'''
- \s* # any number of whitespace
- /\*{2,} # followed by '/' and at least two asterisks
- \s*$ # probably followed by whitespace
-'''
-
-column = r'''
- \s* # any number of whitespace
- \*{1}(?![*/]) # followed by precisely one asterisk not followed by `/'
- (.*) # then anything (group1)
-'''
-
-end = r'''
- \s* # any number of whitespace
- \*+/ # followed by at least one asterisk, then '/'
-'''
-
-re_source_block_format2 = SourceBlockFormat( 2, start, column, end )
-
-
-#
-# The list of supported documentation block formats. We could add new ones
-# quite easily.
-#
-re_source_block_formats = [re_source_block_format1, re_source_block_format2]
-
-
-#
-# The following regular expressions correspond to markup tags within the
-# documentation comment blocks. They are equivalent despite their different
-# syntax.
-#
-# A markup tag consists of letters or character `-', to be found in group 1.
-#
-# Notice that a markup tag _must_ begin a new paragraph.
-#
-re_markup_tag1 = re.compile( r'''\s*<((?:\w|-)*)>''' ) # <xxxx> format
-re_markup_tag2 = re.compile( r'''\s*@((?:\w|-)*):''' ) # @xxxx: format
-
-#
-# The list of supported markup tags. We could add new ones quite easily.
-#
-re_markup_tags = [re_markup_tag1, re_markup_tag2]
-
-
-#
-# A regular expression to detect a cross reference, after markup tags have
-# been stripped off.
-#
-# Two syntax forms are supported:
-#
-# @<name>
-# @<name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'. Use `<id>' if there are multiple, valid `<name>' entries.
-#
-# Example: @foo[bar]
-#
-re_crossref = re.compile( r"""
- @
- (?P<name>(?:\w|-)+
- (?:\[(?:\w|-)+\])?)
- (?P<rest>.*)
- """, re.VERBOSE )
-
-#
-# Two regular expressions to detect italic and bold markup, respectively.
-# Group 1 is the markup, group 2 the rest of the line.
-#
-# Note that the markup is limited to words consisting of letters, digits,
-# the characters `_' and `-', or an apostrophe (but not as the first
-# character).
-#
-re_italic = re.compile( r"_((?:\w|-)(?:\w|'|-)*)_(.*)" ) # _italic_
-re_bold = re.compile( r"\*((?:\w|-)(?:\w|'|-)*)\*(.*)" ) # *bold*
-
-#
-# This regular expression code to identify an URL has been taken from
-#
-# https://mail.python.org/pipermail/tutor/2002-September/017228.html
-#
-# (with slight modifications).
-#
-urls = r'(?:https?|telnet|gopher|file|wais|ftp)'
-ltrs = r'\w'
-gunk = r'/#~:.?+=&%@!\-'
-punc = r'.:?\-'
-any = "%(ltrs)s%(gunk)s%(punc)s" % { 'ltrs' : ltrs,
- 'gunk' : gunk,
- 'punc' : punc }
-url = r"""
- (
- \b # start at word boundary
- %(urls)s : # need resource and a colon
- [%(any)s] +? # followed by one or more of any valid
- # character, but be conservative and
- # take only what you need to...
- (?= # [look-ahead non-consumptive assertion]
- [%(punc)s]* # either 0 or more punctuation
- (?: # [non-grouping parentheses]
- [^%(any)s] | $ # followed by a non-url char
- # or end of the string
- )
- )
- )
- """ % {'urls' : urls,
- 'any' : any,
- 'punc' : punc }
-
-re_url = re.compile( url, re.VERBOSE | re.MULTILINE )
-
-#
-# A regular expression that stops collection of comments for the current
-# block.
-#
-re_source_sep = re.compile( r'\s*/\*\s*\*/' ) # /* */
-
-#
-# A regular expression to find possible C identifiers while outputting
-# source code verbatim, covering things like `*foo' or `(bar'. Group 1 is
-# the prefix, group 2 the identifier -- since we scan lines from left to
-# right, sequentially splitting the source code into prefix and identifier
-# is fully sufficient for our purposes.
-#
-re_source_crossref = re.compile( r'(\W*)(\w*)' )
-
-#
-# A regular expression that matches a list of reserved C source keywords.
-#
-re_source_keywords = re.compile( '''\\b ( typedef |
- struct |
- enum |
- union |
- const |
- char |
- int |
- short |
- long |
- void |
- signed |
- unsigned |
- \#include |
- \#define |
- \#undef |
- \#if |
- \#ifdef |
- \#ifndef |
- \#else |
- \#endif ) \\b''', re.VERBOSE )
-
-
-################################################################
-##
-## SOURCE BLOCK CLASS
-##
-## There are two important fields in a `SourceBlock' object.
-##
-## self.lines
-## A list of text lines for the corresponding block.
-##
-## self.content
-## For documentation comment blocks only, this is the block content
-## that has been `unboxed' from its decoration. This is `None' for all
-## other blocks (i.e., sources or ordinary comments with no starting
-## markup tag)
-##
-class SourceBlock:
-
- def __init__( self, processor, filename, lineno, lines ):
- self.processor = processor
- self.filename = filename
- self.lineno = lineno
- self.lines = lines[:]
- self.format = processor.format
- self.content = []
-
- if self.format == None:
- return
-
- words = []
-
- # extract comment lines
- lines = []
-
- for line0 in self.lines:
- m = self.format.column.match( line0 )
- if m:
- lines.append( m.group( 1 ) )
-
- # now, look for a markup tag
- for l in lines:
- l = string.strip( l )
- if len( l ) > 0:
- for tag in re_markup_tags:
- if tag.match( l ):
- self.content = lines
- return
-
- def location( self ):
- return "(" + self.filename + ":" + repr( self.lineno ) + ")"
-
- # debugging only -- not used in normal operations
- def dump( self ):
- if self.content:
- print( "{{{content start---" )
- for l in self.content:
- print( l )
- print( "---content end}}}" )
- return
-
- fmt = ""
- if self.format:
- fmt = repr( self.format.id ) + " "
-
- for line in self.lines:
- print( line )
-
-
-################################################################
-##
-## SOURCE PROCESSOR CLASS
-##
-## The `SourceProcessor' is in charge of reading a C source file and
-## decomposing it into a series of different `SourceBlock' objects.
-##
-## A SourceBlock object consists of the following data.
-##
-## - A documentation comment block using one of the layouts above. Its
-## exact format will be discussed later.
-##
-## - Normal sources lines, including comments.
-##
-##
-class SourceProcessor:
-
- def __init__( self ):
- """Initialize a source processor."""
- self.blocks = []
- self.filename = None
- self.format = None
- self.lines = []
-
- def reset( self ):
- """Reset a block processor and clean up all its blocks."""
- self.blocks = []
- self.format = None
-
- def parse_file( self, filename ):
- """Parse a C source file and add its blocks to the processor's
- list."""
- self.reset()
-
- self.filename = filename
-
- fileinput.close()
- self.format = None
- self.lineno = 0
- self.lines = []
-
- for line in fileinput.input( filename ):
- # strip trailing newlines, important on Windows machines!
- if line[-1] == '\012':
- line = line[0:-1]
-
- if self.format == None:
- self.process_normal_line( line )
- else:
- if self.format.end.match( line ):
- # A normal block end. Add it to `lines' and create a
- # new block
- self.lines.append( line )
- self.add_block_lines()
- elif self.format.column.match( line ):
- # A normal column line. Add it to `lines'.
- self.lines.append( line )
- else:
- # An unexpected block end. Create a new block, but
- # don't process the line.
- self.add_block_lines()
-
- # we need to process the line again
- self.process_normal_line( line )
-
- # record the last lines
- self.add_block_lines()
-
- def process_normal_line( self, line ):
- """Process a normal line and check whether it is the start of a new
- block."""
- for f in re_source_block_formats:
- if f.start.match( line ):
- self.add_block_lines()
- self.format = f
- self.lineno = fileinput.filelineno()
-
- self.lines.append( line )
-
- def add_block_lines( self ):
- """Add the current accumulated lines and create a new block."""
- if self.lines != []:
- block = SourceBlock( self,
- self.filename,
- self.lineno,
- self.lines )
-
- self.blocks.append( block )
- self.format = None
- self.lines = []
-
- # debugging only, not used in normal operations
- def dump( self ):
- """Print all blocks in a processor."""
- for b in self.blocks:
- b.dump()
-
-# eof
diff --git a/src/3rdparty/freetype/src/tools/docmaker/tohtml.py b/src/3rdparty/freetype/src/tools/docmaker/tohtml.py
deleted file mode 100644
index 9f318a2a49..0000000000
--- a/src/3rdparty/freetype/src/tools/docmaker/tohtml.py
+++ /dev/null
@@ -1,725 +0,0 @@
-#
-# tohtml.py
-#
-# A sub-class container of the `Formatter' class to produce HTML.
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-# The parent class is contained in file `formatter.py'.
-
-
-from sources import *
-from content import *
-from formatter import *
-
-import time
-
-
-# The following strings define the HTML header used by all generated pages.
-html_header_1 = """\
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>\
-"""
-
-html_header_2 = """\
- API Reference</title>
-<style type="text/css">
- a:link { color: #0000EF; }
- a:visited { color: #51188E; }
- a:hover { color: #FF0000; }
-
- body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
- color: #000000;
- background: #FFFFFF;
- width: 87%;
- margin: auto; }
-
- div.section { width: 75%;
- margin: auto; }
- div.section hr { margin: 4ex 0 1ex 0; }
- div.section h4 { background-color: #EEEEFF;
- font-size: medium;
- font-style: oblique;
- font-weight: bold;
- margin: 3ex 0 1.5ex 9%;
- padding: 0.3ex 0 0.3ex 1%; }
- div.section p { margin: 1.5ex 0 1.5ex 10%; }
- div.section pre { margin: 3ex 0 3ex 9%;
- background-color: #D6E8FF;
- padding: 2ex 0 2ex 1%; }
- div.section table.fields { width: 90%;
- margin: 1.5ex 0 1.5ex 10%; }
- div.section table.toc { width: 95%;
- margin: 1.5ex 0 1.5ex 5%; }
- div.timestamp { text-align: center;
- font-size: 69%;
- margin: 1.5ex 0 1.5ex 0; }
-
- h1 { text-align: center; }
- h3 { font-size: medium;
- margin: 4ex 0 1.5ex 0; }
-
- p { text-align: justify; }
-
- pre.colored { color: blue; }
-
- span.keyword { font-family: monospace;
- text-align: left;
- white-space: pre;
- color: darkblue; }
-
- table.fields td.val { font-weight: bold;
- text-align: right;
- width: 30%;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.fields td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em; }
- table.fields td.desc p:first-child { margin: 0; }
- table.fields td.desc p { margin: 1.5ex 0 0 0; }
- table.index { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 1em 0.3ex; }
- table.index tr { padding: 0; }
- table.index td { padding: 0; }
- table.index-toc-link { width: 100%;
- border: 0;
- border-spacing: 0;
- margin: 1ex 0 1ex 0; }
- table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: left; }
- table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: center; }
- table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
- font-size: 83%;
- text-align: right; }
- table.synopsis { margin: 6ex auto 6ex auto;
- border: 0;
- border-collapse: separate;
- border-spacing: 2em 0.6ex; }
- table.synopsis tr { padding: 0; }
- table.synopsis td { padding: 0; }
- table.toc td.link { width: 30%;
- text-align: right;
- vertical-align: baseline;
- padding: 1ex 1em 1ex 0; }
- table.toc td.desc { vertical-align: baseline;
- padding: 1ex 0 1ex 1em;
- text-align: left; }
- table.toc td.desc p:first-child { margin: 0;
- text-align: left; }
- table.toc td.desc p { margin: 1.5ex 0 0 0;
- text-align: left; }
-
-</style>
-</head>
-<body>
-"""
-
-html_header_3l = """
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-
-html_header_3r = """
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-
-html_header_4 = """\
-">Index</a>]</td><td class="right">[<a href="\
-"""
-
-html_header_5t = """\
-">TOC</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_5i = """\
-">Index</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_6 = """\
- API Reference</h1>
-"""
-
-
-# The HTML footer used by all generated pages.
-html_footer = """\
-</body>
-</html>\
-"""
-
-# The header and footer used for each section.
-section_title_header1 = '<h1 id="'
-section_title_header2 = '">'
-section_title_footer = "</h1>"
-
-# The header and footer used for code segments.
-code_header = '<pre class="colored">'
-code_footer = '</pre>'
-
-# Paragraph header and footer.
-para_header = "<p>"
-para_footer = "</p>"
-
-# Block header and footer.
-block_header = '<div class="section">'
-block_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-block_footer_middle = """\
-">Index</a>]</td>\
-<td class="middle">[<a href="#">Top</a>]</td>\
-<td class="right">[<a href="\
-"""
-block_footer_end = """\
-">TOC</a>]</td></tr></table></div>
-"""
-
-# Description header/footer.
-description_header = ""
-description_footer = ""
-
-# Marker header/inter/footer combination.
-marker_header = "<h4>"
-marker_inter = "</h4>"
-marker_footer = ""
-
-# Header location header/footer.
-header_location_header = "<p>"
-header_location_footer = "</p>"
-
-# Source code extracts header/footer.
-source_header = "<pre>"
-source_footer = "</pre>"
-
-# Chapter header/inter/footer.
-chapter_header = """\
-<div class="section">
-<h2>\
-"""
-chapter_inter = '</h2>'
-chapter_footer = '</div>'
-
-# Index footer.
-index_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-index_footer_end = """\
-">TOC</a>]</td></tr></table>
-"""
-
-# TOC footer.
-toc_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-toc_footer_end = """\
-">Index</a>]</td></tr></table>
-"""
-
-
-# Source language keyword coloration and styling.
-keyword_prefix = '<span class="keyword">'
-keyword_suffix = '</span>'
-
-section_synopsis_header = '<h2>Synopsis</h2>'
-section_synopsis_footer = ''
-
-
-# Translate a single line of source to HTML. This converts `<', `>', and
-# `&' into `&lt;',`&gt;', and `&amp;'.
-#
-def html_quote( line ):
- result = string.replace( line, "&", "&amp;" )
- result = string.replace( result, "<", "&lt;" )
- result = string.replace( result, ">", "&gt;" )
- return result
-
-
-################################################################
-##
-## HTML FORMATTER CLASS
-##
-class HtmlFormatter( Formatter ):
-
- def __init__( self, processor, project_title, file_prefix ):
- Formatter.__init__( self, processor )
-
- global html_header_1
- global html_header_2
- global html_header_3l, html_header_3r
- global html_header_4
- global html_header_5t, html_header_5i
- global html_header_6
- global html_footer
-
- if file_prefix:
- file_prefix = file_prefix + "-"
- else:
- file_prefix = ""
-
- self.headers = processor.headers
- self.project_title = project_title
- self.file_prefix = file_prefix
- self.html_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3l + file_prefix + "index.html"
- + html_header_4 + file_prefix + "toc.html"
- + html_header_5t + project_title
- + html_header_6 )
- self.html_index_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3r + file_prefix + "toc.html"
- + html_header_5t + project_title
- + html_header_6 )
- self.html_toc_header = (
- html_header_1 + project_title
- + html_header_2
- + html_header_3l + file_prefix + "index.html"
- + html_header_5i + project_title
- + html_header_6 )
- self.html_footer = (
- '<div class="timestamp">generated on '
- + time.asctime( time.localtime( time.time() ) )
- + "</div>" + html_footer )
-
- self.columns = 3
-
- def make_section_url( self, section ):
- return self.file_prefix + section.name + ".html"
-
- def make_block_url( self, block, name = None ):
- if name == None:
- name = block.name
-
- try:
- section_url = self.make_section_url( block.section )
- except:
- # we already have a section
- section_url = self.make_section_url( block )
-
- return section_url + "#" + name
-
- def make_html_word( self, word ):
- """Analyze a simple word to detect cross-references and markup."""
- # handle cross-references
- m = re_crossref.match( word )
- if m:
- try:
- name = m.group( 'name' )
- rest = m.group( 'rest' )
- block = self.identifiers[name]
- url = self.make_block_url( block )
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
-
- try:
- # for sections, display title
- url = ( '&lsquo;<a href="' + url + '">'
- + block.title + '</a>&rsquo;'
- + rest )
- except:
- url = ( '<a href="' + url + '">'
- + name + '</a>'
- + rest )
-
- return url
- except:
- # we detected a cross-reference to an unknown item
- sys.stderr.write( "WARNING: undefined cross reference"
- + " '" + name + "'.\n" )
- return '?' + name + '?' + rest
-
- # handle markup for italic and bold
- m = re_italic.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 2 )
- return '<i>' + name + '</i>' + rest
-
- m = re_bold.match( word )
- if m:
- name = m.group( 1 )
- rest = m.group( 2 )
- return '<b>' + name + '</b>' + rest
-
- return html_quote( word )
-
- def make_html_para( self, words ):
- """Convert words of a paragraph into tagged HTML text. Also handle
- cross references."""
- line = ""
- if words:
- line = self.make_html_word( words[0] )
- for word in words[1:]:
- line = line + " " + self.make_html_word( word )
- # handle hyperlinks
- line = re_url.sub( r'<a href="\1">\1</a>', line )
- # convert `...' quotations into real left and right single quotes
- line = re.sub( r"(^|\W)`(.*?)'(\W|$)",
- r'\1&lsquo;\2&rsquo;\3',
- line )
- # convert tilde into non-breakable space
- line = string.replace( line, "~", "&nbsp;" )
-
- return para_header + line + para_footer
-
- def make_html_code( self, lines ):
- """Convert a code sequence to HTML."""
- line = code_header + '\n'
- for l in lines:
- line = line + html_quote( l ).rstrip() + '\n'
-
- return line + code_footer
-
- def make_html_items( self, items ):
- """Convert a field's content into HTML."""
- lines = []
- for item in items:
- if item.lines:
- lines.append( self.make_html_code( item.lines ) )
- else:
- lines.append( self.make_html_para( item.words ) )
-
- return string.join( lines, '\n' )
-
- def print_html_items( self, items ):
- print( self.make_html_items( items ) )
-
- def print_html_field( self, field ):
- if field.name:
- print( '<table><tr valign="top"><td><b>'
- + field.name
- + "</b></td><td>" )
-
- print( self.make_html_items( field.items ) )
-
- if field.name:
- print( "</td></tr></table>" )
-
- def html_source_quote( self, line, block_name = None ):
- result = ""
- while line:
- m = re_source_crossref.match( line )
- if m:
- name = m.group( 2 )
- prefix = html_quote( m.group( 1 ) )
- length = len( m.group( 0 ) )
-
- if name == block_name:
- # this is the current block name, if any
- result = result + prefix + '<b>' + name + '</b>'
- elif re_source_keywords.match( name ):
- # this is a C keyword
- result = ( result + prefix
- + keyword_prefix + name + keyword_suffix )
- elif name in self.identifiers:
- # this is a known identifier
- block = self.identifiers[name]
- id = block.name
-
- # link to a field ID if possible
- try:
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- if field.name:
- id = name
-
- result = ( result + prefix
- + '<a href="'
- + self.make_block_url( block, id )
- + '">' + name + '</a>' )
- except:
- # sections don't have `markups'; however, we don't
- # want references to sections here anyway
- result = result + html_quote( line[:length] )
-
- else:
- result = result + html_quote( line[:length] )
-
- line = line[length:]
- else:
- result = result + html_quote( line )
- line = []
-
- return result
-
- def print_html_field_list( self, fields ):
- print( '<table class="fields">' )
- for field in fields:
- print( '<tr><td class="val" id="' + field.name + '">'
- + field.name
- + '</td><td class="desc">' )
- self.print_html_items( field.items )
- print( "</td></tr>" )
- print( "</table>" )
-
- def print_html_markup( self, markup ):
- table_fields = []
- for field in markup.fields:
- if field.name:
- # We begin a new series of field or value definitions. We
- # record them in the `table_fields' list before outputting
- # all of them as a single table.
- table_fields.append( field )
- else:
- if table_fields:
- self.print_html_field_list( table_fields )
- table_fields = []
-
- self.print_html_items( field.items )
-
- if table_fields:
- self.print_html_field_list( table_fields )
-
- #
- # formatting the index
- #
- def index_enter( self ):
- print( self.html_index_header )
- self.index_items = {}
-
- def index_name_enter( self, name ):
- block = self.identifiers[name]
- url = self.make_block_url( block )
- self.index_items[name] = url
-
- def index_exit( self ):
- # `block_index' already contains the sorted list of index names
- count = len( self.block_index )
- rows = ( count + self.columns - 1 ) // self.columns
-
- print( '<table class="index">' )
- for r in range( rows ):
- line = "<tr>"
- for c in range( self.columns ):
- i = r + c * rows
- if i < count:
- bname = self.block_index[r + c * rows]
- url = self.index_items[bname]
- # display `foo[bar]' as `foo (bar)'
- bname = string.replace( bname, "[", " (" )
- bname = string.replace( bname, "]", ")" )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- line = ( line + '<td><a href="' + url + '">'
- + bname + '</a></td>' )
- else:
- line = line + '<td></td>'
- line = line + "</tr>"
- print( line )
-
- print( "</table>" )
-
- print( index_footer_start
- + self.file_prefix + "toc.html"
- + index_footer_end )
-
- print( self.html_footer )
-
- self.index_items = {}
-
- def index_dump( self, index_filename = None ):
- if index_filename == None:
- index_filename = self.file_prefix + "index.html"
-
- Formatter.index_dump( self, index_filename )
-
- #
- # formatting the table of contents
- #
- def toc_enter( self ):
- print( self.html_toc_header )
- print( "<h1>Table of Contents</h1>" )
-
- def toc_chapter_enter( self, chapter ):
- print( chapter_header + string.join( chapter.title ) + chapter_inter )
- print( '<table class="toc">' )
-
- def toc_section_enter( self, section ):
- print( '<tr><td class="link">'
- + '<a href="' + self.make_section_url( section ) + '">'
- + section.title + '</a></td><td class="desc">' )
- print( self.make_html_para( section.abstract ) )
-
- def toc_section_exit( self, section ):
- print( "</td></tr>" )
-
- def toc_chapter_exit( self, chapter ):
- print( "</table>" )
- print( chapter_footer )
-
- def toc_index( self, index_filename ):
- print( chapter_header
- + '<a href="' + index_filename + '">Global Index</a>'
- + chapter_inter + chapter_footer )
-
- def toc_exit( self ):
- print( toc_footer_start
- + self.file_prefix + "index.html"
- + toc_footer_end )
-
- print( self.html_footer )
-
- def toc_dump( self, toc_filename = None, index_filename = None ):
- if toc_filename == None:
- toc_filename = self.file_prefix + "toc.html"
-
- if index_filename == None:
- index_filename = self.file_prefix + "index.html"
-
- Formatter.toc_dump( self, toc_filename, index_filename )
-
- #
- # formatting sections
- #
- def section_enter( self, section ):
- print( self.html_header )
-
- print( section_title_header1 + section.name + section_title_header2
- + section.title
- + section_title_footer )
-
- maxwidth = 0
- for b in section.blocks.values():
- if len( b.name ) > maxwidth:
- maxwidth = len( b.name )
-
- width = 70 # XXX magic number
- if maxwidth > 0:
- # print section synopsis
- print( section_synopsis_header )
- print( '<table class="synopsis">' )
-
- columns = width // maxwidth
- if columns < 1:
- columns = 1
-
- count = len( section.block_names )
- # don't handle last entry if it is empty
- if section.block_names[-1] == "/empty/":
- count -= 1
- rows = ( count + columns - 1 ) // columns
-
- for r in range( rows ):
- line = "<tr>"
- for c in range( columns ):
- i = r + c * rows
- line = line + '<td>'
- if i < count:
- name = section.block_names[i]
- if name == "/empty/":
- # it can happen that a complete row is empty, and
- # without a proper `filler' the browser might
- # collapse the row to a much smaller height (or
- # even omit it completely)
- line = line + "&nbsp;"
- else:
- url = name
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- line = ( line + '<a href="#' + url + '">'
- + name + '</a>' )
-
- line = line + '</td>'
- line = line + "</tr>"
- print( line )
-
- print( "</table>" )
- print( section_synopsis_footer )
-
- print( description_header )
- print( self.make_html_items( section.description ) )
- print( description_footer )
-
- def block_enter( self, block ):
- print( block_header )
-
- # place html anchor if needed
- if block.name:
- url = block.name
- # display `foo[bar]' as `foo'
- name = re.sub( r'\[.*\]', '', block.name )
- # normalize url, following RFC 3986
- url = string.replace( url, "[", "(" )
- url = string.replace( url, "]", ")" )
- print( '<h3 id="' + url + '">' + name + '</h3>' )
-
- # dump the block C source lines now
- if block.code:
- header = ''
- for f in self.headers.keys():
- if block.source.filename.find( f ) >= 0:
- header = self.headers[f] + ' (' + f + ')'
- break
-
-# if not header:
-# sys.stderr.write(
-# "WARNING: No header macro for"
-# + " '" + block.source.filename + "'.\n" )
-
- if header:
- print( header_location_header
- + 'Defined in ' + header + '.'
- + header_location_footer )
-
- print( source_header )
- for l in block.code:
- print( self.html_source_quote( l, block.name ) )
- print( source_footer )
-
- def markup_enter( self, markup, block ):
- if markup.tag == "description":
- print( description_header )
- else:
- print( marker_header + markup.tag + marker_inter )
-
- self.print_html_markup( markup )
-
- def markup_exit( self, markup, block ):
- if markup.tag == "description":
- print( description_footer )
- else:
- print( marker_footer )
-
- def block_exit( self, block ):
- print( block_footer_start + self.file_prefix + "index.html"
- + block_footer_middle + self.file_prefix + "toc.html"
- + block_footer_end )
-
- def section_exit( self, section ):
- print( html_footer )
-
- def section_dump_all( self ):
- for section in self.sections:
- self.section_dump( section,
- self.file_prefix + section.name + '.html' )
-
-# eof
diff --git a/src/3rdparty/freetype/src/tools/docmaker/utils.py b/src/3rdparty/freetype/src/tools/docmaker/utils.py
deleted file mode 100644
index f40f1674a0..0000000000
--- a/src/3rdparty/freetype/src/tools/docmaker/utils.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-# utils.py
-#
-# Auxiliary functions for the `docmaker' tool (library file).
-#
-# Copyright 2002-2018 by
-# David Turner.
-#
-# This file is part of the FreeType project, and may only be used,
-# modified, and distributed under the terms of the FreeType project
-# license, LICENSE.TXT. By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-
-
-import string, sys, os, glob, itertools
-
-
-# current output directory
-#
-output_dir = None
-
-
-# A function that generates a sorting key. We want lexicographical order
-# (primary key) except that capital letters are sorted before lowercase
-# ones (secondary key).
-#
-# The primary key is implemented by lowercasing the input. The secondary
-# key is simply the original data appended, character by character. For
-# example, the sort key for `FT_x' is `fFtT__xx', while the sort key for
-# `ft_X' is `fftt__xX'. Since ASCII codes of uppercase letters are
-# numerically smaller than the codes of lowercase letters, `fFtT__xx' gets
-# sorted before `fftt__xX'.
-#
-def index_key( s ):
- return string.join( itertools.chain( *zip( s.lower(), s ) ) )
-
-
-# Sort `input_list', placing the elements of `order_list' in front.
-#
-def sort_order_list( input_list, order_list ):
- new_list = order_list[:]
- for id in input_list:
- if not id in order_list:
- new_list.append( id )
- return new_list
-
-
-# Divert standard output to a given project documentation file. Use
-# `output_dir' to determine the filename location if necessary and save the
-# old stdout handle in a tuple that is returned by this function.
-#
-def open_output( filename ):
- global output_dir
-
- if output_dir and output_dir != "":
- filename = output_dir + os.sep + filename
-
- old_stdout = sys.stdout
- new_file = open( filename, "w" )
- sys.stdout = new_file
-
- return ( new_file, old_stdout )
-
-
-# Close the output that was returned by `open_output'.
-#
-def close_output( output ):
- output[0].close()
- sys.stdout = output[1]
-
-
-# Check output directory.
-#
-def check_output():
- global output_dir
- if output_dir:
- if output_dir != "":
- if not os.path.isdir( output_dir ):
- sys.stderr.write( "argument"
- + " '" + output_dir + "' "
- + "is not a valid directory\n" )
- sys.exit( 2 )
- else:
- output_dir = None
-
-
-def file_exists( pathname ):
- """Check that a given file exists."""
- result = 1
- try:
- file = open( pathname, "r" )
- file.close()
- except:
- result = None
- sys.stderr.write( pathname + " couldn't be accessed\n" )
-
- return result
-
-
-def make_file_list( args = None ):
- """Build a list of input files from command-line arguments."""
- file_list = []
- # sys.stderr.write( repr( sys.argv[1 :] ) + '\n' )
-
- if not args:
- args = sys.argv[1:]
-
- for pathname in args:
- if string.find( pathname, '*' ) >= 0:
- newpath = glob.glob( pathname )
- newpath.sort() # sort files -- this is important because
- # of the order of files
- else:
- newpath = [pathname]
-
- file_list.extend( newpath )
-
- if len( file_list ) == 0:
- file_list = None
- else:
- # now filter the file list to remove non-existing ones
- file_list = filter( file_exists, file_list )
-
- return file_list
-
-# eof
diff --git a/src/3rdparty/freetype/src/tools/ftfuzzer/README b/src/3rdparty/freetype/src/tools/ftfuzzer/README
deleted file mode 100644
index 09d8e9f325..0000000000
--- a/src/3rdparty/freetype/src/tools/ftfuzzer/README
+++ /dev/null
@@ -1,81 +0,0 @@
-ftfuzzer
-========
-
-
-ftfuzzer.cc
------------
-
-This file contains a target function for FreeType fuzzing. It can be
-used with libFuzzer (https://llvm.org/docs/LibFuzzer.html) or
-potentially any other similar fuzzer.
-
-Usage:
-
- 1. Build `libfreetype.a' and `ftfuzzer.cc' using the most recent
- clang compiler with these flags:
-
- # for fuzzer coverage feedback
- -fsanitize-coverage=edge,8bit-counters
- # for bug checking
- -fsanitize=address,signed-integer-overflow,shift
-
- You also need the header files from the `libarchive' library
- (https://www.libarchive.org/) for handling tar files (see file
- `ftmutator.cc' below for more).
-
- 2. Link with `libFuzzer' (it contains `main') and `libarchive'.
-
- 3. Run the fuzzer on some test corpus.
-
-The exact flags and commands may vary.
-
- https://github.com/google/oss-fuzz/tree/master/projects/freetype2
-
-There is a continuous fuzzing bot that runs ftfuzzer.
-
- https://oss-fuzz.com
-
-(You need an account to be able to see coverage reports and the like
-on oss-fuzz.com.)
-
-Check the bot configuration for the most current settings.
-
-
-ftmutator.cc
-------------
-
-FreeType has the ability to `attach' auxiliary files to a font file,
-providing additional information. The main usage is to load AFM files
-for PostScript Type 1 fonts.
-
-However, libFuzzer currently only supports mutation of a single input
-file. For this reason, `ftmutator.cc' contains a custom fuzzer
-mutator that uses an uncompressed tar file archive as the input. The
-first file in such a tarball gets opened by FreeType as a font, all
-other files are treated as input for `FT_Attach_Stream'.
-
-Compilation is similar to `ftfuzzer.c'.
-
-
-runinput.cc
------------
-
-To run the target function on a set of input files, this file contains
-a convenience `main' function. Link it with `ftfuzzer.cc',
-`libfreetype.a', and `libarchive' and run like
-
- ./a.out my_tests_inputs/*
-
-----------------------------------------------------------------------
-
-Copyright 2015-2018 by
-David Turner, Robert Wilhelm, and Werner Lemberg.
-
-This file is part of the FreeType project, and may only be used,
-modified, and distributed under the terms of the FreeType project
-license, LICENSE.TXT. By continuing to use, modify, or distribute
-this file you indicate that you have read the license and understand
-and accept it fully.
-
-
---- end of README ---
diff --git a/src/3rdparty/freetype/src/tools/ftfuzzer/ftfuzzer.cc b/src/3rdparty/freetype/src/tools/ftfuzzer/ftfuzzer.cc
deleted file mode 100644
index acf2bc9820..0000000000
--- a/src/3rdparty/freetype/src/tools/ftfuzzer/ftfuzzer.cc
+++ /dev/null
@@ -1,428 +0,0 @@
-// ftfuzzer.cc
-//
-// A fuzzing function to test FreeType with libFuzzer.
-//
-// Copyright 2015-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
-#if __cplusplus < 201103L
-# error "a C++11 compiler is needed"
-#endif
-
-#include <archive.h>
-#include <archive_entry.h>
-
-#include <assert.h>
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
-
- using namespace std;
-
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-#include FT_CACHE_H
-#include FT_CACHE_CHARMAP_H
-#include FT_CACHE_IMAGE_H
-#include FT_CACHE_SMALL_BITMAPS_H
-#include FT_SYNTHESIS_H
-#include FT_ADVANCES_H
-#include FT_OUTLINE_H
-#include FT_BBOX_H
-#include FT_MODULE_H
-#include FT_DRIVER_H
-#include FT_MULTIPLE_MASTERS_H
-
-
- static FT_Library library;
- static int InitResult;
-
-
- struct FT_Global
- {
- FT_Global()
- {
- InitResult = FT_Init_FreeType( &library );
- if ( InitResult )
- return;
-
- // try to activate Adobe's CFF engine; it might not be the default
- unsigned int cff_hinting_engine = FT_HINTING_ADOBE;
- FT_Property_Set( library,
- "cff",
- "hinting-engine", &cff_hinting_engine );
- }
-
- ~FT_Global()
- {
- FT_Done_FreeType( library );
- }
- };
-
- FT_Global global_ft;
-
-
- // We want to select n values at random (without repetition),
- // with 0 < n <= N. The algorithm is taken from TAoCP, Vol. 2
- // (Algorithm S, selection sampling technique)
- struct Random
- {
- int n;
- int N;
-
- int t; // total number of values so far
- int m; // number of selected values so far
-
- uint32_t r; // the current pseudo-random number
-
- Random( int n_,
- int N_ )
- : n( n_ ),
- N( N_ )
- {
- t = 0;
- m = 0;
-
- // Ideally, this should depend on the input file,
- // for example, taking the sha256 as input;
- // however, this is overkill for fuzzying tests.
- r = 12345;
- }
-
- int get()
- {
- if ( m >= n )
- return -1;
-
- Redo:
- // We can't use `rand': different C libraries might provide
- // different implementations of this function. As a replacement,
- // we use a 32bit version of the `xorshift' algorithm.
- r ^= r << 13;
- r ^= r >> 17;
- r ^= r << 5;
-
- double U = double( r ) / UINT32_MAX;
-
- if ( ( N - t ) * U >= ( n - m ) )
- {
- t++;
- goto Redo;
- }
-
- t++;
- m++;
-
- return t;
- }
- };
-
-
- static int
- archive_read_entry_data( struct archive *ar,
- vector<FT_Byte> *vw )
- {
- int r;
- const FT_Byte* buff;
- size_t size;
- int64_t offset;
-
- for (;;)
- {
- r = archive_read_data_block( ar,
- reinterpret_cast<const void**>( &buff ),
- &size,
- &offset );
- if ( r == ARCHIVE_EOF )
- return ARCHIVE_OK;
- if ( r != ARCHIVE_OK )
- return r;
-
- vw->insert( vw->end(), buff, buff + size );
- }
- }
-
-
- static vector<vector<FT_Byte>>
- parse_data( const uint8_t* data,
- size_t size )
- {
- struct archive_entry* entry;
- int r;
- vector<vector<FT_Byte>> files;
-
- unique_ptr<struct archive,
- decltype ( archive_read_free )*> a( archive_read_new(),
- archive_read_free );
-
- // activate reading of uncompressed tar archives
- archive_read_support_format_tar( a.get() );
-
- // the need for `const_cast' was removed with libarchive commit be4d4dd
- if ( !( r = archive_read_open_memory(
- a.get(),
- const_cast<void*>(static_cast<const void*>( data ) ),
- size ) ) )
- {
- unique_ptr<struct archive,
- decltype ( archive_read_close )*> a_open( a.get(),
- archive_read_close );
-
- // read files contained in archive
- for (;;)
- {
- r = archive_read_next_header( a_open.get(), &entry );
- if ( r == ARCHIVE_EOF )
- break;
- if ( r != ARCHIVE_OK )
- break;
-
- vector<FT_Byte> entry_data;
- r = archive_read_entry_data( a.get(), &entry_data );
- if ( r != ARCHIVE_OK )
- break;
-
- files.push_back( move( entry_data ) );
- }
- }
-
- if ( files.size() == 0 )
- files.emplace_back( data, data + size );
-
- return files;
- }
-
-
- static void
- setIntermediateAxis( FT_Face face )
- {
- // only handle Multiple Masters and GX variation fonts
- if ( !FT_HAS_MULTIPLE_MASTERS( face ) )
- return;
-
- // get variation data for current instance
- FT_MM_Var* variations_ptr = nullptr;
- if ( FT_Get_MM_Var( face, &variations_ptr ) )
- return;
-
- unique_ptr<FT_MM_Var,
- decltype ( free )*> variations( variations_ptr, free );
- vector<FT_Fixed> coords( variations->num_axis );
-
- // select an arbitrary instance
- for ( unsigned int i = 0; i < variations->num_axis; i++ )
- coords[i] = ( variations->axis[i].minimum +
- variations->axis[i].def ) / 2;
-
- if ( FT_Set_Var_Design_Coordinates( face,
- FT_UInt( coords.size() ),
- coords.data() ) )
- return;
- }
-
-
- // the interface function to the libFuzzer library
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size_ )
- {
- assert( !InitResult );
-
- if ( size_ < 1 )
- return 0;
-
- const vector<vector<FT_Byte>>& files = parse_data( data, size_ );
-
- FT_Face face;
- FT_Int32 load_flags = FT_LOAD_DEFAULT;
-#if 0
- FT_Render_Mode render_mode = FT_RENDER_MODE_NORMAL;
-#endif
-
- // We use a conservative approach here, at the cost of calling
- // `FT_New_Face' quite often. The idea is that the fuzzer should be
- // able to try all faces and named instances of a font, expecting that
- // some faces don't work for various reasons, e.g., a broken subfont, or
- // an unsupported NFNT bitmap font in a Mac dfont resource that holds
- // more than a single font.
-
- // get number of faces
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- -1,
- &face ) )
- return 0;
- long num_faces = face->num_faces;
- FT_Done_Face( face );
-
- // loop over up to 20 arbitrarily selected faces
- // from index range [0;num-faces-1]
- long max_face_cnt = num_faces < 20
- ? num_faces
- : 20;
-
- Random faces_pool( (int)max_face_cnt, (int)num_faces );
-
- for ( long face_cnt = 0;
- face_cnt < max_face_cnt;
- face_cnt++ )
- {
- long face_index = faces_pool.get() - 1;
-
- // get number of instances
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- -( face_index + 1 ),
- &face ) )
- continue;
- long num_instances = face->style_flags >> 16;
- FT_Done_Face( face );
-
- // loop over the face without instance (index 0)
- // and up to 20 arbitrarily selected instances
- // from index range [1;num_instances]
- long max_instance_cnt = num_instances < 20
- ? num_instances
- : 20;
-
- Random instances_pool( (int)max_instance_cnt, (int)num_instances );
-
- for ( long instance_cnt = 0;
- instance_cnt <= max_instance_cnt;
- instance_cnt++ )
- {
- long instance_index = 0;
-
- if ( !instance_cnt )
- {
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- face_index,
- &face ) )
- continue;
- }
- else
- {
- instance_index = instances_pool.get();
-
- if ( FT_New_Memory_Face( library,
- files[0].data(),
- (FT_Long)files[0].size(),
- ( instance_index << 16 ) + face_index,
- &face ) )
- continue;
- }
-
- // if we have more than a single input file coming from an archive,
- // attach them (starting with the second file) using the order given
- // in the archive
- for ( size_t files_index = 1;
- files_index < files.size();
- files_index++ )
- {
- FT_Open_Args open_args = {};
- open_args.flags = FT_OPEN_MEMORY;
- open_args.memory_base = files[files_index].data();
- open_args.memory_size = (FT_Long)files[files_index].size();
-
- // the last archive element will be eventually used as the
- // attachment
- FT_Attach_Stream( face, &open_args );
- }
-
- // loop over an arbitrary size for outlines
- // and up to ten arbitrarily selected bitmap strike sizes
- // from the range [0;num_fixed_sizes - 1]
- int max_size_cnt = face->num_fixed_sizes < 10
- ? face->num_fixed_sizes
- : 10;
-
- Random sizes_pool( max_size_cnt, face->num_fixed_sizes );
-
- for ( int size_cnt = 0;
- size_cnt <= max_size_cnt;
- size_cnt++ )
- {
- FT_Int32 flags = load_flags;
-
- int size_index = 0;
-
- if ( !size_cnt )
- {
- // set up 20pt at 72dpi as an arbitrary size
- if ( FT_Set_Char_Size( face, 20 * 64, 20 * 64, 72, 72 ) )
- continue;
- flags |= FT_LOAD_NO_BITMAP;
- }
- else
- {
- // bitmap strikes are not active for font variations
- if ( instance_index )
- continue;
-
- size_index = sizes_pool.get() - 1;
-
- if ( FT_Select_Size( face, size_index ) )
- continue;
- flags |= FT_LOAD_COLOR;
- }
-
- // test MM interface only for a face without a selected instance
- // and without a selected bitmap strike
- if ( !instance_index && !size_cnt )
- setIntermediateAxis( face );
-
- // loop over all glyphs
- for ( unsigned int glyph_index = 0;
- glyph_index < (unsigned int)face->num_glyphs;
- glyph_index++ )
- {
- if ( FT_Load_Glyph( face, glyph_index, flags ) )
- continue;
-
- // Rendering is the most expensive and the least interesting part.
- //
- // if ( FT_Render_Glyph( face->glyph, render_mode) )
- // continue;
- // FT_GlyphSlot_Embolden( face->glyph );
-
-#if 0
- FT_Glyph glyph;
- if ( !FT_Get_Glyph( face->glyph, &glyph ) )
- FT_Done_Glyph( glyph );
-
- FT_Outline* outline = &face->glyph->outline;
- FT_Matrix rot30 = { 0xDDB4, -0x8000, 0x8000, 0xDDB4 };
-
- FT_Outline_Transform( outline, &rot30 );
-
- FT_BBox bbox;
- FT_Outline_Get_BBox( outline, &bbox );
-#endif
- }
- }
- FT_Done_Face( face );
- }
- }
-
- return 0;
- }
-
-
-// END
diff --git a/src/3rdparty/freetype/src/tools/ftfuzzer/ftmutator.cc b/src/3rdparty/freetype/src/tools/ftfuzzer/ftmutator.cc
deleted file mode 100644
index ae4b140404..0000000000
--- a/src/3rdparty/freetype/src/tools/ftfuzzer/ftmutator.cc
+++ /dev/null
@@ -1,314 +0,0 @@
-// ftmutator.cc
-//
-// A custom fuzzer mutator to test for FreeType with libFuzzer.
-//
-// Copyright 2015-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-// Since `tar' is not a valid format for input to FreeType, treat any input
-// that looks like `tar' as multiple files and mutate them separately.
-//
-// In the future, a variation of this may be used to guide mutation on a
-// logically higher level.
-
-
-// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
-#if __cplusplus < 201103L
-# error "a C++11 compiler is needed"
-#endif
-
-#include <cstdint>
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-#include <cstddef>
-#include <cstring>
-#include <iostream>
-
-#include <memory>
-#include <vector>
-
-#include <archive.h>
-#include <archive_entry.h>
-
-#include "FuzzerInterface.h"
-
-
- using namespace std;
-
-
- // This function should be defined by `ftfuzzer.cc'.
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* Data,
- size_t Size );
-
-
- static void
- check_result( struct archive* a,
- int r )
- {
- if ( r == ARCHIVE_OK )
- return;
-
- const char* m = archive_error_string( a );
- write( 1, m, strlen( m ) );
- exit( 1 );
- }
-
-
- static int
- archive_read_entry_data( struct archive *ar,
- vector<uint8_t> *vw )
- {
- int r;
- const uint8_t* buff;
- size_t size;
- int64_t offset;
-
- for (;;)
- {
- r = archive_read_data_block( ar,
- reinterpret_cast<const void**>( &buff ),
- &size,
- &offset );
- if ( r == ARCHIVE_EOF )
- return ARCHIVE_OK;
- if ( r != ARCHIVE_OK )
- return r;
-
- vw->insert( vw->end(), buff, buff + size );
- }
- }
-
-
- static vector<vector<uint8_t>>
- parse_data( const uint8_t* data,
- size_t size )
- {
- struct archive_entry* entry;
- int r;
- vector<vector<uint8_t>> files;
-
- unique_ptr<struct archive,
- decltype ( archive_read_free )*> a( archive_read_new(),
- archive_read_free );
-
- // activate reading of uncompressed tar archives
- archive_read_support_format_tar( a.get() );
-
- // the need for `const_cast' was removed with libarchive commit be4d4dd
- if ( !( r = archive_read_open_memory(
- a.get(),
- const_cast<void*>(static_cast<const void*>( data ) ),
- size ) ) )
- {
- unique_ptr<struct archive,
- decltype ( archive_read_close )*> a_open( a.get(),
- archive_read_close );
-
- // read files contained in archive
- for (;;)
- {
- r = archive_read_next_header( a_open.get(), &entry );
- if ( r == ARCHIVE_EOF )
- break;
- if ( r != ARCHIVE_OK )
- break;
-
- vector<uint8_t> entry_data;
- r = archive_read_entry_data( a.get(), &entry_data );
- if ( entry_data.size() == 0 )
- continue;
-
- files.push_back( move( entry_data ) );
- if ( r != ARCHIVE_OK )
- break;
- }
- }
-
- return files;
- }
-
-
- class FTFuzzer
- : public fuzzer::UserSuppliedFuzzer
- {
-
- public:
- FTFuzzer( fuzzer::FuzzerRandomBase* Rand )
- : fuzzer::UserSuppliedFuzzer( Rand ) {}
-
-
- int
- TargetFunction( const uint8_t* Data,
- size_t Size )
- {
- return LLVMFuzzerTestOneInput( Data, Size );
- }
-
-
- // Custom mutator.
- virtual size_t
- Mutate( uint8_t* Data,
- size_t Size,
- size_t MaxSize )
- {
- vector<vector<uint8_t>> files = parse_data( Data, Size );
-
- // If the file was not recognized as a tar file, treat it as non-tar.
- if ( files.size() == 0 )
- return fuzzer::UserSuppliedFuzzer::Mutate( Data, Size, MaxSize );
-
- // This is somewhat `white box' on tar. The tar format uses 512 byte
- // blocks. One block as header for each file, two empty blocks of 0's
- // at the end. File data is padded to fill its last block.
- size_t used_blocks = files.size() + 2;
- for ( const auto& file : files )
- used_blocks += ( file.size() + 511 ) / 512;
-
- size_t max_blocks = MaxSize / 512;
-
- // If the input is big, it will need to be downsized. If the original
- // tar file was too big, it may have been clipped to fit. In this
- // case it may not be possible to properly write out the data, as
- // there may not be enough space for the trailing two blocks. Start
- // dropping file data or files from the end.
- for ( size_t i = files.size();
- i-- > 1 && used_blocks > max_blocks; )
- {
- size_t blocks_to_free = used_blocks - max_blocks;
- size_t blocks_currently_used_by_file_data =
- ( files[i].size() + 511 ) / 512;
-
- if ( blocks_currently_used_by_file_data >= blocks_to_free )
- {
- files[i].resize( ( blocks_currently_used_by_file_data -
- blocks_to_free ) * 512 );
- used_blocks -= blocks_to_free;
- continue;
- }
-
- files.pop_back();
- used_blocks -= blocks_currently_used_by_file_data + 1;
- }
-
- // If we get down to one file, don't use tar.
- if ( files.size() == 1 )
- {
- memcpy( Data, files[0].data(), files[0].size() );
- return fuzzer::UserSuppliedFuzzer::Mutate( Data,
- files[0].size(),
- MaxSize );
- }
-
- size_t free_blocks = max_blocks - used_blocks;
-
- // Allow each file to use up as much of the currently available space
- // it can. If it uses or gives up blocks, add them or remove them
- // from the pool.
- for ( auto&& file : files )
- {
- size_t blocks_currently_used_by_file = ( file.size() + 511 ) / 512;
- size_t blocks_available = blocks_currently_used_by_file +
- free_blocks;
- size_t max_size = blocks_available * 512;
- size_t data_size = file.size();
-
- file.resize( max_size );
- file.resize( fuzzer::UserSuppliedFuzzer::Mutate( file.data(),
- data_size,
- max_size ) );
-
- size_t blocks_now_used_by_file = ( file.size() + 511 ) / 512;
- free_blocks = free_blocks +
- blocks_currently_used_by_file -
- blocks_now_used_by_file;
- }
-
- unique_ptr<struct archive,
- decltype ( archive_write_free )*> a( archive_write_new(),
- archive_write_free );
-
- check_result( a.get(), archive_write_add_filter_none( a.get() ) );
- check_result( a.get(), archive_write_set_format_ustar( a.get() ) );
-
- // `used' may not be correct until after the archive is closed.
- size_t used = 0xbadbeef;
- check_result( a.get(), archive_write_open_memory( a.get(),
- Data,
- MaxSize,
- &used ) );
-
- {
- unique_ptr<struct archive,
- decltype ( archive_write_close )*> a_open( a.get(),
- archive_write_close );
-
- int file_index = 0;
- for ( const auto& file : files )
- {
- unique_ptr<struct archive_entry,
- decltype ( archive_entry_free )*>
- e( archive_entry_new2( a_open.get() ),
- archive_entry_free );
-
- char name_buffer[100];
- snprintf( name_buffer, 100, "file%d", file_index++ );
-
- archive_entry_set_pathname( e.get(), name_buffer );
- archive_entry_set_size( e.get(), file.size() );
- archive_entry_set_filetype( e.get(), AE_IFREG );
- archive_entry_set_perm( e.get(), 0644 );
-
- check_result( a_open.get(),
- archive_write_header( a_open.get(), e.get() ) );
- archive_write_data( a_open.get(), file.data(), file.size() );
- check_result( a_open.get(),
- archive_write_finish_entry( a_open.get() ) );
- }
- }
-
- return used;
- }
-
-
- // Cross `Data1' and `Data2', write up to `MaxOutSize' bytes into `Out',
- // return the number of bytes written, which should be positive.
- virtual size_t
- CrossOver( const uint8_t* Data1,
- size_t Size1,
- const uint8_t* Data2,
- size_t Size2,
- uint8_t* Out,
- size_t MaxOutSize )
- {
- return fuzzer::UserSuppliedFuzzer::CrossOver( Data1,
- Size1,
- Data2,
- Size2,
- Out,
- MaxOutSize );
- }
-
- }; // end of FTFuzzer class
-
-
- int
- main( int argc,
- char* *argv )
- {
- fuzzer::FuzzerRandomLibc Rand( 0 );
- FTFuzzer F( &Rand );
-
- fuzzer::FuzzerDriver( argc, argv, F );
- }
-
-
-// END
diff --git a/src/3rdparty/freetype/src/tools/ftfuzzer/rasterfuzzer.cc b/src/3rdparty/freetype/src/tools/ftfuzzer/rasterfuzzer.cc
deleted file mode 100644
index c69b95ea0f..0000000000
--- a/src/3rdparty/freetype/src/tools/ftfuzzer/rasterfuzzer.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-// rasterfuzzer.cc
-//
-// A fuzzing function to test FreeType's rasterizers with libFuzzer.
-//
-// Copyright 2016-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-#include <stdint.h>
-
-#include <vector>
-
-
- using namespace std;
-
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_IMAGE_H
-#include FT_OUTLINE_H
-
-
- static FT_Library library;
- static int InitResult;
-
-
- struct FT_Global {
- FT_Global() {
- InitResult = FT_Init_FreeType( &library );
- }
- ~FT_Global() {
- FT_Done_FreeType( library );
- }
- };
-
- FT_Global global_ft;
-
-
- extern "C" int
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size_ )
- {
- unsigned char pixels[4];
-
- FT_Bitmap bitmap_mono = {
- 1, // rows
- 1, // width
- 4, // pitch
- pixels, // buffer
- 2, // num_grays
- FT_PIXEL_MODE_MONO, // pixel_mode
- 0, // palette_mode
- NULL // palette
- };
-
- FT_Bitmap bitmap_gray = {
- 1, // rows
- 1, // width
- 4, // pitch
- pixels, // buffer
- 256, // num_grays
- FT_PIXEL_MODE_GRAY, // pixel_mode
- 0, // palette_mode
- NULL // palette
- };
-
- const size_t vsize = sizeof ( FT_Vector );
- const size_t tsize = sizeof ( char );
-
- // we use the input data for both points and tags
- short n_points = short( size_ / ( vsize + tsize ) );
- if ( n_points <= 2 )
- return 0;
-
- FT_Vector* points = reinterpret_cast<FT_Vector*>(
- const_cast<uint8_t*>(
- data ) );
- char* tags = reinterpret_cast<char*>(
- const_cast<uint8_t*>(
- data + size_t( n_points ) * vsize ) );
-
- // to reduce the number of invalid outlines that are immediately
- // rejected in `FT_Outline_Render', limit values to 2^18 pixels
- // (i.e., 2^24 bits)
- for ( short i = 0; i < n_points; i++ )
- {
- if ( points[i].x == LONG_MIN )
- points[i].x = 0;
- else if ( points[i].x < 0 )
- points[i].x = -( -points[i].x & 0xFFFFFF ) - 1;
- else
- points[i].x = ( points[i].x & 0xFFFFFF ) + 1;
-
- if ( points[i].y == LONG_MIN )
- points[i].y = 0;
- else if ( points[i].y < 0 )
- points[i].y = -( -points[i].y & 0xFFFFFF ) - 1;
- else
- points[i].y = ( points[i].y & 0xFFFFFF ) + 1;
- }
-
- short contours[1];
- contours[0] = n_points - 1;
-
- FT_Outline outline =
- {
- 1, // n_contours
- n_points, // n_points
- points, // points
- tags, // tags
- contours, // contours
- FT_OUTLINE_NONE // flags
- };
-
- FT_Outline_Get_Bitmap( library, &outline, &bitmap_mono );
- FT_Outline_Get_Bitmap( library, &outline, &bitmap_gray );
-
- return 0;
- }
-
-
-// END
diff --git a/src/3rdparty/freetype/src/tools/ftfuzzer/runinput.cc b/src/3rdparty/freetype/src/tools/ftfuzzer/runinput.cc
deleted file mode 100644
index 2b02f57580..0000000000
--- a/src/3rdparty/freetype/src/tools/ftfuzzer/runinput.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// runinput.cc
-//
-// A `main' function for fuzzers like `ftfuzzer.cc'.
-//
-// Copyright 2015-2018 by
-// David Turner, Robert Wilhelm, and Werner Lemberg.
-//
-// This file is part of the FreeType project, and may only be used,
-// modified, and distributed under the terms of the FreeType project
-// license, LICENSE.TXT. By continuing to use, modify, or distribute
-// this file you indicate that you have read the license and
-// understand and accept it fully.
-
-
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-
-
- extern "C" void
- LLVMFuzzerTestOneInput( const uint8_t* data,
- size_t size );
-
-
- unsigned char a[1 << 24];
-
-
- int
- main( int argc,
- char* *argv )
- {
- assert( argc >= 2 );
-
- for ( int i = 1; i < argc; i++ )
- {
- fprintf( stderr, "%s\n", argv[i] );
-
- FILE* f = fopen( argv[i], "r" );
- assert( f );
-
- size_t n = fread( a, 1, sizeof ( a ), f );
- fclose( f );
- if ( !n )
- continue;
-
- unsigned char* b = (unsigned char*)malloc( n );
- memcpy( b, a, n );
-
- LLVMFuzzerTestOneInput( b, n );
-
- free( b );
- }
- }
-
-
-// END
diff --git a/src/3rdparty/freetype/src/tools/ftrandom/Makefile b/src/3rdparty/freetype/src/tools/ftrandom/Makefile
deleted file mode 100644
index 24dc49c563..0000000000
--- a/src/3rdparty/freetype/src/tools/ftrandom/Makefile
+++ /dev/null
@@ -1,45 +0,0 @@
-# TOP_DIR and OBJ_DIR should be set by the user to the right directories,
-# if necessary.
-
-TOP_DIR ?= ../../..
-OBJ_DIR ?= $(TOP_DIR)/objs
-
-
-# The setup below is for gcc on a Unix-like platform,
-# where FreeType has been set up to create a static library
-# (which is the default).
-
-VPATH = $(OBJ_DIR) \
- $(OBJ_DIR)/.libs
-
-SRC_DIR = $(TOP_DIR)/src/tools/ftrandom
-
-CC = gcc
-WFLAGS = -Wmissing-prototypes \
- -Wunused \
- -Wimplicit \
- -Wreturn-type \
- -Wparentheses \
- -pedantic \
- -Wformat \
- -Wchar-subscripts \
- -Wsequence-point
-CFLAGS = $(WFLAGS) \
- -g
-INCLUDES = -I $(TOP_DIR)/include
-LDFLAGS =
-LIBS = -lm \
- -lz \
- -lpng \
- -lbz2 \
- -lharfbuzz
-
-all: $(OBJ_DIR)/ftrandom
-
-$(OBJ_DIR)/ftrandom.o: $(SRC_DIR)/ftrandom.c
- $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $<
-
-$(OBJ_DIR)/ftrandom: $(OBJ_DIR)/ftrandom.o libfreetype.a
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
-
-# EOF
diff --git a/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c b/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c
index ab5cfc98b6..ab62429787 100644
--- a/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c
+++ b/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c
@@ -45,8 +45,8 @@
#include <time.h>
#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_OUTLINE_H
+#include <freetype/freetype.h>
+#include <freetype/ftoutln.h>
#define true 1
#define false 0
diff --git a/src/3rdparty/freetype/src/tools/glnames.py b/src/3rdparty/freetype/src/tools/glnames.py
index e1b613d11b..a19ce178b8 100644
--- a/src/3rdparty/freetype/src/tools/glnames.py
+++ b/src/3rdparty/freetype/src/tools/glnames.py
@@ -6,7 +6,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/tools/make_distribution_archives.py b/src/3rdparty/freetype/src/tools/make_distribution_archives.py
new file mode 100755
index 0000000000..f29eb128c7
--- /dev/null
+++ b/src/3rdparty/freetype/src/tools/make_distribution_archives.py
@@ -0,0 +1,208 @@
+#!/usr/bin/env python3
+"""Generate distribution archives for a given FreeType 2 release."""
+
+from __future__ import print_function
+
+import argparse
+import atexit
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+
+_TOP_DIR = os.path.abspath(os.path.join(__file__, "..", "..", ".."))
+_SCRIPT_DIR = os.path.dirname(os.path.join(_TOP_DIR, "builds", "meson", ""))
+
+
+def get_cmd_output(cmd, cwd=None):
+ """Run a command and return its output as a string."""
+ if cwd is not None:
+ out = subprocess.check_output(cmd, cwd=cwd)
+ else:
+ out = subprocess.check_output(cmd)
+ return out.decode("utf-8").rstrip()
+
+
+def is_git_dir_clean(git_dir):
+ """Return True iff |git_dir| is a git directory in clean state."""
+ out = get_cmd_output(["git", "status", "--porcelain"], cwd=git_dir)
+ return len(out) == 0
+
+
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+
+ parser.add_argument(
+ "--source_dir", default=_TOP_DIR, help="Source directory path."
+ )
+
+ parser.add_argument(
+ "--version",
+ help=(
+ "Specify alternate FreeType version (it is otherwise extracted"
+ " from current sources by default)."
+ ),
+ )
+
+ parser.add_argument(
+ "--gnu-config-dir",
+ help=(
+ "Path of input directory containing recent `config.guess` and"
+ " `config.sub` files from GNU config."
+ ),
+ )
+
+ parser.add_argument(
+ "--build-dir",
+ help="Specify build directory. Only used for debugging this script.",
+ )
+
+ parser.add_argument(
+ "--ignore-clean-check",
+ action="store_true",
+ help=(
+ "Do not check for a clean source git repository. Only used for"
+ " debugging this script."
+ ),
+ )
+
+ parser.add_argument(
+ "output_dir", help="Output directory for generated archives."
+ )
+
+ args = parser.parse_args()
+
+ git_dir = args.source_dir if args.source_dir else _TOP_DIR
+ if not args.ignore_clean_check and not is_git_dir_clean(git_dir):
+ sys.stderr.write(
+ "ERROR: Your git repository is not in a clean state: %s\n"
+ % git_dir
+ )
+ return 1
+
+ if args.version:
+ version = args.version
+ else:
+ # Extract FreeType version from sources.
+ version = get_cmd_output(
+ [
+ sys.executable,
+ os.path.join(_SCRIPT_DIR, "extract_freetype_version.py"),
+ os.path.join(_TOP_DIR, "include", "freetype", "freetype.h"),
+ ]
+ )
+
+ # Determine the build directory. This will be a temporary file that is
+ # cleaned up on script exit by default, unless --build-dir=DIR is used,
+ # in which case we only create and empty the directory, but never remove
+ # its content on exit.
+ if args.build_dir:
+ build_dir = args.build_dir
+ if not os.path.exists(build_dir):
+ os.makedirs(build_dir)
+ else:
+ # Remove anything from the build directory, if any.
+ for item in os.listdir(build_dir):
+ file_path = os.path.join(build_dir, item)
+ if os.path.isdir(file_path):
+ shutil.rmtree(file_path)
+ else:
+ os.unlink(file_path)
+ else:
+ # Create a temporary directory, and ensure it is removed on exit.
+ build_dir = tempfile.mkdtemp(prefix="freetype-dist-")
+
+ def clean_build_dir():
+ shutil.rmtree(build_dir)
+
+ atexit.register(clean_build_dir)
+
+ # Copy all source files known to git into $BUILD_DIR/freetype-$VERSION
+ # with the exception of .gitignore and .mailmap files.
+ source_files = [
+ f
+ for f in get_cmd_output(["git", "ls-files"], cwd=git_dir).split("\n")
+ if os.path.basename(f) not in (".gitignore", ".mailmap")
+ ]
+
+ freetype_dir = "freetype-" + version
+ tmp_src_dir = os.path.join(build_dir, freetype_dir)
+ os.makedirs(tmp_src_dir)
+
+ for src in source_files:
+ dst = os.path.join(tmp_src_dir, src)
+ dst_dir = os.path.dirname(dst)
+ if not os.path.exists(dst_dir):
+ os.makedirs(dst_dir)
+ shutil.copy(os.path.join(git_dir, src), dst)
+
+ # Run autogen.sh in directory.
+ subprocess.check_call(["/bin/sh", "autogen.sh"], cwd=tmp_src_dir)
+ shutil.rmtree(
+ os.path.join(tmp_src_dir, "builds", "unix", "autom4te.cache")
+ )
+
+ # Copy config.guess and config.sub if possible!
+ if args.gnu_config_dir:
+ for f in ("config.guess", "config.sub"):
+ shutil.copy(
+ os.path.join(args.gnu_config_dir, f),
+ os.path.join(tmp_src_dir, "builds", "unix", f),
+ )
+
+ # Generate reference documentation under docs/
+ subprocess.check_call(
+ [
+ sys.executable,
+ os.path.join(_SCRIPT_DIR, "generate_reference_docs.py"),
+ "--input-dir",
+ tmp_src_dir,
+ "--version",
+ version,
+ "--output-dir",
+ os.path.join(tmp_src_dir, "docs"),
+ ]
+ )
+
+ shutil.rmtree(os.path.join(tmp_src_dir, "docs", "markdown"))
+ os.unlink(os.path.join(tmp_src_dir, "docs", "mkdocs.yml"))
+
+ # Generate our archives
+ freetype_tar = freetype_dir + ".tar"
+
+ subprocess.check_call(
+ ["tar", "-H", "ustar", "-chf", freetype_tar, freetype_dir],
+ cwd=build_dir,
+ )
+
+ subprocess.check_call(
+ ["gzip", "-9", "--keep", freetype_tar], cwd=build_dir
+ )
+
+ subprocess.check_call(["xz", "--keep", freetype_tar], cwd=build_dir)
+
+ ftwinversion = "ft" + "".join(version.split("."))
+ subprocess.check_call(
+ ["zip", "-qlr9", ftwinversion + ".zip", freetype_dir], cwd=build_dir
+ )
+
+ # Copy file to output directory now.
+ if not os.path.exists(args.output_dir):
+ os.makedirs(args.output_dir)
+
+ for f in (
+ freetype_tar + ".gz",
+ freetype_tar + ".xz",
+ ftwinversion + ".zip",
+ ):
+ shutil.copy(
+ os.path.join(build_dir, f), os.path.join(args.output_dir, f)
+ )
+
+ # Done!
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/src/3rdparty/freetype/src/tools/test_afm.c b/src/3rdparty/freetype/src/tools/test_afm.c
index 8de619bb03..a4b2268984 100644
--- a/src/3rdparty/freetype/src/tools/test_afm.c
+++ b/src/3rdparty/freetype/src/tools/test_afm.c
@@ -2,10 +2,9 @@
* gcc -DFT2_BUILD_LIBRARY -I../../include -o test_afm test_afm.c \
* -L../../objs/.libs -lfreetype -lz -static
*/
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/freetype.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/psaux.h>
void dump_fontinfo( AFM_FontInfo fi )
{
diff --git a/src/3rdparty/freetype/src/tools/test_bbox.c b/src/3rdparty/freetype/src/tools/test_bbox.c
index 64b82c384b..d9fd932993 100644
--- a/src/3rdparty/freetype/src/tools/test_bbox.c
+++ b/src/3rdparty/freetype/src/tools/test_bbox.c
@@ -1,6 +1,5 @@
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_BBOX_H
+#include <freetype/freetype.h>
+#include <freetype/ftbbox.h>
#include <time.h> /* for clock() */
diff --git a/src/3rdparty/freetype/src/tools/test_trig.c b/src/3rdparty/freetype/src/tools/test_trig.c
index 99ac1cf174..4f3410ab38 100644
--- a/src/3rdparty/freetype/src/tools/test_trig.c
+++ b/src/3rdparty/freetype/src/tools/test_trig.c
@@ -1,6 +1,5 @@
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRIGONOMETRY_H
+#include <freetype/freetype.h>
+#include <freetype/fttrigon.h>
#include <math.h>
#include <stdio.h>
diff --git a/src/3rdparty/freetype/src/tools/update-copyright b/src/3rdparty/freetype/src/tools/update-copyright
index 4a8bf9b0ea..4a8bf9b0ea 100644..100755
--- a/src/3rdparty/freetype/src/tools/update-copyright
+++ b/src/3rdparty/freetype/src/tools/update-copyright
diff --git a/src/3rdparty/freetype/src/tools/update-copyright-year b/src/3rdparty/freetype/src/tools/update-copyright-year
index 2ae50d6f52..c659bbafb8 100644..100755
--- a/src/3rdparty/freetype/src/tools/update-copyright-year
+++ b/src/3rdparty/freetype/src/tools/update-copyright-year
@@ -2,7 +2,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}'
& eval 'exec perl -wS -i "$0" $argv:q'
if 0;
-# Copyright (C) 2015-2019 by
+# Copyright (C) 2015-2020 by
# Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/truetype/Jamfile b/src/3rdparty/freetype/src/truetype/Jamfile
deleted file mode 100644
index 2de63a7b4c..0000000000
--- a/src/3rdparty/freetype/src/truetype/Jamfile
+++ /dev/null
@@ -1,37 +0,0 @@
-# FreeType 2 src/truetype Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) truetype ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = ttdriver
- ttgload
- ttgxvar
- ttinterp
- ttobjs
- ttpic
- ttpload
- ttsubpix
- ;
- }
- else
- {
- _sources = truetype ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/truetype Jamfile
diff --git a/src/3rdparty/freetype/src/truetype/module.mk b/src/3rdparty/freetype/src/truetype/module.mk
index 8a841cc956..2d8d39d1f7 100644
--- a/src/3rdparty/freetype/src/truetype/module.mk
+++ b/src/3rdparty/freetype/src/truetype/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/truetype/rules.mk b/src/3rdparty/freetype/src/truetype/rules.mk
index df8dcd4a4e..2f6fecfc44 100644
--- a/src/3rdparty/freetype/src/truetype/rules.mk
+++ b/src/3rdparty/freetype/src/truetype/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/truetype/truetype.c b/src/3rdparty/freetype/src/truetype/truetype.c
index 84928e7321..41b6808a84 100644
--- a/src/3rdparty/freetype/src/truetype/truetype.c
+++ b/src/3rdparty/freetype/src/truetype/truetype.c
@@ -4,7 +4,7 @@
*
* FreeType TrueType driver component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "ttdriver.c" /* driver interface */
#include "ttgload.c" /* glyph loader */
diff --git a/src/3rdparty/freetype/src/truetype/ttdriver.c b/src/3rdparty/freetype/src/truetype/ttdriver.c
index ff626d53ab..bf830b1418 100644
--- a/src/3rdparty/freetype/src/truetype/ttdriver.c
+++ b/src/3rdparty/freetype/src/truetype/ttdriver.c
@@ -4,7 +4,7 @@
*
* TrueType font driver implementation (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,22 +16,21 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_SERVICE_FONT_FORMAT_H
+#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 FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/services/svmm.h>
+#include <freetype/internal/services/svmetric.h>
#endif
-#include FT_SERVICE_TRUETYPE_ENGINE_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_DRIVER_H
+#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"
diff --git a/src/3rdparty/freetype/src/truetype/ttdriver.h b/src/3rdparty/freetype/src/truetype/ttdriver.h
index 3936c6a4de..ee1438eb6e 100644
--- a/src/3rdparty/freetype/src/truetype/ttdriver.h
+++ b/src/3rdparty/freetype/src/truetype/ttdriver.h
@@ -4,7 +4,7 @@
*
* High-level TrueType driver interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define TTDRIVER_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/truetype/tterrors.h b/src/3rdparty/freetype/src/truetype/tterrors.h
index 5609d28d68..efeafd3a1b 100644
--- a/src/3rdparty/freetype/src/truetype/tterrors.h
+++ b/src/3rdparty/freetype/src/truetype/tterrors.h
@@ -4,7 +4,7 @@
*
* TrueType error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef TTERRORS_H_
#define TTERRORS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX TT_Err_
#define FT_ERR_BASE FT_Mod_Err_TrueType
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* TTERRORS_H_ */
diff --git a/src/3rdparty/freetype/src/truetype/ttgload.c b/src/3rdparty/freetype/src/truetype/ttgload.c
index a04684086b..1dd319dcbf 100644
--- a/src/3rdparty/freetype/src/truetype/ttgload.c
+++ b/src/3rdparty/freetype/src/truetype/ttgload.c
@@ -4,7 +4,7 @@
*
* TrueType Glyph Loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,15 +17,15 @@
#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_OUTLINE_H
-#include FT_DRIVER_H
-#include FT_LIST_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"
@@ -60,7 +60,7 @@
#define SAME_X 0x10
#define Y_POSITIVE 0x20 /* two meanings depending on Y_SHORT_VECTOR */
#define SAME_Y 0x20
-#define OVERLAP_SIMPLE 0x40 /* we ignore this value */
+#define OVERLAP_SIMPLE 0x40 /* retained as FT_OUTLINE_OVERLAP */
/**************************************************************************
@@ -77,7 +77,7 @@
#define WE_HAVE_A_2X2 0x0080
#define WE_HAVE_INSTR 0x0100
#define USE_MY_METRICS 0x0200
-#define OVERLAP_COMPOUND 0x0400 /* we ignore this value */
+#define OVERLAP_COMPOUND 0x0400 /* retained as FT_OUTLINE_OVERLAP */
#define SCALED_COMPONENT_OFFSET 0x0800
#define UNSCALED_COMPONENT_OFFSET 0x1000
@@ -137,6 +137,11 @@
face->horizontal.Descender );
}
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( !face->vertical_info )
+ FT_TRACE5(( " [vertical metrics missing, computing values]\n" ));
+#endif
+
FT_TRACE5(( " advance height (font units): %d\n", *ah ));
FT_TRACE5(( " top side bearing (font units): %d\n", *tsb ));
}
@@ -333,9 +338,9 @@
loader->bbox.yMax = FT_NEXT_SHORT( p );
FT_TRACE5(( " # of contours: %d\n", loader->n_contours ));
- FT_TRACE5(( " xMin: %4d xMax: %4d\n", loader->bbox.xMin,
+ FT_TRACE5(( " xMin: %4ld xMax: %4ld\n", loader->bbox.xMin,
loader->bbox.xMax ));
- FT_TRACE5(( " yMin: %4d yMax: %4d\n", loader->bbox.yMin,
+ FT_TRACE5(( " yMin: %4ld yMax: %4ld\n", loader->bbox.yMin,
loader->bbox.yMax ));
loader->cursor = p;
@@ -489,6 +494,10 @@
}
}
+ /* retain the overlap flag */
+ if ( n_points && outline->tags[0] & OVERLAP_SIMPLE )
+ gloader->base.outline.flags |= FT_OUTLINE_OVERLAP;
+
/* reading the X coordinates */
vec = outline->points;
@@ -1102,9 +1111,16 @@
}
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* if we have a HVAR table, `pp1' and/or `pp2' are already adjusted */
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) ||
- !IS_HINTED( loader->load_flags ) )
+ /* if we have a HVAR table, `pp1' and/or `pp2' */
+ /* are already adjusted but unscaled */
+ if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) &&
+ IS_HINTED( loader->load_flags ) )
+ {
+ loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
+ loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
+ /* pp1.y and pp2.y are always zero */
+ }
+ else
#endif
{
loader->pp1 = outline->points[n_points - 4];
@@ -1112,9 +1128,17 @@
}
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- /* if we have a VVAR table, `pp3' and/or `pp4' are already adjusted */
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) ||
- !IS_HINTED( loader->load_flags ) )
+ /* if we have a VVAR table, `pp3' and/or `pp4' */
+ /* are already adjusted but unscaled */
+ if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) &&
+ IS_HINTED( loader->load_flags ) )
+ {
+ loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
+ loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
+ loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
+ loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
+ }
+ else
#endif
{
loader->pp3 = outline->points[n_points - 2];
@@ -2168,6 +2192,11 @@
goto Exit;
}
}
+
+ /* retain the overlap flag */
+ if ( gloader->base.num_subglyphs &&
+ gloader->base.subglyphs[0].flags & OVERLAP_COMPOUND )
+ gloader->base.outline.flags |= FT_OUTLINE_OVERLAP;
}
/***********************************************************************/
@@ -2287,13 +2316,14 @@
if ( face->vertical_info &&
face->vertical.number_Of_VMetrics > 0 )
{
- top = (FT_Short)FT_DivFix( loader->pp3.y - bbox.yMax,
+ top = (FT_Short)FT_DivFix( SUB_LONG( loader->pp3.y, bbox.yMax ),
y_scale );
if ( loader->pp3.y <= loader->pp4.y )
advance = 0;
else
- advance = (FT_UShort)FT_DivFix( loader->pp3.y - loader->pp4.y,
+ advance = (FT_UShort)FT_DivFix( SUB_LONG( loader->pp3.y,
+ loader->pp4.y ),
y_scale );
}
else
@@ -2965,8 +2995,6 @@
error = compute_glyph_metrics( &loader, glyph_index );
}
- tt_loader_done( &loader );
-
/* Set the `high precision' bit flag. */
/* This is _critical_ to get correct output for monochrome */
/* TrueType glyphs at all sizes using the bytecode interpreter. */
@@ -2975,6 +3003,15 @@
size->metrics->y_ppem < 24 )
glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
+ FT_TRACE1(( " subglyphs = %u, contours = %hd, points = %hd,"
+ " flags = 0x%.3x\n",
+ loader.gloader->base.num_subglyphs,
+ glyph->outline.n_contours,
+ glyph->outline.n_points,
+ glyph->outline.flags ));
+
+ tt_loader_done( &loader );
+
Exit:
#ifdef FT_DEBUG_LEVEL_TRACE
if ( error )
diff --git a/src/3rdparty/freetype/src/truetype/ttgload.h b/src/3rdparty/freetype/src/truetype/ttgload.h
index f1324bc862..8f72cd558c 100644
--- a/src/3rdparty/freetype/src/truetype/ttgload.h
+++ b/src/3rdparty/freetype/src/truetype/ttgload.h
@@ -4,7 +4,7 @@
*
* TrueType Glyph Loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define TTGLOAD_H_
-#include <ft2build.h>
#include "ttobjs.h"
#ifdef TT_USE_BYTECODE_INTERPRETER
diff --git a/src/3rdparty/freetype/src/truetype/ttgxvar.c b/src/3rdparty/freetype/src/truetype/ttgxvar.c
index 78d87dc097..b462263de1 100644
--- a/src/3rdparty/freetype/src/truetype/ttgxvar.c
+++ b/src/3rdparty/freetype/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
*
* TrueType GX Font Variation loader
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams.
*
* This file is part of the FreeType project, and may only be used,
@@ -40,14 +40,14 @@
#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_TRUETYPE_IDS_H
-#include FT_MULTIPLE_MASTERS_H
-#include FT_LIST_H
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/sfnt.h>
+#include <freetype/tttags.h>
+#include <freetype/ttnameid.h>
+#include <freetype/ftmm.h>
+#include <freetype/ftlist.h>
#include "ttpload.h"
#include "ttgxvar.h"
@@ -1470,6 +1470,7 @@
FT_ULong table_len;
FT_ULong gvar_start;
FT_ULong offsetToData;
+ FT_ULong offsets_len;
GX_GVar_Head gvar_head;
static const FT_Frame_Field gvar_fields[] =
@@ -1530,9 +1531,13 @@
goto Exit;
}
- /* rough sanity check: offsets can be either 2 or 4 bytes */
- if ( (FT_ULong)gvar_head.glyphCount *
- ( ( gvar_head.flags & 1 ) ? 4 : 2 ) > table_len )
+ /* offsets can be either 2 or 4 bytes */
+ /* (one more offset than glyphs, to mark size of last) */
+ offsets_len = ( gvar_head.glyphCount + 1 ) *
+ ( ( gvar_head.flags & 1 ) ? 4L : 2L );
+
+ /* rough sanity check */
+ if (offsets_len > table_len )
{
FT_TRACE1(( "ft_var_load_gvar: invalid number of glyphs\n" ));
error = FT_THROW( Invalid_Table );
@@ -1541,81 +1546,102 @@
FT_TRACE2(( "loaded\n" ));
- blend->gvar_size = table_len;
- blend->tuplecount = gvar_head.globalCoordCount;
- blend->gv_glyphcnt = gvar_head.glyphCount;
- offsetToData = gvar_start + gvar_head.offsetToData;
+ blend->gvar_size = table_len;
+ offsetToData = gvar_start + gvar_head.offsetToData;
FT_TRACE5(( "gvar: there %s %d shared coordinate%s:\n",
- blend->tuplecount == 1 ? "is" : "are",
- blend->tuplecount,
- blend->tuplecount == 1 ? "" : "s" ));
+ gvar_head.globalCoordCount == 1 ? "is" : "are",
+ gvar_head.globalCoordCount,
+ gvar_head.globalCoordCount == 1 ? "" : "s" ));
- if ( FT_NEW_ARRAY( blend->glyphoffsets, blend->gv_glyphcnt + 1 ) )
+ if ( FT_FRAME_ENTER( offsets_len ) )
goto Exit;
+ /* offsets (one more offset than glyphs, to mark size of last) */
+ if ( FT_NEW_ARRAY( blend->glyphoffsets, gvar_head.glyphCount + 1 ) )
+ goto Fail2;
+
if ( gvar_head.flags & 1 )
{
- FT_ULong limit = gvar_start + table_len;
-
+ FT_ULong limit = gvar_start + table_len;
+ FT_ULong max_offset = 0;
- /* long offsets (one more offset than glyphs, to mark size of last) */
- if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 4L ) )
- goto Exit;
- for ( i = 0; i <= blend->gv_glyphcnt; i++ )
+ for ( i = 0; i <= gvar_head.glyphCount; i++ )
{
blend->glyphoffsets[i] = offsetToData + FT_GET_ULONG();
- /* use `>', not `>=' */
- if ( blend->glyphoffsets[i] > limit )
+
+ if ( max_offset <= blend->glyphoffsets[i] )
+ max_offset = blend->glyphoffsets[i];
+ else
{
FT_TRACE2(( "ft_var_load_gvar:"
- " invalid glyph variation data offset for index %d\n",
+ " glyph variation data offset %d not monotonic\n",
i ));
- error = FT_THROW( Invalid_Table );
- break;
+ blend->glyphoffsets[i] = max_offset;
+ }
+
+ /* use `<', not `<=' */
+ if ( limit < blend->glyphoffsets[i] )
+ {
+ FT_TRACE2(( "ft_var_load_gvar:"
+ " glyph variation data offset %d out of range\n",
+ i ));
+ blend->glyphoffsets[i] = limit;
}
}
}
else
{
- FT_ULong limit = gvar_start + table_len;
-
+ FT_ULong limit = gvar_start + table_len;
+ FT_ULong max_offset = 0;
- /* short offsets (one more offset than glyphs, to mark size of last) */
- if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 2L ) )
- goto Exit;
- for ( i = 0; i <= blend->gv_glyphcnt; i++ )
+ for ( i = 0; i <= gvar_head.glyphCount; i++ )
{
blend->glyphoffsets[i] = offsetToData + FT_GET_USHORT() * 2;
- /* use `>', not `>=' */
- if ( blend->glyphoffsets[i] > limit )
+
+ if ( max_offset <= blend->glyphoffsets[i] )
+ max_offset = blend->glyphoffsets[i];
+ else
{
FT_TRACE2(( "ft_var_load_gvar:"
- " invalid glyph variation data offset for index %d\n",
+ " glyph variation data offset %d not monotonic\n",
i ));
- error = FT_THROW( Invalid_Table );
- break;
+ blend->glyphoffsets[i] = max_offset;
+ }
+
+ /* use `<', not `<=' */
+ if ( limit < blend->glyphoffsets[i] )
+ {
+ FT_TRACE2(( "ft_var_load_gvar:"
+ " glyph variation data offset %d out of range\n",
+ i ));
+ blend->glyphoffsets[i] = limit;
}
}
}
+ blend->gv_glyphcnt = gvar_head.glyphCount;
+
FT_FRAME_EXIT();
- if ( error )
- goto Exit;
- if ( blend->tuplecount != 0 )
+ if ( gvar_head.globalCoordCount != 0 )
{
- if ( FT_NEW_ARRAY( blend->tuplecoords,
- gvar_head.axisCount * blend->tuplecount ) )
- goto Exit;
+ 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_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) ||
- FT_FRAME_ENTER( blend->tuplecount * gvar_head.axisCount * 2L ) )
- goto Exit;
+ if ( FT_NEW_ARRAY( blend->tuplecoords,
+ gvar_head.axisCount * gvar_head.globalCoordCount ) )
+ goto Fail2;
- for ( i = 0; i < blend->tuplecount; i++ )
+ for ( i = 0; i < gvar_head.globalCoordCount; i++ )
{
FT_TRACE5(( " [ " ));
for ( j = 0; j < (FT_UInt)gvar_head.axisCount; j++ )
@@ -1628,6 +1654,8 @@
FT_TRACE5(( "]\n" ));
}
+ blend->tuplecount = gvar_head.globalCoordCount;
+
FT_TRACE5(( "\n" ));
FT_FRAME_EXIT();
@@ -1635,6 +1663,14 @@
Exit:
return error;
+
+ Fail2:
+ FT_FRAME_EXIT();
+
+ Fail:
+ FT_FREE( blend->glyphoffsets );
+ blend->gv_glyphcnt = 0;
+ goto Exit;
}
@@ -1693,7 +1729,7 @@
if ( tuple_coords[i] == 0 )
{
- FT_TRACE6(( " tuple coordinate is zero, ignore\n", i ));
+ FT_TRACE6(( " tuple coordinate is zero, ignore\n" ));
continue;
}
@@ -2127,7 +2163,7 @@
/* `fvar' table validity check in `sfnt_init_face' */
/* the various `*_size' variables, which we also use as */
- /* offsets into the `mmlen' array, must be multiples of the */
+ /* offsets into the `mmvar' array, must be multiples of the */
/* pointer size (except the last one); without such an */
/* alignment there might be runtime errors due to */
/* misaligned addresses */
@@ -3037,7 +3073,7 @@
TT_Set_Named_Instance( TT_Face face,
FT_UInt instance_index )
{
- FT_Error error = FT_ERR( Invalid_Argument );
+ FT_Error error;
GX_Blend blend;
FT_MM_Var* mmvar;
@@ -3057,7 +3093,10 @@
/* `instance_index' starts with value 1, thus `>' */
if ( instance_index > num_instances )
+ {
+ error = FT_ERR( Invalid_Argument );
goto Exit;
+ }
if ( instance_index > 0 )
{
@@ -3766,7 +3805,7 @@
blend->glyphoffsets[glyph_index + 1] )
{
FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
- " no variation data for this glyph\n" ));
+ " no variation data for glyph %d\n", glyph_index ));
return FT_Err_Ok;
}
diff --git a/src/3rdparty/freetype/src/truetype/ttgxvar.h b/src/3rdparty/freetype/src/truetype/ttgxvar.h
index 07c99b6403..26e89bcf74 100644
--- a/src/3rdparty/freetype/src/truetype/ttgxvar.h
+++ b/src/3rdparty/freetype/src/truetype/ttgxvar.h
@@ -4,7 +4,7 @@
*
* TrueType GX Font Variation loader (specification)
*
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
* David Turner, Robert Wilhelm, Werner Lemberg and George Williams.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define TTGXVAR_H_
-#include <ft2build.h>
#include "ttobjs.h"
diff --git a/src/3rdparty/freetype/src/truetype/ttinterp.c b/src/3rdparty/freetype/src/truetype/ttinterp.c
index 70434e1729..0c3cb10ae8 100644
--- a/src/3rdparty/freetype/src/truetype/ttinterp.c
+++ b/src/3rdparty/freetype/src/truetype/ttinterp.c
@@ -4,7 +4,7 @@
*
* TrueType bytecode interpreter (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,13 +20,12 @@
/* issues; many thanks! */
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_TRIGONOMETRY_H
-#include FT_SYSTEM_H
-#include FT_DRIVER_H
-#include FT_MULTIPLE_MASTERS_H
+#include <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"
@@ -294,7 +293,7 @@
FT_Error error;
- FT_TRACE1(( "Init_Context: new object at 0x%08p\n", exec ));
+ FT_TRACE1(( "Init_Context: new object at %p\n", (void *)exec ));
exec->memory = memory;
exec->callSize = 32;
@@ -319,7 +318,7 @@
return FT_Err_Ok;
Fail_Memory:
- FT_ERROR(( "Init_Context: not enough memory for %p\n", exec ));
+ FT_ERROR(( "Init_Context: not enough memory for %p\n", (void *)exec ));
TT_Done_Context( exec );
return error;
@@ -1956,8 +1955,8 @@
* distance ::
* The distance (not) to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* The compensated distance.
@@ -1965,12 +1964,11 @@
static FT_F26Dot6
Round_None( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
- FT_UNUSED( exc );
-
if ( distance >= 0 )
{
@@ -2000,8 +1998,8 @@
* distance ::
* The distance to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* Rounded distance.
@@ -2009,12 +2007,11 @@
static FT_F26Dot6
Round_To_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
- FT_UNUSED( exc );
-
if ( distance >= 0 )
{
@@ -2046,8 +2043,8 @@
* distance ::
* The distance to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* Rounded distance.
@@ -2055,12 +2052,11 @@
static FT_F26Dot6
Round_To_Half_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
- FT_UNUSED( exc );
-
if ( distance >= 0 )
{
@@ -2094,8 +2090,8 @@
* distance ::
* The distance to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* Rounded distance.
@@ -2103,12 +2099,11 @@
static FT_F26Dot6
Round_Down_To_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
- FT_UNUSED( exc );
-
if ( distance >= 0 )
{
@@ -2139,8 +2134,8 @@
* distance ::
* The distance to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* Rounded distance.
@@ -2148,12 +2143,11 @@
static FT_F26Dot6
Round_Up_To_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
- FT_UNUSED( exc );
-
if ( distance >= 0 )
{
@@ -2185,8 +2179,8 @@
* distance ::
* The distance to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* Rounded distance.
@@ -2194,12 +2188,11 @@
static FT_F26Dot6
Round_To_Double_Grid( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
- FT_UNUSED( exc );
-
if ( distance >= 0 )
{
@@ -2231,8 +2224,8 @@
* distance ::
* The distance to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* Rounded distance.
@@ -2246,8 +2239,9 @@
static FT_F26Dot6
Round_Super( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
@@ -2286,8 +2280,8 @@
* distance ::
* The distance to round.
*
- * compensation ::
- * The engine compensation.
+ * color ::
+ * The engine compensation color.
*
* @Return:
* Rounded distance.
@@ -2299,8 +2293,9 @@
static FT_F26Dot6
Round_Super_45( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ FT_Int color )
{
+ FT_F26Dot6 compensation = exc->tt_metrics.compensations[color];
FT_F26Dot6 val;
@@ -2899,7 +2894,7 @@
Ins_ODD( TT_ExecContext exc,
FT_Long* args )
{
- args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 );
+ args[0] = ( ( exc->func_round( exc, args[0], 3 ) & 127 ) == 64 );
}
@@ -2913,7 +2908,7 @@
Ins_EVEN( TT_ExecContext exc,
FT_Long* args )
{
- args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 );
+ args[0] = ( ( exc->func_round( exc, args[0], 3 ) & 127 ) == 0 );
}
@@ -3243,10 +3238,7 @@
Ins_ROUND( TT_ExecContext exc,
FT_Long* args )
{
- args[0] = exc->func_round(
- exc,
- args[0],
- exc->tt_metrics.compensations[exc->opcode - 0x68] );
+ args[0] = exc->func_round( exc, args[0], exc->opcode & 3 );
}
@@ -3260,10 +3252,7 @@
Ins_NROUND( TT_ExecContext exc,
FT_Long* args )
{
- args[0] = Round_None(
- exc,
- args[0],
- exc->tt_metrics.compensations[exc->opcode - 0x6C] );
+ args[0] = Round_None( exc, args[0], exc->opcode & 3 );
}
@@ -3718,7 +3707,7 @@
/* We will then parse the current table. */
rec = exc->FDefs;
- limit = rec + exc->numFDefs;
+ limit = FT_OFFSET( rec, exc->numFDefs );
n = (FT_ULong)args[0];
for ( ; rec < limit; rec++ )
@@ -3965,6 +3954,9 @@
if ( BOUNDSL( F, exc->maxFunc + 1 ) )
goto Fail;
+ if ( !exc->FDefs )
+ goto Fail;
+
/* Except for some old Apple fonts, all functions in a TrueType */
/* font are defined in increasing order, starting from 0. This */
/* means that we normally have */
@@ -4062,7 +4054,7 @@
/* */
/* If this isn't true, we need to look up the function table. */
- def = exc->FDefs + F;
+ def = FT_OFFSET( exc->FDefs, F );
if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F )
{
/* look up the FDefs table */
@@ -4070,7 +4062,7 @@
def = exc->FDefs;
- limit = def + exc->numFDefs;
+ limit = FT_OFFSET( def, exc->numFDefs );
while ( def < limit && def->opc != F )
def++;
@@ -4150,7 +4142,7 @@
/* First of all, look for the same function in our table */
def = exc->IDefs;
- limit = def + exc->numIDefs;
+ limit = FT_OFFSET( def, exc->numIDefs );
for ( ; def < limit; def++ )
if ( def->opc == (FT_ULong)args[0] )
@@ -5730,9 +5722,6 @@
{
FT_F26Dot6 dx, dy;
FT_UShort point;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_Int B1, B2;
-#endif
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
FT_Bool in_twilight = FT_BOOL( exc->GS.gep0 == 0 ||
exc->GS.gep1 == 0 ||
@@ -5767,8 +5756,12 @@
}
else
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY )
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode )
{
+ FT_Int B1, B2;
+
+
/* If not using ignore_x_mode rendering, allow ZP2 move. */
/* If inline deltas aren't allowed, skip ZP2 move. */
/* If using ignore_x_mode rendering, allow ZP2 point move if: */
@@ -5777,72 +5770,57 @@
/* - the glyph is specifically set to allow SHPIX moves */
/* - the move is on a previously Y-touched point */
- if ( exc->ignore_x_mode )
+ /* save point for later comparison */
+ B1 = exc->zp2.cur[point].y;
+
+ if ( exc->face->sph_compatibility_mode )
{
- /* save point for later comparison */
+ if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
+ dy = FT_PIX_ROUND( B1 + dy ) - B1;
+
+ /* skip post-iup deltas */
+ if ( exc->iup_called &&
+ ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
+ ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
+ goto Skip;
+
+ if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
+ ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
+ ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ||
+ ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
+ Move_Zp2_Point( exc, point, 0, dy, TRUE );
+
+ /* save new point */
if ( exc->GS.freeVector.y != 0 )
- B1 = exc->zp2.cur[point].y;
- else
- B1 = exc->zp2.cur[point].x;
-
- if ( !exc->face->sph_compatibility_mode &&
- exc->GS.freeVector.y != 0 )
{
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
+ B2 = exc->zp2.cur[point].y;
- /* save new point */
- if ( exc->GS.freeVector.y != 0 )
- {
- B2 = exc->zp2.cur[point].y;
-
- /* reverse any disallowed moves */
- if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
- ( B1 & 63 ) != 0 &&
- ( B2 & 63 ) != 0 &&
- B1 != B2 )
- Move_Zp2_Point( exc,
- point,
- NEG_LONG( dx ),
- NEG_LONG( dy ),
- TRUE );
- }
+ /* reverse any disallowed moves */
+ if ( ( B1 & 63 ) == 0 &&
+ ( B2 & 63 ) != 0 &&
+ B1 != B2 )
+ Move_Zp2_Point( exc, point, 0, NEG_LONG( dy ), TRUE );
}
- else if ( exc->face->sph_compatibility_mode )
- {
- if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
- {
- dx = FT_PIX_ROUND( B1 + dx ) - B1;
- dy = FT_PIX_ROUND( B1 + dy ) - B1;
- }
-
- /* skip post-iup deltas */
- if ( exc->iup_called &&
- ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
- ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
- goto Skip;
-
- if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
- ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
- ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ||
- ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
- Move_Zp2_Point( exc, point, 0, dy, TRUE );
-
- /* save new point */
- if ( exc->GS.freeVector.y != 0 )
- {
- B2 = exc->zp2.cur[point].y;
+ }
+ else if ( exc->GS.freeVector.y != 0 )
+ {
+ Move_Zp2_Point( exc, point, dx, dy, TRUE );
- /* reverse any disallowed moves */
- if ( ( B1 & 63 ) == 0 &&
- ( B2 & 63 ) != 0 &&
- B1 != B2 )
- Move_Zp2_Point( exc, point, 0, NEG_LONG( dy ), TRUE );
- }
- }
- else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
+ /* save new point */
+ B2 = exc->zp2.cur[point].y;
+
+ /* reverse any disallowed moves */
+ if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
+ ( B1 & 63 ) != 0 &&
+ ( B2 & 63 ) != 0 &&
+ B1 != B2 )
+ Move_Zp2_Point( exc,
+ point,
+ NEG_LONG( dx ),
+ NEG_LONG( dy ),
+ TRUE );
}
- else
+ else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
Move_Zp2_Point( exc, point, dx, dy, TRUE );
}
else
@@ -5890,22 +5868,8 @@
{
FT_UShort point = 0;
FT_F26Dot6 distance;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_F26Dot6 control_value_cutin = 0;
- FT_F26Dot6 delta;
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
- control_value_cutin = exc->GS.control_value_cutin;
-
- if ( exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- control_value_cutin = 0;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
point = (FT_UShort)args[0];
if ( BOUNDS( point, exc->zp1.n_points ) ||
@@ -5928,16 +5892,25 @@
distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- delta = SUB_LONG( distance, args[1] );
- if ( delta < 0 )
- delta = NEG_LONG( delta );
-
/* subpixel hinting - make MSIRP respect CVT cut-in; */
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- delta >= control_value_cutin )
- distance = args[1];
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 )
+ {
+ FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
+ FT_F26Dot6 delta;
+
+
+ if ( !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ control_value_cutin = 0;
+
+ delta = SUB_LONG( distance, args[1] );
+ if ( delta < 0 )
+ delta = NEG_LONG( delta );
+
+ if ( delta >= control_value_cutin )
+ distance = args[1];
+ }
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
exc->func_move( exc,
@@ -5984,18 +5957,10 @@
if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.freeVector.x != 0 )
- distance = SUB_LONG(
- Round_None( exc,
- cur_dist,
- exc->tt_metrics.compensations[0] ),
- cur_dist );
+ distance = SUB_LONG( Round_None( exc, cur_dist, 3 ), cur_dist );
else
#endif
- distance = SUB_LONG(
- exc->func_round( exc,
- cur_dist,
- exc->tt_metrics.compensations[0] ),
- cur_dist );
+ distance = SUB_LONG( exc->func_round( exc, cur_dist, 3 ), cur_dist );
}
else
distance = 0;
@@ -6021,21 +5986,10 @@
FT_UShort point;
FT_F26Dot6 distance;
FT_F26Dot6 org_dist;
- FT_F26Dot6 control_value_cutin;
- control_value_cutin = exc->GS.control_value_cutin;
- cvtEntry = (FT_ULong)args[1];
- point = (FT_UShort)args[0];
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- exc->GS.freeVector.y == 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- control_value_cutin = 0;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+ cvtEntry = (FT_ULong)args[1];
+ point = (FT_UShort)args[0];
if ( BOUNDS( point, exc->zp0.n_points ) ||
BOUNDSL( cvtEntry, exc->cvtSize ) )
@@ -6079,7 +6033,7 @@
exc->zp0.org[point].x = TT_MulFix14( distance,
exc->GS.freeVector.x );
exc->zp0.org[point].y = TT_MulFix14( distance,
- exc->GS.freeVector.y ),
+ exc->GS.freeVector.y );
exc->zp0.cur[point] = exc->zp0.org[point];
}
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
@@ -6095,9 +6049,19 @@
if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */
{
+ FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
FT_F26Dot6 delta;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ exc->GS.freeVector.y == 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ control_value_cutin = 0;
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
delta = SUB_LONG( distance, org_dist );
if ( delta < 0 )
delta = NEG_LONG( delta );
@@ -6109,14 +6073,10 @@
if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.freeVector.x != 0 )
- distance = Round_None( exc,
- distance,
- exc->tt_metrics.compensations[0] );
+ distance = Round_None( exc, distance, 3 );
else
#endif
- distance = exc->func_round( exc,
- distance,
- exc->tt_metrics.compensations[0] );
+ distance = exc->func_round( exc, distance, 3 );
}
exc->func_move( exc, &exc->zp0, point, SUB_LONG( distance, org_dist ) );
@@ -6138,18 +6098,8 @@
FT_Long* args )
{
FT_UShort point = 0;
- FT_F26Dot6 org_dist, distance, minimum_distance;
-
+ FT_F26Dot6 org_dist, distance;
- minimum_distance = exc->GS.minimum_distance;
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- minimum_distance = 0;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
point = (FT_UShort)args[0];
@@ -6223,27 +6173,29 @@
if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.freeVector.x != 0 )
- distance = Round_None(
- exc,
- org_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
+ distance = Round_None( exc, org_dist, exc->opcode & 3 );
else
#endif
- distance = exc->func_round(
- exc,
- org_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
+ distance = exc->func_round( exc, org_dist, exc->opcode & 3 );
}
else
- distance = Round_None(
- exc,
- org_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
+ distance = Round_None( exc, org_dist, exc->opcode & 3 );
/* minimum distance flag */
if ( ( exc->opcode & 8 ) != 0 )
{
+ FT_F26Dot6 minimum_distance = exc->GS.minimum_distance;
+
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ minimum_distance = 0;
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
if ( org_dist >= 0 )
{
if ( distance < minimum_distance )
@@ -6287,30 +6239,13 @@
FT_F26Dot6 cvt_dist,
distance,
cur_dist,
- org_dist,
- control_value_cutin,
- minimum_distance;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_Int B1 = 0; /* pacify compiler */
- FT_Int B2 = 0;
- FT_Bool reverse_move = FALSE;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+ org_dist;
FT_F26Dot6 delta;
- minimum_distance = exc->GS.minimum_distance;
- control_value_cutin = exc->GS.control_value_cutin;
- point = (FT_UShort)args[0];
- cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
- control_value_cutin = minimum_distance = 0;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+ point = (FT_UShort)args[0];
+ cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) );
/* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
@@ -6346,12 +6281,14 @@
/* twilight points (confirmed by Greg Hitchcock) */
if ( exc->GS.gep1 == 0 )
{
- exc->zp1.org[point].x = exc->zp0.org[exc->GS.rp0].x +
- TT_MulFix14( cvt_dist,
- exc->GS.freeVector.x );
- exc->zp1.org[point].y = exc->zp0.org[exc->GS.rp0].y +
- TT_MulFix14( cvt_dist,
- exc->GS.freeVector.y );
+ exc->zp1.org[point].x = ADD_LONG(
+ exc->zp0.org[exc->GS.rp0].x,
+ TT_MulFix14( cvt_dist,
+ exc->GS.freeVector.x ) );
+ exc->zp1.org[point].y = ADD_LONG(
+ exc->zp0.org[exc->GS.rp0].y,
+ TT_MulFix14( cvt_dist,
+ exc->GS.freeVector.y ) );
exc->zp1.cur[point] = exc->zp1.org[point];
}
@@ -6366,19 +6303,6 @@
cvt_dist = NEG_LONG( cvt_dist );
}
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.y != 0 &&
- ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
- {
- if ( cur_dist < -64 )
- cvt_dist -= 16;
- else if ( cur_dist > 64 && cur_dist < 84 )
- cvt_dist += 32;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
/* control value cut-in and round */
if ( ( exc->opcode & 4 ) != 0 )
@@ -6388,6 +6312,9 @@
if ( exc->GS.gep0 == exc->GS.gep1 )
{
+ FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
+
+
/* XXX: According to Greg Hitchcock, the following wording is */
/* the right one: */
/* */
@@ -6408,10 +6335,7 @@
cvt_dist = org_dist;
}
- distance = exc->func_round(
- exc,
- cvt_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
+ distance = exc->func_round( exc, cvt_dist, exc->opcode & 3 );
}
else
{
@@ -6422,6 +6346,22 @@
exc->ignore_x_mode &&
exc->GS.gep0 == exc->GS.gep1 )
{
+ FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
+
+
+ if ( exc->GS.freeVector.x != 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ control_value_cutin = 0;
+
+ if ( exc->GS.freeVector.y != 0 &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
+ {
+ if ( cur_dist < -64 )
+ cvt_dist -= 16;
+ else if ( cur_dist > 64 && cur_dist < 84 )
+ cvt_dist += 32;
+ }
+
delta = SUB_LONG( cvt_dist, org_dist );
if ( delta < 0 )
delta = NEG_LONG( delta );
@@ -6431,16 +6371,24 @@
}
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- distance = Round_None(
- exc,
- cvt_dist,
- exc->tt_metrics.compensations[exc->opcode & 3] );
+ distance = Round_None( exc, cvt_dist, exc->opcode & 3 );
}
/* minimum distance test */
if ( ( exc->opcode & 8 ) != 0 )
{
+ FT_F26Dot6 minimum_distance = exc->GS.minimum_distance;
+
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ minimum_distance = 0;
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
if ( org_dist >= 0 )
{
if ( distance < minimum_distance )
@@ -6454,60 +6402,51 @@
}
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY )
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.y != 0 )
{
+ FT_Int B1, B2;
+
+
B1 = exc->zp1.cur[point].y;
/* Round moves if necessary */
- if ( exc->ignore_x_mode &&
- exc->GS.freeVector.y != 0 &&
- ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) )
+ if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
distance = FT_PIX_ROUND( B1 + distance - cur_dist ) - B1 + cur_dist;
- if ( exc->ignore_x_mode &&
- exc->GS.freeVector.y != 0 &&
- ( exc->opcode & 16 ) == 0 &&
+ if ( ( exc->opcode & 16 ) == 0 &&
( exc->opcode & 8 ) == 0 &&
( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
distance += 64;
- }
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- exc->func_move( exc,
- &exc->zp1,
- point,
- SUB_LONG( distance, cur_dist ) );
+ exc->func_move( exc,
+ &exc->zp1,
+ point,
+ SUB_LONG( distance, cur_dist ) );
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING_INFINALITY )
- {
B2 = exc->zp1.cur[point].y;
/* Reverse move if necessary */
- if ( exc->ignore_x_mode )
- {
- if ( exc->face->sph_compatibility_mode &&
- exc->GS.freeVector.y != 0 &&
+ if ( ( exc->face->sph_compatibility_mode &&
( B1 & 63 ) == 0 &&
- ( B2 & 63 ) != 0 )
- reverse_move = TRUE;
-
- if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
- exc->GS.freeVector.y != 0 &&
- ( B2 & 63 ) != 0 &&
- ( B1 & 63 ) != 0 )
- reverse_move = TRUE;
- }
-
- if ( reverse_move )
+ ( B2 & 63 ) != 0 ) ||
+ ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
+ ( B1 & 63 ) != 0 &&
+ ( B2 & 63 ) != 0 ) )
exc->func_move( exc,
&exc->zp1,
point,
SUB_LONG( cur_dist, distance ) );
}
-
+ else
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+ exc->func_move( exc,
+ &exc->zp1,
+ point,
+ SUB_LONG( distance, cur_dist ) );
+
Fail:
exc->GS.rp1 = exc->GS.rp0;
@@ -7180,10 +7119,9 @@
FT_UShort A;
FT_ULong C, P;
FT_Long B;
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- FT_UShort B1, B2;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->iup_called &&
@@ -7264,6 +7202,9 @@
/* rules, always skipping deltas in subpixel direction. */
else if ( exc->ignore_x_mode && exc->GS.freeVector.y != 0 )
{
+ FT_UShort B1, B2;
+
+
/* save the y value of the point now; compare after move */
B1 = (FT_UShort)exc->zp0.cur[A].y;
@@ -7715,7 +7656,7 @@
Ins_UNKNOWN( TT_ExecContext exc )
{
TT_DefRecord* def = exc->IDefs;
- TT_DefRecord* limit = def + exc->numIDefs;
+ TT_DefRecord* limit = FT_OFFSET( def, exc->numIDefs );
for ( ; def < limit; def++ )
@@ -7841,7 +7782,7 @@
num_twilight_points = 0xFFFFU;
FT_TRACE5(( "TT_RunIns: Resetting number of twilight points\n"
- " from %d to the more reasonable value %d\n",
+ " from %d to the more reasonable value %ld\n",
exc->twilight.n_points,
num_twilight_points ));
exc->twilight.n_points = (FT_UShort)num_twilight_points;
@@ -7867,7 +7808,7 @@
FT_MAX( 50,
exc->cvtSize / 10 );
else
- exc->loopcall_counter_max = 300 + 8 * exc->cvtSize;
+ exc->loopcall_counter_max = 300 + 22 * exc->cvtSize;
/* as a protection against an unreasonable number of CVT entries */
/* we assume at most 100 control values per glyph for the counter */
@@ -7876,11 +7817,11 @@
exc->loopcall_counter_max = 100 * (FT_ULong)exc->face->root.num_glyphs;
FT_TRACE5(( "TT_RunIns: Limiting total number of loops in LOOPCALL"
- " to %d\n", exc->loopcall_counter_max ));
+ " to %ld\n", exc->loopcall_counter_max ));
exc->neg_jump_counter_max = exc->loopcall_counter_max;
FT_TRACE5(( "TT_RunIns: Limiting total number of backward jumps"
- " to %d\n", exc->neg_jump_counter_max ));
+ " to %ld\n", exc->neg_jump_counter_max ));
/* set PPEM and CVT functions */
exc->tt_metrics.ratio = 0;
@@ -7917,14 +7858,14 @@
/* if tracing level is 7, show current code position */
/* and the first few stack elements also */
FT_TRACE6(( " " ));
- FT_TRACE7(( "%06d ", exc->IP ));
+ FT_TRACE7(( "%06ld ", exc->IP ));
FT_TRACE6(( "%s", opcode_name[exc->opcode] + 2 ));
FT_TRACE7(( "%*s", *opcode_name[exc->opcode] == 'A'
? 2
: 12 - ( *opcode_name[exc->opcode] - '0' ),
"#" ));
for ( n = 1; n <= cnt; n++ )
- FT_TRACE7(( " %d", exc->stack[exc->top - n] ));
+ FT_TRACE7(( " %ld", exc->stack[exc->top - n] ));
FT_TRACE6(( "\n" ));
}
#endif /* FT_DEBUG_LEVEL_TRACE */
@@ -8567,7 +8508,7 @@
case FT_ERR( Invalid_Opcode ):
{
TT_DefRecord* def = exc->IDefs;
- TT_DefRecord* limit = def + exc->numIDefs;
+ TT_DefRecord* limit = FT_OFFSET( def, exc->numIDefs );
for ( ; def < limit; def++ )
@@ -8642,7 +8583,7 @@
} while ( !exc->instruction_trap );
LNo_Error_:
- FT_TRACE4(( " %d instruction%s executed\n",
+ FT_TRACE4(( " %ld instruction%s executed\n",
ins_counter,
ins_counter == 1 ? "" : "s" ));
return FT_Err_Ok;
diff --git a/src/3rdparty/freetype/src/truetype/ttinterp.h b/src/3rdparty/freetype/src/truetype/ttinterp.h
index 0cb1e892fb..6a83705a6c 100644
--- a/src/3rdparty/freetype/src/truetype/ttinterp.h
+++ b/src/3rdparty/freetype/src/truetype/ttinterp.h
@@ -4,7 +4,7 @@
*
* TrueType bytecode interpreter (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,6 @@
#ifndef TTINTERP_H_
#define TTINTERP_H_
-#include <ft2build.h>
#include "ttobjs.h"
@@ -52,7 +51,7 @@ FT_BEGIN_HEADER
typedef FT_F26Dot6
(*TT_Round_Func)( TT_ExecContext exc,
FT_F26Dot6 distance,
- FT_F26Dot6 compensation );
+ FT_Int color );
/* Point displacement along the freedom vector routine */
typedef void
diff --git a/src/3rdparty/freetype/src/truetype/ttobjs.c b/src/3rdparty/freetype/src/truetype/ttobjs.c
index e4775a51ed..06d4569559 100644
--- a/src/3rdparty/freetype/src/truetype/ttobjs.c
+++ b/src/3rdparty/freetype/src/truetype/ttobjs.c
@@ -4,7 +4,7 @@
*
* Objects manager (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_INTERNAL_SFNT_H
-#include FT_DRIVER_H
+#include <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"
@@ -1116,10 +1115,10 @@
/* The Apple specification says that the compensation for */
/* `gray' is always zero. FreeType doesn't do any */
/* compensation at all. */
- tt_metrics->compensations[0] = 0; /* gray */
- tt_metrics->compensations[1] = 0; /* black */
- tt_metrics->compensations[2] = 0; /* white */
- tt_metrics->compensations[3] = 0; /* the same as gray */
+ 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 */
diff --git a/src/3rdparty/freetype/src/truetype/ttobjs.h b/src/3rdparty/freetype/src/truetype/ttobjs.h
index 9fc654d5d1..d986deabc4 100644
--- a/src/3rdparty/freetype/src/truetype/ttobjs.h
+++ b/src/3rdparty/freetype/src/truetype/ttobjs.h
@@ -4,7 +4,7 @@
*
* Objects manager (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define TTOBJS_H_
-#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/tttypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/truetype/ttpic.c b/src/3rdparty/freetype/src/truetype/ttpic.c
deleted file mode 100644
index cdbb80639e..0000000000
--- a/src/3rdparty/freetype/src/truetype/ttpic.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpic.c */
-/* */
-/* The FreeType position independent code services for truetype module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_INTERNAL_OBJECTS_H
-#include "ttpic.h"
-#include "tterrors.h"
-
-
-#ifdef FT_CONFIG_OPTION_PIC
-
- /* forward declaration of PIC init functions from ttdriver.c */
- FT_Error
- FT_Create_Class_tt_services( FT_Library library,
- FT_ServiceDescRec** output_class );
- void
- FT_Destroy_Class_tt_services( FT_Library library,
- FT_ServiceDescRec* clazz );
- void
- FT_Init_Class_tt_service_gx_multi_masters(
- FT_Service_MultiMastersRec* sv_mm );
- void
- FT_Init_Class_tt_service_truetype_glyf(
- FT_Service_TTGlyfRec* sv_ttglyf );
-
-
- void
- tt_driver_class_pic_free( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Memory memory = library->memory;
-
-
- if ( pic_container->truetype )
- {
- TTModulePIC* container = (TTModulePIC*)pic_container->truetype;
-
-
- if ( container->tt_services )
- FT_Destroy_Class_tt_services( library, container->tt_services );
- container->tt_services = NULL;
- FT_FREE( container );
- pic_container->truetype = NULL;
- }
- }
-
-
- FT_Error
- tt_driver_class_pic_init( FT_Library library )
- {
- FT_PIC_Container* pic_container = &library->pic_container;
- FT_Error error = FT_Err_Ok;
- TTModulePIC* container = NULL;
- FT_Memory memory = library->memory;
-
-
- /* allocate pointer, clear and set global container pointer */
- if ( FT_ALLOC( container, sizeof ( *container ) ) )
- return error;
- FT_MEM_SET( container, 0, sizeof ( *container ) );
- pic_container->truetype = container;
-
- /* initialize pointer table - this is how the module usually */
- /* expects this data */
- error = FT_Create_Class_tt_services( library,
- &container->tt_services );
- if ( error )
- goto Exit;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Init_Class_tt_service_gx_multi_masters(
- &container->tt_service_gx_multi_masters );
-#endif
- FT_Init_Class_tt_service_truetype_glyf(
- &container->tt_service_truetype_glyf );
-
- Exit:
- if ( error )
- tt_driver_class_pic_free( library );
- return error;
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/truetype/ttpic.h b/src/3rdparty/freetype/src/truetype/ttpic.h
deleted file mode 100644
index df878ae6f1..0000000000
--- a/src/3rdparty/freetype/src/truetype/ttpic.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttpic.h */
-/* */
-/* The FreeType position independent code services for truetype module. */
-/* */
-/* Copyright 2009-2018 by */
-/* Oran Agra and Mickey Gabel. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef TTPIC_H_
-#define TTPIC_H_
-
-
-#include FT_INTERNAL_PIC_H
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define TT_SERVICES_GET tt_services
-#define TT_SERVICE_GX_MULTI_MASTERS_GET tt_service_gx_multi_masters
-#define TT_SERVICE_METRICS_VARIATIONS_GET tt_service_metrics_variations
-#define TT_SERVICE_TRUETYPE_GLYF_GET tt_service_truetype_glyf
-#define TT_SERVICE_PROPERTIES_GET tt_service_properties
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#include FT_MULTIPLE_MASTERS_H
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_METRICS_VARIATIONS_H
-#include FT_SERVICE_TRUETYPE_GLYF_H
-#include FT_SERVICE_PROPERTIES_H
-
-
-FT_BEGIN_HEADER
-
- typedef struct TTModulePIC_
- {
- FT_ServiceDescRec* tt_services;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Service_MultiMastersRec tt_service_gx_multi_masters;
- FT_Service_MetricsVariationsRec tt_service_metrics_variations;
-#endif
- FT_Service_TTGlyfRec tt_service_truetype_glyf;
- FT_Service_PropertiesRec tt_service_properties;
-
- } TTModulePIC;
-
-
-#define GET_PIC( lib ) \
- ( (TTModulePIC*)((lib)->pic_container.truetype) )
-#define TT_SERVICES_GET \
- ( GET_PIC( library )->tt_services )
-#define TT_SERVICE_METRICS_VARIATIONS_GET \
- ( GET_PIC( library )->tt_service_metrics_variations )
-#define TT_SERVICE_GX_MULTI_MASTERS_GET \
- ( GET_PIC( library )->tt_service_gx_multi_masters )
-#define TT_SERVICE_TRUETYPE_GLYF_GET \
- ( GET_PIC( library )->tt_service_truetype_glyf )
-#define TT_SERVICE_PROPERTIES_GET \
- ( GET_PIC( library )->tt_service_properties )
-
-
- /* see ttpic.c for the implementation */
- void
- tt_driver_class_pic_free( FT_Library library );
-
- FT_Error
- tt_driver_class_pic_init( FT_Library library );
-
-FT_END_HEADER
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-#endif /* TTPIC_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/truetype/ttpload.c b/src/3rdparty/freetype/src/truetype/ttpload.c
index bc954c2dba..b1255b88cd 100644
--- a/src/3rdparty/freetype/src/truetype/ttpload.c
+++ b/src/3rdparty/freetype/src/truetype/ttpload.c
@@ -4,7 +4,7 @@
*
* TrueType-specific tables loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TAGS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/tttags.h>
#include "ttpload.h"
@@ -124,7 +123,7 @@
if ( face->num_locations != (FT_ULong)face->root.num_glyphs + 1 )
{
- FT_TRACE2(( "glyph count mismatch! loca: %d, maxp: %d\n",
+ FT_TRACE2(( "glyph count mismatch! loca: %ld, maxp: %ld\n",
face->num_locations - 1, face->root.num_glyphs ));
/* we only handle the case where `maxp' gives a larger value */
@@ -165,7 +164,7 @@
face->num_locations = (FT_ULong)face->root.num_glyphs + 1;
table_len = new_loca_len;
- FT_TRACE2(( "adjusting num_locations to %d\n",
+ FT_TRACE2(( "adjusting num_locations to %ld\n",
face->num_locations ));
}
else
@@ -173,7 +172,7 @@
face->root.num_glyphs = face->num_locations
? (FT_Long)face->num_locations - 1 : 0;
- FT_TRACE2(( "adjusting num_glyphs to %d\n",
+ FT_TRACE2(( "adjusting num_glyphs to %ld\n",
face->root.num_glyphs ));
}
}
@@ -238,7 +237,7 @@
if ( pos1 > face->glyf_len )
{
FT_TRACE1(( "tt_face_get_location:"
- " too large offset (0x%08lx) found for glyph index %ld,\n"
+ " too large offset (0x%08lx) found for glyph index %d,\n"
" "
" exceeding the end of `glyf' table (0x%08lx)\n",
pos1, gindex, face->glyf_len ));
@@ -252,7 +251,7 @@
if ( gindex == face->num_locations - 2 )
{
FT_TRACE1(( "tt_face_get_location:"
- " too large size (%ld bytes) found for glyph index %ld,\n"
+ " too large size (%ld bytes) found for glyph index %d,\n"
" "
" truncating at the end of `glyf' table to %ld bytes\n",
pos2 - pos1, gindex, face->glyf_len - pos1 ));
@@ -261,7 +260,7 @@
else
{
FT_TRACE1(( "tt_face_get_location:"
- " too large offset (0x%08lx) found for glyph index %ld,\n"
+ " too large offset (0x%08lx) found for glyph index %d,\n"
" "
" exceeding the end of `glyf' table (0x%08lx)\n",
pos2, gindex + 1, face->glyf_len ));
@@ -429,7 +428,7 @@
if ( FT_FRAME_EXTRACT( table_len, face->font_program ) )
goto Exit;
- FT_TRACE2(( "loaded, %12d bytes\n", face->font_program_size ));
+ FT_TRACE2(( "loaded, %12ld bytes\n", face->font_program_size ));
}
Exit:
@@ -492,7 +491,7 @@
if ( FT_FRAME_EXTRACT( table_len, face->cvt_program ) )
goto Exit;
- FT_TRACE2(( "loaded, %12d bytes\n", face->cvt_program_size ));
+ FT_TRACE2(( "loaded, %12ld bytes\n", face->cvt_program_size ));
}
Exit:
@@ -633,7 +632,7 @@
FT_UInt nn;
FT_Byte* result = NULL;
FT_ULong record_size = face->hdmx_record_size;
- FT_Byte* record = face->hdmx_table + 8;
+ FT_Byte* record = FT_OFFSET( face->hdmx_table, 8 );
for ( nn = 0; nn < face->hdmx_record_count; nn++ )
diff --git a/src/3rdparty/freetype/src/truetype/ttpload.h b/src/3rdparty/freetype/src/truetype/ttpload.h
index 022750e324..bb669e0278 100644
--- a/src/3rdparty/freetype/src/truetype/ttpload.h
+++ b/src/3rdparty/freetype/src/truetype/ttpload.h
@@ -4,7 +4,7 @@
*
* TrueType-specific tables loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define TTPLOAD_H_
-#include <ft2build.h>
-#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include <freetype/internal/tttypes.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/truetype/ttsubpix.c b/src/3rdparty/freetype/src/truetype/ttsubpix.c
index 23a2e5b440..56667deaf7 100644
--- a/src/3rdparty/freetype/src/truetype/ttsubpix.c
+++ b/src/3rdparty/freetype/src/truetype/ttsubpix.c
@@ -4,7 +4,7 @@
*
* TrueType Subpixel Hinting.
*
- * Copyright (C) 2010-2019 by
+ * Copyright (C) 2010-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -15,14 +15,13 @@
*
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_TAGS_H
-#include FT_OUTLINE_H
-#include FT_DRIVER_H
+#include <freetype/internal/ftdebug.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 "ttsubpix.h"
diff --git a/src/3rdparty/freetype/src/truetype/ttsubpix.h b/src/3rdparty/freetype/src/truetype/ttsubpix.h
index 4966800c2d..229a6cf055 100644
--- a/src/3rdparty/freetype/src/truetype/ttsubpix.h
+++ b/src/3rdparty/freetype/src/truetype/ttsubpix.h
@@ -4,7 +4,7 @@
*
* TrueType Subpixel Hinting.
*
- * Copyright (C) 2010-2019 by
+ * Copyright (C) 2010-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,7 +19,6 @@
#ifndef TTSUBPIX_H_
#define TTSUBPIX_H_
-#include <ft2build.h>
#include "ttobjs.h"
#include "ttinterp.h"
diff --git a/src/3rdparty/freetype/src/type1/Jamfile b/src/3rdparty/freetype/src/type1/Jamfile
deleted file mode 100644
index 0bcfb2e406..0000000000
--- a/src/3rdparty/freetype/src/type1/Jamfile
+++ /dev/null
@@ -1,35 +0,0 @@
-# FreeType 2 src/type1 Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) type1 ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = t1afm
- t1driver
- t1gload
- t1load
- t1objs
- t1parse
- ;
- }
- else
- {
- _sources = type1 ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/type1 Jamfile
diff --git a/src/3rdparty/freetype/src/type1/module.mk b/src/3rdparty/freetype/src/type1/module.mk
index 2f48c65821..cffb774b45 100644
--- a/src/3rdparty/freetype/src/type1/module.mk
+++ b/src/3rdparty/freetype/src/type1/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type1/rules.mk b/src/3rdparty/freetype/src/type1/rules.mk
index 901169c7a5..213e619247 100644
--- a/src/3rdparty/freetype/src/type1/rules.mk
+++ b/src/3rdparty/freetype/src/type1/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type1/t1afm.c b/src/3rdparty/freetype/src/type1/t1afm.c
index 6841184539..b9cd66b045 100644
--- a/src/3rdparty/freetype/src/type1/t1afm.c
+++ b/src/3rdparty/freetype/src/type1/t1afm.c
@@ -4,7 +4,7 @@
*
* AFM support for Type 1 fonts (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,11 +16,10 @@
*/
-#include <ft2build.h>
#include "t1afm.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/psaux.h>
#include "t1errors.h"
diff --git a/src/3rdparty/freetype/src/type1/t1afm.h b/src/3rdparty/freetype/src/type1/t1afm.h
index a8e6a5495a..edf919c791 100644
--- a/src/3rdparty/freetype/src/type1/t1afm.h
+++ b/src/3rdparty/freetype/src/type1/t1afm.h
@@ -4,7 +4,7 @@
*
* AFM support for Type 1 fonts (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,9 +19,8 @@
#ifndef T1AFM_H_
#define T1AFM_H_
-#include <ft2build.h>
#include "t1objs.h"
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include <freetype/internal/t1types.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type1/t1driver.c b/src/3rdparty/freetype/src/type1/t1driver.c
index 557733da3b..b786a87817 100644
--- a/src/3rdparty/freetype/src/type1/t1driver.c
+++ b/src/3rdparty/freetype/src/type1/t1driver.c
@@ -4,7 +4,7 @@
*
* Type 1 driver interface (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,7 +16,6 @@
*/
-#include <ft2build.h>
#include "t1driver.h"
#include "t1gload.h"
#include "t1load.h"
@@ -27,20 +26,20 @@
#include "t1afm.h"
#endif
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_HASH_H
-#include FT_INTERNAL_POSTSCRIPT_PROPS_H
-#include FT_DRIVER_H
-
-#include FT_SERVICE_MULTIPLE_MASTERS_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
-#include FT_SERVICE_PROPERTIES_H
-#include FT_SERVICE_KERNING_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/fthash.h>
+#include <freetype/internal/ftpsprop.h>
+#include <freetype/ftdriver.h>
+
+#include <freetype/internal/services/svmm.h>
+#include <freetype/internal/services/svgldict.h>
+#include <freetype/internal/services/svfntfmt.h>
+#include <freetype/internal/services/svpostnm.h>
+#include <freetype/internal/services/svpscmap.h>
+#include <freetype/internal/services/svpsinfo.h>
+#include <freetype/internal/services/svprop.h>
+#include <freetype/internal/services/svkern.h>
/**************************************************************************
diff --git a/src/3rdparty/freetype/src/type1/t1driver.h b/src/3rdparty/freetype/src/type1/t1driver.h
index 206f64a0bc..e7eae0b88c 100644
--- a/src/3rdparty/freetype/src/type1/t1driver.h
+++ b/src/3rdparty/freetype/src/type1/t1driver.h
@@ -4,7 +4,7 @@
*
* High-level Type 1 driver interface (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define T1DRIVER_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type1/t1errors.h b/src/3rdparty/freetype/src/type1/t1errors.h
index b35f67a24c..ad03a3d32a 100644
--- a/src/3rdparty/freetype/src/type1/t1errors.h
+++ b/src/3rdparty/freetype/src/type1/t1errors.h
@@ -4,7 +4,7 @@
*
* Type 1 error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
#ifndef T1ERRORS_H_
#define T1ERRORS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -33,7 +33,7 @@
#define FT_ERR_PREFIX T1_Err_
#define FT_ERR_BASE FT_Mod_Err_Type1
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* T1ERRORS_H_ */
diff --git a/src/3rdparty/freetype/src/type1/t1gload.c b/src/3rdparty/freetype/src/type1/t1gload.c
index f9b115b186..d16b81f246 100644
--- a/src/3rdparty/freetype/src/type1/t1gload.c
+++ b/src/3rdparty/freetype/src/type1/t1gload.c
@@ -4,7 +4,7 @@
*
* Type 1 Glyph Loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,15 +16,14 @@
*/
-#include <ft2build.h>
#include "t1gload.h"
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_INTERNAL_CFF_TYPES_H
-#include FT_DRIVER_H
+#include <freetype/internal/ftcalc.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/ftoutln.h>
+#include <freetype/internal/psaux.h>
+#include <freetype/internal/cfftypes.h>
+#include <freetype/ftdriver.h>
#include "t1errors.h"
@@ -334,7 +333,7 @@
else
advances[nn] = 0;
- FT_TRACE5(( " idx %d: advance width %d font unit%s\n",
+ FT_TRACE5(( " idx %d: advance width %ld font unit%s\n",
first + nn,
advances[nn],
advances[nn] == 1 ? "" : "s" ));
diff --git a/src/3rdparty/freetype/src/type1/t1gload.h b/src/3rdparty/freetype/src/type1/t1gload.h
index 80440369dc..9947507c84 100644
--- a/src/3rdparty/freetype/src/type1/t1gload.h
+++ b/src/3rdparty/freetype/src/type1/t1gload.h
@@ -4,7 +4,7 @@
*
* Type 1 Glyph Loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,7 +20,6 @@
#define T1GLOAD_H_
-#include <ft2build.h>
#include "t1objs.h"
diff --git a/src/3rdparty/freetype/src/type1/t1load.c b/src/3rdparty/freetype/src/type1/t1load.c
index 5cffdfaac4..84986007b0 100644
--- a/src/3rdparty/freetype/src/type1/t1load.c
+++ b/src/3rdparty/freetype/src/type1/t1load.c
@@ -4,7 +4,7 @@
*
* Type 1 font loader (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -61,12 +61,12 @@
#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
#include FT_CONFIG_CONFIG_H
-#include FT_MULTIPLE_MASTERS_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_HASH_H
+#include <freetype/ftmm.h>
+#include <freetype/internal/t1types.h>
+#include <freetype/internal/ftcalc.h>
+#include <freetype/internal/fthash.h>
#include "t1load.h"
#include "t1errors.h"
@@ -309,31 +309,55 @@
FT_UInt i;
FT_Fixed axiscoords[T1_MAX_MM_AXIS];
PS_Blend blend = face->blend;
+ FT_UShort* axis_flags;
+
+ FT_Offset mmvar_size;
+ FT_Offset axis_flags_size;
+ FT_Offset axis_size;
error = T1_Get_Multi_Master( face, &mmaster );
if ( error )
goto Exit;
- if ( FT_ALLOC( mmvar,
- sizeof ( FT_MM_Var ) +
- mmaster.num_axis * sizeof ( FT_Var_Axis ) ) )
+
+ /* the various `*_size' variables, which we also use as */
+ /* offsets into the `mmvar' array, must be multiples of the */
+ /* pointer size (except the last one); without such an */
+ /* alignment there might be runtime errors due to */
+ /* misaligned addresses */
+#undef ALIGN_SIZE
+#define ALIGN_SIZE( n ) \
+ ( ( (n) + sizeof (void*) - 1 ) & ~( sizeof (void*) - 1 ) )
+
+ mmvar_size = ALIGN_SIZE( sizeof ( FT_MM_Var ) );
+ axis_flags_size = ALIGN_SIZE( mmaster.num_axis *
+ sizeof ( FT_UShort ) );
+ axis_size = mmaster.num_axis * sizeof ( FT_Var_Axis );
+
+ if ( FT_ALLOC( mmvar, mmvar_size +
+ axis_flags_size +
+ axis_size ) )
goto Exit;
mmvar->num_axis = mmaster.num_axis;
mmvar->num_designs = mmaster.num_designs;
mmvar->num_namedstyles = 0; /* Not supported */
- mmvar->axis = (FT_Var_Axis*)&mmvar[1];
- /* Point to axes after MM_Var struct */
- mmvar->namedstyle = NULL;
+
+ /* while axis flags are meaningless here, we have to provide the array */
+ /* to make `FT_Get_Var_Axis_Flags' work: the function expects that the */
+ /* values directly follow the data of `FT_MM_Var' */
+ axis_flags = (FT_UShort*)( (char*)mmvar + mmvar_size );
+ for ( i = 0; i < mmaster.num_axis; i++ )
+ axis_flags[i] = 0;
+
+ mmvar->axis = (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size );
+ mmvar->namedstyle = NULL;
for ( i = 0; i < mmaster.num_axis; i++ )
{
mmvar->axis[i].name = mmaster.axis[i].name;
mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum );
mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum );
- mmvar->axis[i].def = ( mmvar->axis[i].minimum +
- mmvar->axis[i].maximum ) / 2;
- /* Does not apply. But this value is in range */
mmvar->axis[i].strid = ~0U; /* Does not apply */
mmvar->axis[i].tag = ~0U; /* Does not apply */
@@ -1039,7 +1063,7 @@
map->design_points[p] = T1_ToInt( parser );
map->blend_points [p] = T1_ToFixed( parser, 0 );
- FT_TRACE4(( " [%d %f]",
+ FT_TRACE4(( " [%ld %f]",
map->design_points[p],
(double)map->blend_points[p] / 65536 ));
}
@@ -1731,7 +1755,7 @@
*/
FT_TRACE0(( "parse_subrs: adjusting number of subroutines"
- " (from %d to %d)\n",
+ " (from %d to %ld)\n",
num_subrs,
( parser->root.limit - parser->root.cursor ) >> 3 ));
num_subrs = ( parser->root.limit - parser->root.cursor ) >> 3;
@@ -1902,7 +1926,7 @@
if ( num_glyphs > ( limit - cur ) >> 3 )
{
FT_TRACE0(( "parse_charstrings: adjusting number of glyphs"
- " (from %d to %d)\n",
+ " (from %d to %ld)\n",
num_glyphs, ( limit - cur ) >> 3 ));
num_glyphs = ( limit - cur ) >> 3;
}
diff --git a/src/3rdparty/freetype/src/type1/t1load.h b/src/3rdparty/freetype/src/type1/t1load.h
index 44f835bde2..4396415c20 100644
--- a/src/3rdparty/freetype/src/type1/t1load.h
+++ b/src/3rdparty/freetype/src/type1/t1load.h
@@ -4,7 +4,7 @@
*
* Type 1 font loader (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,10 +20,9 @@
#define T1LOAD_H_
-#include <ft2build.h>
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
-#include FT_MULTIPLE_MASTERS_H
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/psaux.h>
+#include <freetype/ftmm.h>
#include "t1parse.h"
diff --git a/src/3rdparty/freetype/src/type1/t1objs.c b/src/3rdparty/freetype/src/type1/t1objs.c
index 741388a645..3b918b7338 100644
--- a/src/3rdparty/freetype/src/type1/t1objs.c
+++ b/src/3rdparty/freetype/src/type1/t1objs.c
@@ -4,7 +4,7 @@
*
* Type 1 objects manager (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -16,12 +16,11 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_CALC_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_IDS_H
-#include FT_DRIVER_H
+#include <freetype/internal/ftcalc.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/ttnameid.h>
+#include <freetype/ftdriver.h>
#include "t1gload.h"
#include "t1load.h"
@@ -32,8 +31,8 @@
#include "t1afm.h"
#endif
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/services/svpscmap.h>
+#include <freetype/internal/psaux.h>
/**************************************************************************
@@ -347,8 +346,8 @@
if ( error )
goto Exit;
- FT_TRACE2(( "T1_Face_Init: %08p (index %d)\n",
- face,
+ FT_TRACE2(( "T1_Face_Init: %p (index %d)\n",
+ (void *)face,
face_index ));
/* if we just wanted to check the format, leave successfully now */
diff --git a/src/3rdparty/freetype/src/type1/t1objs.h b/src/3rdparty/freetype/src/type1/t1objs.h
index 2161091f77..536be8ba1e 100644
--- a/src/3rdparty/freetype/src/type1/t1objs.h
+++ b/src/3rdparty/freetype/src/type1/t1objs.h
@@ -4,7 +4,7 @@
*
* Type 1 objects manager (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,9 +21,9 @@
#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
+#include <freetype/internal/ftobjs.h>
#include FT_CONFIG_CONFIG_H
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include <freetype/internal/t1types.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type1/t1parse.c b/src/3rdparty/freetype/src/type1/t1parse.c
index 56caeb9e40..74cf38bde7 100644
--- a/src/3rdparty/freetype/src/type1/t1parse.c
+++ b/src/3rdparty/freetype/src/type1/t1parse.c
@@ -4,7 +4,7 @@
*
* Type 1 parser (body).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -33,10 +33,9 @@
*/
-#include <ft2build.h>
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/psaux.h>
#include "t1parse.h"
diff --git a/src/3rdparty/freetype/src/type1/t1parse.h b/src/3rdparty/freetype/src/type1/t1parse.h
index dab8fddc8b..1ea0110b50 100644
--- a/src/3rdparty/freetype/src/type1/t1parse.h
+++ b/src/3rdparty/freetype/src/type1/t1parse.h
@@ -4,7 +4,7 @@
*
* Type 1 parser (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
#define T1PARSE_H_
-#include <ft2build.h>
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_STREAM_H
+#include <freetype/internal/t1types.h>
+#include <freetype/internal/ftstream.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type1/t1tokens.h b/src/3rdparty/freetype/src/type1/t1tokens.h
index 97f2dbe0cf..c09420355d 100644
--- a/src/3rdparty/freetype/src/type1/t1tokens.h
+++ b/src/3rdparty/freetype/src/type1/t1tokens.h
@@ -4,7 +4,7 @@
*
* Type 1 tokenizer (specification).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/type1.c b/src/3rdparty/freetype/src/type1/type1.c
index ce8557a5fb..cadee78994 100644
--- a/src/3rdparty/freetype/src/type1/type1.c
+++ b/src/3rdparty/freetype/src/type1/type1.c
@@ -4,7 +4,7 @@
*
* FreeType Type 1 driver component (body only).
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "t1afm.c"
#include "t1driver.c"
diff --git a/src/3rdparty/freetype/src/type42/Jamfile b/src/3rdparty/freetype/src/type42/Jamfile
deleted file mode 100644
index 6123b35598..0000000000
--- a/src/3rdparty/freetype/src/type42/Jamfile
+++ /dev/null
@@ -1,32 +0,0 @@
-# FreeType 2 src/type42 Jamfile
-#
-# Copyright (C) 2002-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) type42 ;
-
-{
- local _sources ;
-
- if $(FT2_MULTI)
- {
- _sources = t42drivr
- t42objs
- t42parse
- ;
- }
- else
- {
- _sources = type42 ;
- }
-
- Library $(FT2_LIB) : $(_sources).c ;
-}
-
-# end of src/type42 Jamfile
diff --git a/src/3rdparty/freetype/src/type42/module.mk b/src/3rdparty/freetype/src/type42/module.mk
index 9e9d15455b..6ef3a95ead 100644
--- a/src/3rdparty/freetype/src/type42/module.mk
+++ b/src/3rdparty/freetype/src/type42/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2019 by
+# Copyright (C) 2002-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type42/rules.mk b/src/3rdparty/freetype/src/type42/rules.mk
index 9d71f5300e..f4ce91a3b7 100644
--- a/src/3rdparty/freetype/src/type42/rules.mk
+++ b/src/3rdparty/freetype/src/type42/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2019 by
+# Copyright (C) 2002-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type42/t42drivr.c b/src/3rdparty/freetype/src/type42/t42drivr.c
index 09ad632e97..90898b4329 100644
--- a/src/3rdparty/freetype/src/type42/t42drivr.c
+++ b/src/3rdparty/freetype/src/type42/t42drivr.c
@@ -4,7 +4,7 @@
*
* High-level Type 42 driver interface (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -39,12 +39,12 @@
#include "t42drivr.h"
#include "t42objs.h"
#include "t42error.h"
-#include FT_INTERNAL_DEBUG_H
+#include <freetype/internal/ftdebug.h>
-#include FT_SERVICE_FONT_FORMAT_H
-#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_POSTSCRIPT_INFO_H
+#include <freetype/internal/services/svfntfmt.h>
+#include <freetype/internal/services/svgldict.h>
+#include <freetype/internal/services/svpostnm.h>
+#include <freetype/internal/services/svpsinfo.h>
#undef FT_COMPONENT
#define FT_COMPONENT t42
diff --git a/src/3rdparty/freetype/src/type42/t42drivr.h b/src/3rdparty/freetype/src/type42/t42drivr.h
index a35ca28f84..8bf2afc755 100644
--- a/src/3rdparty/freetype/src/type42/t42drivr.h
+++ b/src/3rdparty/freetype/src/type42/t42drivr.h
@@ -4,7 +4,7 @@
*
* High-level Type 42 driver interface (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,8 +20,7 @@
#define T42DRIVR_H_
-#include <ft2build.h>
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type42/t42error.h b/src/3rdparty/freetype/src/type42/t42error.h
index 5fb2143949..e48132ec09 100644
--- a/src/3rdparty/freetype/src/type42/t42error.h
+++ b/src/3rdparty/freetype/src/type42/t42error.h
@@ -4,7 +4,7 @@
*
* Type 42 error codes (specification only).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
#ifndef T42ERROR_H_
#define T42ERROR_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -33,7 +33,7 @@
#define FT_ERR_PREFIX T42_Err_
#define FT_ERR_BASE FT_Mod_Err_Type42
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* T42ERROR_H_ */
diff --git a/src/3rdparty/freetype/src/type42/t42objs.c b/src/3rdparty/freetype/src/type42/t42objs.c
index d31bace451..6acfcdf401 100644
--- a/src/3rdparty/freetype/src/type42/t42objs.c
+++ b/src/3rdparty/freetype/src/type42/t42objs.c
@@ -4,7 +4,7 @@
*
* Type 42 objects manager (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,9 +19,9 @@
#include "t42objs.h"
#include "t42parse.h"
#include "t42error.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_LIST_H
-#include FT_TRUETYPE_IDS_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftlist.h>
+#include <freetype/ttnameid.h>
#undef FT_COMPONENT
diff --git a/src/3rdparty/freetype/src/type42/t42objs.h b/src/3rdparty/freetype/src/type42/t42objs.h
index 98300cf348..69f5cffd44 100644
--- a/src/3rdparty/freetype/src/type42/t42objs.h
+++ b/src/3rdparty/freetype/src/type42/t42objs.h
@@ -4,7 +4,7 @@
*
* Type 42 objects manager (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,15 +19,14 @@
#ifndef T42OBJS_H_
#define T42OBJS_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_TYPE1_TYPES_H
+#include <freetype/freetype.h>
+#include <freetype/t1tables.h>
+#include <freetype/internal/t1types.h>
#include "t42types.h"
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DRIVER_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdrv.h>
+#include <freetype/internal/services/svpscmap.h>
+#include <freetype/internal/pshints.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type42/t42parse.c b/src/3rdparty/freetype/src/type42/t42parse.c
index c47a77786d..98507699fa 100644
--- a/src/3rdparty/freetype/src/type42/t42parse.c
+++ b/src/3rdparty/freetype/src/type42/t42parse.c
@@ -4,7 +4,7 @@
*
* Type 42 font parser (body).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,9 +18,9 @@
#include "t42parse.h"
#include "t42error.h"
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/psaux.h>
/**************************************************************************
@@ -826,7 +826,7 @@
if ( loader->num_glyphs > ( limit - parser->root.cursor ) >> 2 )
{
FT_TRACE0(( "t42_parse_charstrings: adjusting number of glyphs"
- " (from %d to %d)\n",
+ " (from %d to %ld)\n",
loader->num_glyphs,
( limit - parser->root.cursor ) >> 2 ));
loader->num_glyphs = ( limit - parser->root.cursor ) >> 2;
diff --git a/src/3rdparty/freetype/src/type42/t42parse.h b/src/3rdparty/freetype/src/type42/t42parse.h
index 0c7bb48496..2ccf052d78 100644
--- a/src/3rdparty/freetype/src/type42/t42parse.h
+++ b/src/3rdparty/freetype/src/type42/t42parse.h
@@ -4,7 +4,7 @@
*
* Type 42 font parser (specification).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,7 +21,7 @@
#include "t42objs.h"
-#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include <freetype/internal/psaux.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type42/t42types.h b/src/3rdparty/freetype/src/type42/t42types.h
index a258144ec3..ba0cc21429 100644
--- a/src/3rdparty/freetype/src/type42/t42types.h
+++ b/src/3rdparty/freetype/src/type42/t42types.h
@@ -4,7 +4,7 @@
*
* Type 42 font data types (specification only).
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,11 +20,10 @@
#define T42TYPES_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TYPE1_TABLES_H
-#include FT_INTERNAL_TYPE1_TYPES_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include <freetype/freetype.h>
+#include <freetype/t1tables.h>
+#include <freetype/internal/t1types.h>
+#include <freetype/internal/pshints.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/freetype/src/type42/type42.c b/src/3rdparty/freetype/src/type42/type42.c
index 0cb7b77eec..012559e2fd 100644
--- a/src/3rdparty/freetype/src/type42/type42.c
+++ b/src/3rdparty/freetype/src/type42/type42.c
@@ -4,7 +4,7 @@
*
* FreeType Type 42 driver component.
*
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -17,7 +17,6 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include <ft2build.h>
#include "t42drivr.c"
#include "t42objs.c"
diff --git a/src/3rdparty/freetype/src/winfonts/Jamfile b/src/3rdparty/freetype/src/winfonts/Jamfile
deleted file mode 100644
index 4b92226159..0000000000
--- a/src/3rdparty/freetype/src/winfonts/Jamfile
+++ /dev/null
@@ -1,16 +0,0 @@
-# FreeType 2 src/winfonts Jamfile
-#
-# Copyright (C) 2001-2019 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT. By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-SubDir FT2_TOP $(FT2_SRC_DIR) winfonts ;
-
-Library $(FT2_LIB) : winfnt.c ;
-
-# end of src/winfonts Jamfile
diff --git a/src/3rdparty/freetype/src/winfonts/fnterrs.h b/src/3rdparty/freetype/src/winfonts/fnterrs.h
index af29307c75..550de386fc 100644
--- a/src/3rdparty/freetype/src/winfonts/fnterrs.h
+++ b/src/3rdparty/freetype/src/winfonts/fnterrs.h
@@ -4,7 +4,7 @@
*
* Win FNT/FON error codes (specification only).
*
- * Copyright (C) 2001-2019 by
+ * Copyright (C) 2001-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
#ifndef FNTERRS_H_
#define FNTERRS_H_
-#include FT_MODULE_ERRORS_H
+#include <freetype/ftmoderr.h>
#undef FTERRORS_H_
@@ -34,7 +34,7 @@
#define FT_ERR_PREFIX FNT_Err_
#define FT_ERR_BASE FT_Mod_Err_Winfonts
-#include FT_ERRORS_H
+#include <freetype/fterrors.h>
#endif /* FNTERRS_H_ */
diff --git a/src/3rdparty/freetype/src/winfonts/module.mk b/src/3rdparty/freetype/src/winfonts/module.mk
index 82fb0151f8..4614c55fd0 100644
--- a/src/3rdparty/freetype/src/winfonts/module.mk
+++ b/src/3rdparty/freetype/src/winfonts/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/winfonts/rules.mk b/src/3rdparty/freetype/src/winfonts/rules.mk
index 998d49bc9f..e73ef5ea99 100644
--- a/src/3rdparty/freetype/src/winfonts/rules.mk
+++ b/src/3rdparty/freetype/src/winfonts/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2019 by
+# Copyright (C) 1996-2020 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/winfonts/winfnt.c b/src/3rdparty/freetype/src/winfonts/winfnt.c
index 2d771be2cc..e83312d166 100644
--- a/src/3rdparty/freetype/src/winfonts/winfnt.c
+++ b/src/3rdparty/freetype/src/winfonts/winfnt.c
@@ -4,7 +4,7 @@
*
* FreeType font driver for Windows FNT/FON files
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
* Copyright 2003 Huw D M Davies for Codeweavers
* Copyright 2007 Dmitry Timoshkov for Codeweavers
@@ -18,17 +18,16 @@
*/
-#include <ft2build.h>
-#include FT_WINFONTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_TRUETYPE_IDS_H
+#include <freetype/ftwinfnt.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ttnameid.h>
#include "winfnt.h"
#include "fnterrs.h"
-#include FT_SERVICE_WINFNT_H
-#include FT_SERVICE_FONT_FORMAT_H
+#include <freetype/internal/services/svwinfnt.h>
+#include <freetype/internal/services/svfntfmt.h>
/**************************************************************************
*
@@ -331,7 +330,7 @@
{
FT_TRACE2(( "invalid alignment shift count for resource data\n" ));
error = FT_THROW( Invalid_File_Format );
- goto Exit;
+ goto Exit1;
}
@@ -597,6 +596,10 @@
Exit:
return error;
+
+ Exit1:
+ FT_FRAME_EXIT();
+ goto Exit;
}
diff --git a/src/3rdparty/freetype/src/winfonts/winfnt.h b/src/3rdparty/freetype/src/winfonts/winfnt.h
index b628ad4c42..3367c7715e 100644
--- a/src/3rdparty/freetype/src/winfonts/winfnt.h
+++ b/src/3rdparty/freetype/src/winfonts/winfnt.h
@@ -4,7 +4,7 @@
*
* FreeType font driver for Windows FNT/FON files
*
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
* Copyright 2007 Dmitry Timoshkov for Codeweavers
*
@@ -21,9 +21,8 @@
#define WINFNT_H_
-#include <ft2build.h>
-#include FT_WINFONTS_H
-#include FT_INTERNAL_DRIVER_H
+#include <freetype/ftwinfnt.h>
+#include <freetype/internal/ftdrv.h>
FT_BEGIN_HEADER
diff --git a/src/3rdparty/libpng/pngrutil.c b/src/3rdparty/libpng/pngrutil.c
index d5fa08c397..4db3de990b 100644
--- a/src/3rdparty/libpng/pngrutil.c
+++ b/src/3rdparty/libpng/pngrutil.c
@@ -2087,10 +2087,8 @@ png_handle_eXIf(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
}
}
- if (png_crc_finish(png_ptr, 0) != 0)
- return;
-
- png_set_eXIf_1(png_ptr, info_ptr, length, info_ptr->eXIf_buf);
+ if (png_crc_finish(png_ptr, 0) == 0)
+ png_set_eXIf_1(png_ptr, info_ptr, length, info_ptr->eXIf_buf);
png_free(png_ptr, info_ptr->eXIf_buf);
info_ptr->eXIf_buf = NULL;
diff --git a/src/3rdparty/libpng/qtpatches.diff b/src/3rdparty/libpng/qtpatches.diff
index 7ec8388ed0..272532cdd8 100644
--- a/src/3rdparty/libpng/qtpatches.diff
+++ b/src/3rdparty/libpng/qtpatches.diff
@@ -46,3 +46,20 @@ index 583c26f9bd..2ab9b70d73 100644
# define PNG_ABORT() ExitProcess(0)
# else
# define PNG_ABORT() abort()
+diff --git a/src/3rdparty/libpng/pngrutil.c b/src/3rdparty/libpng/pngrutil.c
+index d5fa08c397..4db3de990b 100644
+--- a/src/3rdparty/libpng/pngrutil.c
++++ b/src/3rdparty/libpng/pngrutil.c
+@@ -2087,10 +2087,8 @@ png_handle_eXIf(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
+ }
+ }
+
+- if (png_crc_finish(png_ptr, 0) != 0)
+- return;
+-
+- png_set_eXIf_1(png_ptr, info_ptr, length, info_ptr->eXIf_buf);
++ if (png_crc_finish(png_ptr, 0) == 0)
++ png_set_eXIf_1(png_ptr, info_ptr, length, info_ptr->eXIf_buf);
+
+ png_free(png_ptr, info_ptr->eXIf_buf);
+ info_ptr->eXIf_buf = NULL;
diff --git a/src/3rdparty/md4c/md4c.c b/src/3rdparty/md4c/md4c.c
index 0119e7a55a..e4ab47c2f6 100644
--- a/src/3rdparty/md4c/md4c.c
+++ b/src/3rdparty/md4c/md4c.c
@@ -581,7 +581,7 @@ struct MD_UNICODE_FOLD_INFO_tag {
#define R(cp_min, cp_max) ((cp_min) | 0x40000000), ((cp_max) | 0x80000000)
#define S(cp) (cp)
/* Unicode "Pc", "Pd", "Pe", "Pf", "Pi", "Po", "Ps" categories.
- * (generated by scripts/build_punct_map.py) */
+ * (generated by scripts/build_folding_map.py) */
static const unsigned FOLD_MAP_1[] = {
R(0x0041,0x005a), S(0x00b5), R(0x00c0,0x00d6), R(0x00d8,0x00de), R(0x0100,0x012e), R(0x0132,0x0136),
R(0x0139,0x0147), R(0x014a,0x0176), S(0x0178), R(0x0179,0x017d), S(0x017f), S(0x0181), S(0x0182),
@@ -3601,6 +3601,34 @@ md_resolve_links(MD_CTX* ctx, const MD_LINE* lines, int n_lines)
}
md_analyze_link_contents(ctx, lines, n_lines, opener_index+1, closer_index);
+
+ /* If the link text is formed by nothing but permissive autolink,
+ * suppress the autolink.
+ * See https://github.com/mity/md4c/issues/152 for more info. */
+ if(ctx->parser.flags & MD_FLAG_PERMISSIVEAUTOLINKS) {
+ MD_MARK* first_nested;
+ MD_MARK* last_nested;
+
+ first_nested = opener + 1;
+ while(first_nested->ch == _T('D') && first_nested < closer)
+ first_nested++;
+
+ last_nested = closer - 1;
+ while(first_nested->ch == _T('D') && last_nested > opener)
+ last_nested--;
+
+ if((first_nested->flags & MD_MARK_RESOLVED) &&
+ first_nested->beg == opener->end &&
+ ISANYOF_(first_nested->ch, _T("@:.")) &&
+ first_nested->next == (last_nested - ctx->marks) &&
+ last_nested->end == closer->beg)
+ {
+ first_nested->ch = _T('D');
+ first_nested->flags &= ~MD_MARK_RESOLVED;
+ last_nested->ch = _T('D');
+ last_nested->flags &= ~MD_MARK_RESOLVED;
+ }
+ }
}
opener_index = next_index;
@@ -5491,7 +5519,7 @@ md_push_container(MD_CTX* ctx, const MD_CONTAINER* container)
}
static int
-md_enter_child_containers(MD_CTX* ctx, int n_children, unsigned data)
+md_enter_child_containers(MD_CTX* ctx, int n_children)
{
int i;
int ret = 0;
@@ -5516,7 +5544,7 @@ md_enter_child_containers(MD_CTX* ctx, int n_children, unsigned data)
MD_CHECK(md_push_container_bytes(ctx,
(is_ordered_list ? MD_BLOCK_OL : MD_BLOCK_UL),
- c->start, data, MD_BLOCK_CONTAINER_OPENER));
+ c->start, c->ch, MD_BLOCK_CONTAINER_OPENER));
MD_CHECK(md_push_container_bytes(ctx, MD_BLOCK_LI,
c->task_mark_off,
(c->is_task ? CH(c->task_mark_off) : 0),
@@ -5745,25 +5773,30 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
/* Check whether we are HTML block continuation. */
if(pivot_line->type == MD_LINE_HTML && ctx->html_block_type > 0) {
- int html_block_type;
+ if(n_parents < ctx->n_containers) {
+ /* HTML block is implicitly ended if the enclosing container
+ * block ends. */
+ ctx->html_block_type = 0;
+ } else {
+ int html_block_type;
- html_block_type = md_is_html_block_end_condition(ctx, off, &off);
- if(html_block_type > 0) {
- MD_ASSERT(html_block_type == ctx->html_block_type);
+ html_block_type = md_is_html_block_end_condition(ctx, off, &off);
+ if(html_block_type > 0) {
+ MD_ASSERT(html_block_type == ctx->html_block_type);
- /* Make sure this is the last line of the block. */
- ctx->html_block_type = 0;
+ /* Make sure this is the last line of the block. */
+ ctx->html_block_type = 0;
- /* Some end conditions serve as blank lines at the same time. */
- if(html_block_type == 6 || html_block_type == 7) {
- line->type = MD_LINE_BLANK;
- line->indent = 0;
- break;
+ /* Some end conditions serve as blank lines at the same time. */
+ if(html_block_type == 6 || html_block_type == 7) {
+ line->type = MD_LINE_BLANK;
+ line->indent = 0;
+ break;
+ }
}
- }
- if(n_parents == ctx->n_containers) {
line->type = MD_LINE_HTML;
+ n_parents = ctx->n_containers;
break;
}
}
@@ -5827,7 +5860,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
/* Check whether we are Setext underline. */
if(line->indent < ctx->code_indent_offset && pivot_line->type == MD_LINE_TEXT
- && (CH(off) == _T('=') || CH(off) == _T('-'))
+ && off < ctx->size && ISANYOF2(off, _T('='), _T('-'))
&& (n_parents == ctx->n_containers))
{
unsigned level;
@@ -5840,7 +5873,10 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for thematic break line. */
- if(line->indent < ctx->code_indent_offset && ISANYOF(off, _T("-_*")) && off >= hr_killer) {
+ if(line->indent < ctx->code_indent_offset
+ && off < ctx->size && off >= hr_killer
+ && ISANYOF(off, _T("-_*")))
+ {
if(md_is_hr_line(ctx, off, &off, &hr_killer)) {
line->type = MD_LINE_HR;
break;
@@ -5904,7 +5940,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
{
/* Noop. List mark followed by a blank line cannot interrupt a paragraph. */
} else if(pivot_line->type == MD_LINE_TEXT && n_parents == ctx->n_containers &&
- (container.ch == _T('.') || container.ch == _T(')')) && container.start != 1)
+ ISANYOF2_(container.ch, _T('.'), _T(')')) && container.start != 1)
{
/* Noop. Ordered list cannot interrupt a paragraph unless the start index is 1. */
} else {
@@ -5945,7 +5981,9 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for ATX header. */
- if(line->indent < ctx->code_indent_offset && CH(off) == _T('#')) {
+ if(line->indent < ctx->code_indent_offset &&
+ off < ctx->size && CH(off) == _T('#'))
+ {
unsigned level;
if(md_is_atxheader_line(ctx, off, &line->beg, &off, &level)) {
@@ -5956,7 +5994,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check whether we are starting code fence. */
- if(CH(off) == _T('`') || CH(off) == _T('~')) {
+ if(off < ctx->size && ISANYOF2(off, _T('`'), _T('~'))) {
if(md_is_opening_code_fence(ctx, off, &off)) {
line->type = MD_LINE_FENCEDCODE;
line->data = 1;
@@ -5965,7 +6003,8 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for start of raw HTML block. */
- if(CH(off) == _T('<') && !(ctx->parser.flags & MD_FLAG_NOHTMLBLOCKS))
+ if(off < ctx->size && CH(off) == _T('<')
+ && !(ctx->parser.flags & MD_FLAG_NOHTMLBLOCKS))
{
ctx->html_block_type = md_is_html_block_start_condition(ctx, off);
@@ -5986,9 +6025,9 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for table underline. */
- if((ctx->parser.flags & MD_FLAG_TABLES) && pivot_line->type == MD_LINE_TEXT &&
- (CH(off) == _T('|') || CH(off) == _T('-') || CH(off) == _T(':')) &&
- n_parents == ctx->n_containers)
+ if((ctx->parser.flags & MD_FLAG_TABLES) && pivot_line->type == MD_LINE_TEXT
+ && off < ctx->size && ISANYOF3(off, _T('|'), _T('-'), _T(':'))
+ && n_parents == ctx->n_containers)
{
unsigned col_count;
@@ -6120,7 +6159,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
if(n_children > 0)
- MD_CHECK(md_enter_child_containers(ctx, n_children, line->data));
+ MD_CHECK(md_enter_child_containers(ctx, n_children));
abort:
return ret;
diff --git a/src/3rdparty/md4c/qt_attribution.json b/src/3rdparty/md4c/qt_attribution.json
index 024cf5ed80..29c0666f2d 100644
--- a/src/3rdparty/md4c/qt_attribution.json
+++ b/src/3rdparty/md4c/qt_attribution.json
@@ -9,7 +9,7 @@
"License": "MIT License",
"LicenseId": "MIT",
"LicenseFile": "LICENSE.md",
- "Version": "0.4.6",
- "DownloadLocation": "https://github.com/mity/md4c/releases/tag/release-0.4.6",
+ "Version": "0.4.8",
+ "DownloadLocation": "https://github.com/mity/md4c/releases/tag/release-0.4.8",
"Copyright": "Copyright © 2016-2020 Martin Mitáš"
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java b/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java
index e6de354ac4..9dba7f2c2b 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
** Contact: https://www.qt.io/licensing/
**
@@ -39,21 +40,7 @@
package org.qtproject.qt5.android;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.xmlpull.v1.XmlPullParser;
-
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
@@ -64,9 +51,9 @@ import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.NinePatch;
import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.RectF;
import android.graphics.PorterDuff;
+import android.graphics.Rect;
+import android.graphics.drawable.AnimatedStateListDrawable;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ClipDrawable;
@@ -77,26 +64,53 @@ import android.graphics.drawable.GradientDrawable.Orientation;
import android.graphics.drawable.InsetDrawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.NinePatchDrawable;
+import android.graphics.drawable.RippleDrawable;
import android.graphics.drawable.RotateDrawable;
import android.graphics.drawable.ScaleDrawable;
import android.graphics.drawable.StateListDrawable;
+import android.graphics.drawable.VectorDrawable;
import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.TypedValue;
import android.util.Xml;
+import android.view.ContextThemeWrapper;
import android.view.inputmethod.EditorInfo;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.xmlpull.v1.XmlPullParser;
-public class ExtractStyle {
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
- native static int[] extractChunkInfo20(byte[] chunkData);
- native static int[] extractNativeChunkInfo20(long nativeChunk);
- Class<?> styleableClass = getClass("android.R$styleable");
- Class<?> rippleDrawableClass = getClass("android.graphics.drawable.RippleDrawable");
- Class<?> animatedStateListDrawableClass = getClass("android.graphics.drawable.AnimatedStateListDrawable");
- Class<?> vectorDrawableClass = getClass("android.graphics.drawable.VectorDrawable");
+public class ExtractStyle {
+ // This used to be retrieved from android.R.styleable.ViewDrawableStates field via reflection,
+ // but since the access to that is restricted, we need to have hard-coded here.
+ final int[] viewDrawableStatesState = new int[]{
+ android.R.attr.state_focused,
+ android.R.attr.state_window_focused,
+ android.R.attr.state_enabled,
+ android.R.attr.state_selected,
+ android.R.attr.state_pressed,
+ android.R.attr.state_activated,
+ android.R.attr.state_accelerated,
+ android.R.attr.state_hovered,
+ android.R.attr.state_drag_can_accept,
+ android.R.attr.state_drag_hovered
+ };
final int[] EMPTY_STATE_SET = {};
final int[] ENABLED_STATE_SET = {android.R.attr.state_enabled};
final int[] FOCUSED_STATE_SET = {android.R.attr.state_focused};
@@ -109,10 +123,10 @@ public class ExtractStyle {
final int[] FOCUSED_SELECTED_STATE_SET = stateSetUnion(FOCUSED_STATE_SET, SELECTED_STATE_SET);
final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(FOCUSED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
final int[] SELECTED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
- final int[] ENABLED_FOCUSED_SELECTED_STATE_SET = stateSetUnion(ENABLED_FOCUSED_STATE_SET, SELECTED_STATE_SET);
+ final int[] ENABLED_FOCUSED_SELECTED_STATE_SET = stateSetUnion(ENABLED_FOCUSED_STATE_SET, SELECTED_STATE_SET);
final int[] ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(ENABLED_FOCUSED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(ENABLED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
- final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(FOCUSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
+ final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(FOCUSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
final int[] ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(ENABLED_FOCUSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
final int[] PRESSED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(PRESSED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
final int[] PRESSED_SELECTED_STATE_SET = stateSetUnion(PRESSED_STATE_SET, SELECTED_STATE_SET);
@@ -129,230 +143,98 @@ public class ExtractStyle {
final int[] PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(PRESSED_ENABLED_FOCUSED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
final int[] PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET = stateSetUnion(PRESSED_ENABLED_FOCUSED_STATE_SET, SELECTED_STATE_SET);
final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = stateSetUnion(PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET);
-
-
- final int View_background = getField(styleableClass,"View_background");
- final int View_padding = getField(styleableClass,"View_padding");
- final int View_paddingLeft = getField(styleableClass,"View_paddingLeft");
- final int View_paddingTop = getField(styleableClass,"View_paddingTop");
- final int View_paddingRight = getField(styleableClass,"View_paddingRight");
- final int View_paddingBottom = getField(styleableClass,"View_paddingBottom");
- final int View_scrollX = getField(styleableClass,"View_scrollX");
- final int View_scrollY = getField(styleableClass,"View_scrollY");
- final int View_id = getField(styleableClass,"View_id");
- final int View_tag = getField(styleableClass,"View_tag");
- final int View_fitsSystemWindows = getField(styleableClass,"View_fitsSystemWindows");
- final int View_focusable = getField(styleableClass,"View_focusable");
- final int View_focusableInTouchMode = getField(styleableClass,"View_focusableInTouchMode");
- final int View_clickable = getField(styleableClass,"View_clickable");
- final int View_longClickable = getField(styleableClass,"View_longClickable");
- final int View_saveEnabled = getField(styleableClass,"View_saveEnabled");
- final int View_duplicateParentState = getField(styleableClass,"View_duplicateParentState");
- final int View_visibility = getField(styleableClass,"View_visibility");
- final int View_drawingCacheQuality = getField(styleableClass,"View_drawingCacheQuality");
- final int View_contentDescription = getField(styleableClass,"View_contentDescription");
- final int View_soundEffectsEnabled = getField(styleableClass,"View_soundEffectsEnabled");
- final int View_hapticFeedbackEnabled = getField(styleableClass,"View_hapticFeedbackEnabled");
- final int View_scrollbars = getField(styleableClass,"View_scrollbars");
- final int View_fadingEdge = getField(styleableClass,"View_fadingEdge");
- final int View_scrollbarStyle = getField(styleableClass,"View_scrollbarStyle");
- final int View_scrollbarFadeDuration = getField(styleableClass,"View_scrollbarFadeDuration");
- final int View_scrollbarDefaultDelayBeforeFade = getField(styleableClass,"View_scrollbarDefaultDelayBeforeFade");
- final int View_scrollbarSize = getField(styleableClass,"View_scrollbarSize");
- final int View_scrollbarThumbHorizontal = getField(styleableClass,"View_scrollbarThumbHorizontal");
- final int View_scrollbarThumbVertical = getField(styleableClass,"View_scrollbarThumbVertical");
- final int View_scrollbarTrackHorizontal = getField(styleableClass,"View_scrollbarTrackHorizontal");
- final int View_scrollbarTrackVertical = getField(styleableClass,"View_scrollbarTrackVertical");
- final int View_isScrollContainer = getField(styleableClass,"View_isScrollContainer");
- final int View_keepScreenOn = getField(styleableClass,"View_keepScreenOn");
- final int View_filterTouchesWhenObscured = getField(styleableClass,"View_filterTouchesWhenObscured");
- final int View_nextFocusLeft = getField(styleableClass,"View_nextFocusLeft");
- final int View_nextFocusRight = getField(styleableClass,"View_nextFocusRight");
- final int View_nextFocusUp = getField(styleableClass,"View_nextFocusUp");
- final int View_nextFocusDown = getField(styleableClass,"View_nextFocusDown");
- final int View_minWidth = getField(styleableClass,"View_minWidth");
- final int View_minHeight = getField(styleableClass,"View_minHeight");
- final int View_onClick = getField(styleableClass,"View_onClick");
- final int View_overScrollMode = getField(styleableClass,"View_overScrollMode");
- final int View_paddingStart = getField(styleableClass,"View_paddingStart");
- final int View_paddingEnd = getField(styleableClass,"View_paddingEnd");
-
- final int TextAppearance_textColorHighlight = getField(styleableClass,"TextAppearance_textColorHighlight");
- final int TextAppearance_textColor = getField(styleableClass,"TextAppearance_textColor");
- final int TextAppearance_textColorHint = getField(styleableClass,"TextAppearance_textColorHint");
- final int TextAppearance_textColorLink = getField(styleableClass,"TextAppearance_textColorLink");
- final int TextAppearance_textSize = getField(styleableClass,"TextAppearance_textSize");
- final int TextAppearance_typeface = getField(styleableClass,"TextAppearance_typeface");
- final int TextAppearance_textStyle = getField(styleableClass,"TextAppearance_textStyle");
- final int TextAppearance_textAllCaps = getField(styleableClass,"TextAppearance_textAllCaps");
- final int TextView_editable = getField(styleableClass,"TextView_editable");
- final int TextView_inputMethod = getField(styleableClass,"TextView_inputMethod");
- final int TextView_numeric = getField(styleableClass,"TextView_numeric");
- final int TextView_digits = getField(styleableClass,"TextView_digits");
- final int TextView_phoneNumber = getField(styleableClass,"TextView_phoneNumber");
- final int TextView_autoText = getField(styleableClass,"TextView_autoText");
- final int TextView_capitalize = getField(styleableClass,"TextView_capitalize");
- final int TextView_bufferType = getField(styleableClass,"TextView_bufferType");
- final int TextView_selectAllOnFocus = getField(styleableClass,"TextView_selectAllOnFocus");
- final int TextView_autoLink = getField(styleableClass,"TextView_autoLink");
- final int TextView_linksClickable = getField(styleableClass,"TextView_linksClickable");
- final int TextView_drawableLeft = getField(styleableClass,"TextView_drawableLeft");
- final int TextView_drawableTop = getField(styleableClass,"TextView_drawableTop");
- final int TextView_drawableRight = getField(styleableClass,"TextView_drawableRight");
- final int TextView_drawableBottom = getField(styleableClass,"TextView_drawableBottom");
- final int TextView_drawableStart = getField(styleableClass,"TextView_drawableStart");
- final int TextView_drawableEnd = getField(styleableClass,"TextView_drawableEnd");
- final int TextView_drawablePadding = getField(styleableClass,"TextView_drawablePadding");
- final int TextView_textCursorDrawable = getField(styleableClass,"TextView_textCursorDrawable");
- final int TextView_maxLines = getField(styleableClass,"TextView_maxLines");
- final int TextView_maxHeight = getField(styleableClass,"TextView_maxHeight");
- final int TextView_lines = getField(styleableClass,"TextView_lines");
- final int TextView_height = getField(styleableClass,"TextView_height");
- final int TextView_minLines = getField(styleableClass,"TextView_minLines");
- final int TextView_minHeight = getField(styleableClass,"TextView_minHeight");
- final int TextView_maxEms = getField(styleableClass,"TextView_maxEms");
- final int TextView_maxWidth = getField(styleableClass,"TextView_maxWidth");
- final int TextView_ems = getField(styleableClass,"TextView_ems");
- final int TextView_width = getField(styleableClass,"TextView_width");
- final int TextView_minEms = getField(styleableClass,"TextView_minEms");
- final int TextView_minWidth = getField(styleableClass,"TextView_minWidth");
- final int TextView_gravity = getField(styleableClass,"TextView_gravity");
- final int TextView_hint = getField(styleableClass,"TextView_hint");
- final int TextView_text = getField(styleableClass,"TextView_text");
- final int TextView_scrollHorizontally = getField(styleableClass,"TextView_scrollHorizontally");
- final int TextView_singleLine = getField(styleableClass,"TextView_singleLine");
- final int TextView_ellipsize = getField(styleableClass,"TextView_ellipsize");
- final int TextView_marqueeRepeatLimit = getField(styleableClass,"TextView_marqueeRepeatLimit");
- final int TextView_includeFontPadding = getField(styleableClass,"TextView_includeFontPadding");
- final int TextView_cursorVisible = getField(styleableClass,"TextView_cursorVisible");
- final int TextView_maxLength = getField(styleableClass,"TextView_maxLength");
- final int TextView_textScaleX = getField(styleableClass,"TextView_textScaleX");
- final int TextView_freezesText = getField(styleableClass,"TextView_freezesText");
- final int TextView_shadowColor = getField(styleableClass,"TextView_shadowColor");
- final int TextView_shadowDx = getField(styleableClass,"TextView_shadowDx");
- final int TextView_shadowDy = getField(styleableClass,"TextView_shadowDy");
- final int TextView_shadowRadius = getField(styleableClass,"TextView_shadowRadius");
- final int TextView_enabled = getField(styleableClass,"TextView_enabled");
- final int TextView_textColorHighlight = getField(styleableClass,"TextView_textColorHighlight");
- final int TextView_textColor = getField(styleableClass,"TextView_textColor");
- final int TextView_textColorHint = getField(styleableClass,"TextView_textColorHint");
- final int TextView_textColorLink = getField(styleableClass,"TextView_textColorLink");
- final int TextView_textSize = getField(styleableClass,"TextView_textSize");
- final int TextView_typeface = getField(styleableClass,"TextView_typeface");
- final int TextView_textStyle = getField(styleableClass,"TextView_textStyle");
- final int TextView_password = getField(styleableClass,"TextView_password");
- final int TextView_lineSpacingExtra = getField(styleableClass,"TextView_lineSpacingExtra");
- final int TextView_lineSpacingMultiplier = getField(styleableClass,"TextView_lineSpacingMultiplier");
- final int TextView_inputType = getField(styleableClass,"TextView_inputType");
- final int TextView_imeOptions = getField(styleableClass,"TextView_imeOptions");
- final int TextView_imeActionLabel = getField(styleableClass,"TextView_imeActionLabel");
- final int TextView_imeActionId = getField(styleableClass,"TextView_imeActionId");
- final int TextView_privateImeOptions = getField(styleableClass,"TextView_privateImeOptions");
- final int TextView_textSelectHandleLeft = getField(styleableClass,"TextView_textSelectHandleLeft");
- final int TextView_textSelectHandleRight = getField(styleableClass,"TextView_textSelectHandleRight");
- final int TextView_textSelectHandle = getField(styleableClass,"TextView_textSelectHandle");
- final int TextView_textIsSelectable = getField(styleableClass,"TextView_textIsSelectable");
- final int TextView_textAllCaps = getField(styleableClass,"TextView_textAllCaps");
-
- final int ImageView_src = getField(styleableClass,"ImageView_src");
- final int ImageView_baselineAlignBottom = getField(styleableClass,"ImageView_baselineAlignBottom");
- final int ImageView_adjustViewBounds = getField(styleableClass,"ImageView_adjustViewBounds");
- final int ImageView_maxWidth = getField(styleableClass,"ImageView_maxWidth");
- final int ImageView_maxHeight = getField(styleableClass,"ImageView_maxHeight");
- final int ImageView_scaleType = getField(styleableClass,"ImageView_scaleType");
- final int ImageView_tint = getField(styleableClass,"ImageView_tint");
- final int ImageView_cropToPadding = getField(styleableClass,"ImageView_cropToPadding");
-
final Resources.Theme m_theme;
final String m_extractPath;
- Context m_context;
final int defaultBackgroundColor;
final int defaultTextColor;
final boolean m_minimal;
+ final int[] DrawableStates = { android.R.attr.state_active, android.R.attr.state_checked,
+ android.R.attr.state_enabled, android.R.attr.state_focused,
+ android.R.attr.state_pressed, android.R.attr.state_selected,
+ android.R.attr.state_window_focused, 16908288, android.R.attr.state_multiline,
+ android.R.attr.state_activated, android.R.attr.state_accelerated};
+ final String[] DrawableStatesLabels = {"active", "checked", "enabled", "focused", "pressed",
+ "selected", "window_focused", "background", "multiline", "activated", "accelerated"};
+ final String[] DisableDrawableStatesLabels = {"inactive", "unchecked", "disabled",
+ "not_focused", "no_pressed", "unselected", "window_not_focused", "background",
+ "multiline", "activated", "accelerated"};
+ final String[] sScaleTypeArray = {
+ "MATRIX",
+ "FIT_XY",
+ "FIT_START",
+ "FIT_CENTER",
+ "FIT_END",
+ "CENTER",
+ "CENTER_CROP",
+ "CENTER_INSIDE"
+ };
+ Context m_context;
+ private final HashMap<String, DrawableCache> m_drawableCache = new HashMap<>();
- class SimpleJsonWriter
- {
- private OutputStreamWriter m_writer;
- private boolean m_addComma = false;
- private int m_indentLevel = 0;
- public SimpleJsonWriter(String filePath) throws FileNotFoundException
- {
- m_writer = new OutputStreamWriter(new FileOutputStream(filePath));
- }
-
- public void close() throws IOException
- {
- m_writer.close();
- }
-
- private void writeIndent() throws IOException
- {
- m_writer.write(" ", 0, m_indentLevel);
- }
-
- SimpleJsonWriter beginObject() throws IOException
- {
- writeIndent();
- m_writer.write("{\n");
- ++m_indentLevel;
- m_addComma = false;
- return this;
- }
-
- SimpleJsonWriter endObject() throws IOException
- {
- m_writer.write("\n");
- writeIndent();
- m_writer.write("}\n");
- --m_indentLevel;
- m_addComma = false;
- return this;
- }
-
- SimpleJsonWriter name(String name) throws IOException
- {
- if (m_addComma) {
- m_writer.write(",\n");
- }
- writeIndent();
- m_writer.write(JSONObject.quote(name) + ": ");
- m_addComma = true;
- return this;
- }
-
- SimpleJsonWriter value(JSONObject value) throws IOException
- {
- m_writer.write(value.toString());
- return this;
- }
- }
+ public ExtractStyle(Context context, String extractPath, boolean minimal) {
+ m_minimal = minimal;
+ m_extractPath = extractPath + "/";
+ boolean dirCreated = new File(m_extractPath).mkdirs();
+ if (!dirCreated)
+ Log.w(QtNative.QtTAG, "Cannot create Android style directory.");
+ m_context = context;
+ m_theme = context.getTheme();
+ TypedArray array = m_theme.obtainStyledAttributes(new int[]{
+ android.R.attr.colorBackground,
+ android.R.attr.textColorPrimary,
+ android.R.attr.textColor
+ });
+ defaultBackgroundColor = array.getColor(0, 0);
+ int textColor = array.getColor(1, 0xFFFFFF);
+ if (textColor == 0xFFFFFF)
+ textColor = array.getColor(2, 0xFFFFFF);
+ defaultTextColor = textColor;
+ array.recycle();
- class FakeCanvas extends Canvas {
- int[] chunkData = null;
- class Size {
- public int s,e;
- Size(int start, int end)
- {
- s=start;
- e=end;
+ try {
+ SimpleJsonWriter jsonWriter = new SimpleJsonWriter(m_extractPath + "style.json");
+ jsonWriter.beginObject();
+ try {
+ jsonWriter.name("defaultStyle").value(extractDefaultPalette());
+ extractWindow(jsonWriter);
+ jsonWriter.name("buttonStyle").value(extractTextAppearanceInformation(android.R.attr.buttonStyle, "QPushButton"));
+ jsonWriter.name("spinnerStyle").value(extractTextAppearanceInformation(android.R.attr.spinnerStyle, "QComboBox"));
+ extractProgressBar(jsonWriter, android.R.attr.progressBarStyleHorizontal, "progressBarStyleHorizontal", "QProgressBar");
+ extractProgressBar(jsonWriter, android.R.attr.progressBarStyleLarge, "progressBarStyleLarge", null);
+ extractProgressBar(jsonWriter, android.R.attr.progressBarStyleSmall, "progressBarStyleSmall", null);
+ extractProgressBar(jsonWriter, android.R.attr.progressBarStyle, "progressBarStyle", null);
+ extractAbsSeekBar(jsonWriter);
+ extractSwitch(jsonWriter);
+ extractCompoundButton(jsonWriter, android.R.attr.checkboxStyle, "checkboxStyle", "QCheckBox");
+ jsonWriter.name("editTextStyle").value(extractTextAppearanceInformation(android.R.attr.editTextStyle, "QLineEdit"));
+ extractCompoundButton(jsonWriter, android.R.attr.radioButtonStyle, "radioButtonStyle", "QRadioButton");
+ jsonWriter.name("textViewStyle").value(extractTextAppearanceInformation(android.R.attr.textViewStyle, "QWidget"));
+ jsonWriter.name("scrollViewStyle").value(extractTextAppearanceInformation(android.R.attr.scrollViewStyle, "QAbstractScrollArea"));
+ extractListView(jsonWriter);
+ jsonWriter.name("listSeparatorTextViewStyle").value(extractTextAppearanceInformation(android.R.attr.listSeparatorTextViewStyle, null));
+ extractItemsStyle(jsonWriter);
+ extractCompoundButton(jsonWriter, android.R.attr.buttonStyleToggle, "buttonStyleToggle", null);
+ extractCalendar(jsonWriter);
+ extractToolBar(jsonWriter);
+ jsonWriter.name("actionButtonStyle").value(extractTextAppearanceInformation(android.R.attr.actionButtonStyle, "QToolButton"));
+ jsonWriter.name("actionBarTabTextStyle").value(extractTextAppearanceInformation(android.R.attr.actionBarTabTextStyle, null));
+ jsonWriter.name("actionBarTabStyle").value(extractTextAppearanceInformation(android.R.attr.actionBarTabStyle, null));
+ jsonWriter.name("actionOverflowButtonStyle").value(extractImageViewInformation(android.R.attr.actionOverflowButtonStyle, null));
+ extractTabBar(jsonWriter);
+ } catch (Exception e) {
+ e.printStackTrace();
}
- }
-
- public boolean isHardwareAccelerated() {
- return true;
- }
-
- public void drawPatch(Bitmap bmp, byte[] chunks, RectF dst, Paint paint) {
- chunkData = extractChunkInfo20(chunks);
+ jsonWriter.endObject();
+ jsonWriter.close();
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
+ native static int[] extractNativeChunkInfo20(long nativeChunk);
-
- private int[] stateSetUnion(final int[] stateSet1, final int[] stateSet2)
- {
- try
- {
+ private int[] stateSetUnion(final int[] stateSet1, final int[] stateSet2) {
+ try {
final int stateSet1Length = stateSet1.length;
final int stateSet2Length = stateSet2.length;
final int[] newSet = new int[stateSet1Length + stateSet2Length];
@@ -361,34 +243,18 @@ public class ExtractStyle {
int j = 0;
// This is a merge of the two input state sets and assumes that the
// input sets are sorted by the order imposed by ViewDrawableStates.
- int[] viewDrawableStatesState=(int[]) styleableClass.getDeclaredField("ViewDrawableStates").get(null);
- for (int viewState : viewDrawableStatesState)
- {
- if (i < stateSet1Length && stateSet1[i] == viewState)
- {
+ for (int viewState : viewDrawableStatesState) {
+ if (i < stateSet1Length && stateSet1[i] == viewState) {
newSet[k++] = viewState;
i++;
} else if (j < stateSet2Length && stateSet2[j] == viewState) {
newSet[k++] = viewState;
j++;
}
- if (k > 1) {
- assert(newSet[k - 1] > newSet[k - 2]);
- }
+ assert k <= 1 || (newSet[k - 1] > newSet[k - 2]);
}
return newSet;
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- return null;
- }
-
- private Class<?> getClass(String className) {
- try {
- return Class.forName(className);
- } catch (ClassNotFoundException e) {
+ } catch (Exception e) {
e.printStackTrace();
}
return null;
@@ -423,21 +289,9 @@ public class ExtractStyle {
return tryGetAccessibleField(clazz.getSuperclass(), fieldName);
}
- int getField(Class<?> clazz, String fieldName)
- {
- try {
- return clazz.getDeclaredField(fieldName).getInt(null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return -1;
- }
-
- JSONObject getColorStateList(ColorStateList colorList)
- {
+ JSONObject getColorStateList(ColorStateList colorList) {
JSONObject json = new JSONObject();
- try
- {
+ try {
json.put("EMPTY_STATE_SET", colorList.getColorForState(EMPTY_STATE_SET, 0));
json.put("WINDOW_FOCUSED_STATE_SET", colorList.getColorForState(WINDOW_FOCUSED_STATE_SET, 0));
json.put("SELECTED_STATE_SET", colorList.getColorForState(SELECTED_STATE_SET, 0));
@@ -477,150 +331,70 @@ public class ExtractStyle {
return json;
}
- final int [] DrawableStates ={android.R.attr.state_active, android.R.attr.state_checked
- , android.R.attr.state_enabled, android.R.attr.state_focused
- , android.R.attr.state_pressed, android.R.attr.state_selected
- , android.R.attr.state_window_focused, 16908288, 16843597, 16843518, 16843547};
- final String[] DrawableStatesLabels = {"active", "checked", "enabled", "focused", "pressed", "selected", "window_focused", "background", "multiline", "activated", "accelerated"};
- final String[] DisableDrawableStatesLabels = {"inactive", "unchecked", "disabled", "not_focused", "no_pressed", "unselected", "window_not_focused", "background", "multiline", "activated", "accelerated"};
-
- String getFileName(String file, String[] states)
- {
- for (String state: states)
- file+="__"+state;
- return file;
- }
-
- String getStatesName(String[] states)
- {
- String statesName="";
- for (String state: states)
- {
- if (statesName.length()>0)
- statesName+="__";
- statesName += state;
- }
- return statesName;
- }
-
- void addDrawableItemIfNotExists(JSONObject json, ArrayList<Integer> list, Drawable item, String[] states, String filename)
- {
- for (Integer it : list)
- {
- if (it.equals(item.hashCode()))
- return;
- }
- list.add(item.hashCode());
- try {
- json.put(getStatesName(states), getDrawable(item, getFileName(filename, states), null));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
-
- void addSolution(String filename, JSONObject json, int c, Drawable drawable, ArrayList<Integer> drawableList, int u)
- {
- int pos=0;
- int states[] = new int[c];
- String [] statesText = new String[c];
-
- for (int n= 0;u > 0;++n, u>>= 1)
- if ((u & 1) > 0)
- {
- statesText[pos]=DrawableStatesLabels[n];
- states[pos++]=DrawableStates[n];
- }
- drawable.setState(states);
- addDrawableItemIfNotExists(json, drawableList, drawable.getCurrent(), statesText, filename);
- }
-
- int bitCount(int u)
- {
- int n;
- for (n= 0;u > 0;++n, u&= (u - 1));
- return n;
- }
-
- JSONObject getStatesList(int [] states) throws JSONException
- {
+ JSONObject getStatesList(int[] states) throws JSONException {
JSONObject json = new JSONObject();
- for (int s : states)
- {
- boolean found=false;
- for (int d = 0;d<DrawableStates.length;d++)
- {
- if (s==DrawableStates[d])
- {
+ for (int s : states) {
+ boolean found = false;
+ for (int d = 0; d < DrawableStates.length; d++) {
+ if (s == DrawableStates[d]) {
json.put(DrawableStatesLabels[d], true);
- found=true;
+ found = true;
break;
- }
- else if (s==-DrawableStates[d])
- {
+ } else if (s == -DrawableStates[d]) {
json.put(DrawableStatesLabels[d], false);
- found=true;
+ found = true;
break;
}
}
- if (!found)
- {
- json.put("unhandled_state_"+s,s>0);
+ if (!found) {
+ json.put("unhandled_state_" + s, s > 0);
}
}
return json;
}
- String getStatesName(int [] states)
- {
- String statesName="";
- for (int s : states)
- {
- boolean found=false;
- for (int d = 0;d<DrawableStates.length;d++)
- {
- if (s==DrawableStates[d])
- {
- if (statesName.length()>0)
- statesName+="__";
- statesName+=DrawableStatesLabels[d];
- found=true;
+ String getStatesName(int[] states) {
+ StringBuilder statesName = new StringBuilder();
+ for (int s : states) {
+ boolean found = false;
+ for (int d = 0; d < DrawableStates.length; d++) {
+ if (s == DrawableStates[d]) {
+ if (statesName.length() > 0)
+ statesName.append("__");
+ statesName.append(DrawableStatesLabels[d]);
+ found = true;
break;
- }
- else if (s==-DrawableStates[d])
- {
- if (statesName.length()>0)
- statesName+="__";
- statesName+=DisableDrawableStatesLabels[d];
- found=true;
+ } else if (s == -DrawableStates[d]) {
+ if (statesName.length() > 0)
+ statesName.append("__");
+ statesName.append(DisableDrawableStatesLabels[d]);
+ found = true;
break;
}
}
- if (!found)
- {
- if (statesName.length()>0)
- statesName+=";";
- statesName+=s;
+ if (!found) {
+ if (statesName.length() > 0)
+ statesName.append(";");
+ statesName.append(s);
}
}
- if (statesName.length()>0)
- return statesName;
+ if (statesName.length() > 0)
+ return statesName.toString();
return "empty";
}
- private JSONObject getLayerDrawable(Object drawable, String filename)
- {
+ private JSONObject getLayerDrawable(Object drawable, String filename) {
JSONObject json = new JSONObject();
LayerDrawable layers = (LayerDrawable) drawable;
- final int nr=layers.getNumberOfLayers();
+ final int nr = layers.getNumberOfLayers();
try {
- JSONArray array =new JSONArray();
- for (int i = 0; i < nr; i++)
- {
+ JSONArray array = new JSONArray();
+ for (int i = 0; i < nr; i++) {
int id = layers.getId(i);
if (id == -1)
id = i;
- JSONObject layerJsonObject=getDrawable(layers.getDrawable(i), filename+"__"+id, null);
+ JSONObject layerJsonObject = getDrawable(layers.getDrawable(i), filename + "__" + id, null);
layerJsonObject.put("id", id);
array.put(layerJsonObject);
}
@@ -635,21 +409,23 @@ public class ExtractStyle {
return json;
}
- private JSONObject getStateListDrawable(Object drawable, String filename)
- {
+ private JSONObject getStateListDrawable(Object drawable, String filename) {
JSONObject json = new JSONObject();
try {
StateListDrawable stateList = (StateListDrawable) drawable;
- final int numStates = (Integer) StateListDrawable.class.getMethod("getStateCount").invoke(stateList);
- JSONArray array =new JSONArray();
- for (int i = 0; i < numStates; i++)
- {
+ JSONArray array = new JSONArray();
+ final int numStates;
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
+ numStates = (Integer) StateListDrawable.class.getMethod("getStateCount").invoke(stateList);
+ else
+ numStates = stateList.getStateCount();
+ for (int i = 0; i < numStates; i++) {
JSONObject stateJson = new JSONObject();
- final Drawable d = (Drawable) StateListDrawable.class.getMethod("getStateDrawable", Integer.TYPE).invoke(stateList, i);
- final int [] states = (int[]) StateListDrawable.class.getMethod("getStateSet", Integer.TYPE).invoke(stateList, i);
+ final Drawable d = (Drawable) StateListDrawable.class.getMethod("getStateDrawable", Integer.TYPE).invoke(stateList, i);
+ final int[] states = (int[]) StateListDrawable.class.getMethod("getStateSet", Integer.TYPE).invoke(stateList, i);
if (states != null)
stateJson.put("states", getStatesList(states));
- stateJson.put("drawable", getDrawable(d, filename+"__" + (states != null ? getStatesName(states) : ("state_pos_" + i)), null));
+ stateJson.put("drawable", getDrawable(d, filename + "__" + (states != null ? getStatesName(states) : ("state_pos_" + i)), null));
array.put(stateJson);
}
json.put("type", "stateslist");
@@ -667,32 +443,33 @@ public class ExtractStyle {
JSONObject json = new JSONObject();
try {
json.put("type", "gradient");
- Object obj=drawable.getConstantState();
- Class<?> gradientStateClass=obj.getClass();
- json.put("shape",gradientStateClass.getField("mShape").getInt(obj));
- json.put("gradient",gradientStateClass.getField("mGradient").getInt(obj));
- GradientDrawable.Orientation orientation=(Orientation) gradientStateClass.getField("mOrientation").get(obj);
- json.put("orientation",orientation.name());
- int [] intArray=(int[]) gradientStateClass.getField((Build.VERSION.SDK_INT < 23) ? "mColors" : "mGradientColors").get(obj);
+ Object obj = drawable.getConstantState();
+ Class<?> gradientStateClass = obj.getClass();
+ json.put("shape", gradientStateClass.getField("mShape").getInt(obj));
+ json.put("gradient", gradientStateClass.getField("mGradient").getInt(obj));
+ GradientDrawable.Orientation orientation = (Orientation) gradientStateClass.getField("mOrientation").get(obj);
+ if (orientation != null)
+ json.put("orientation", orientation.name());
+ int[] intArray = (int[]) gradientStateClass.getField("mGradientColors").get(obj);
if (intArray != null)
- json.put("colors",getJsonArray(intArray, 0, intArray.length));
- json.put("positions",getJsonArray((float[]) gradientStateClass.getField("mPositions").get(obj)));
- json.put("strokeWidth",gradientStateClass.getField("mStrokeWidth").getInt(obj));
- json.put("strokeDashWidth",gradientStateClass.getField("mStrokeDashWidth").getFloat(obj));
- json.put("strokeDashGap",gradientStateClass.getField("mStrokeDashGap").getFloat(obj));
- json.put("radius",gradientStateClass.getField("mRadius").getFloat(obj));
- float [] floatArray=(float[]) gradientStateClass.getField("mRadiusArray").get(obj);
- if (floatArray!=null)
- json.put("radiusArray",getJsonArray(floatArray));
- Rect rc= (Rect) gradientStateClass.getField("mPadding").get(obj);
- if (rc!=null)
- json.put("padding",getJsonRect(rc));
- json.put("width",gradientStateClass.getField("mWidth").getInt(obj));
- json.put("height",gradientStateClass.getField("mHeight").getInt(obj));
- json.put("innerRadiusRatio",gradientStateClass.getField("mInnerRadiusRatio").getFloat(obj));
- json.put("thicknessRatio",gradientStateClass.getField("mThicknessRatio").getFloat(obj));
- json.put("innerRadius",gradientStateClass.getField("mInnerRadius").getInt(obj));
- json.put("thickness",gradientStateClass.getField("mThickness").getInt(obj));
+ json.put("colors", getJsonArray(intArray, 0, intArray.length));
+ json.put("positions", getJsonArray((float[]) gradientStateClass.getField("mPositions").get(obj)));
+ json.put("strokeWidth", gradientStateClass.getField("mStrokeWidth").getInt(obj));
+ json.put("strokeDashWidth", gradientStateClass.getField("mStrokeDashWidth").getFloat(obj));
+ json.put("strokeDashGap", gradientStateClass.getField("mStrokeDashGap").getFloat(obj));
+ json.put("radius", gradientStateClass.getField("mRadius").getFloat(obj));
+ float[] floatArray = (float[]) gradientStateClass.getField("mRadiusArray").get(obj);
+ if (floatArray != null)
+ json.put("radiusArray", getJsonArray(floatArray));
+ Rect rc = (Rect) gradientStateClass.getField("mPadding").get(obj);
+ if (rc != null)
+ json.put("padding", getJsonRect(rc));
+ json.put("width", gradientStateClass.getField("mWidth").getInt(obj));
+ json.put("height", gradientStateClass.getField("mHeight").getInt(obj));
+ json.put("innerRadiusRatio", gradientStateClass.getField("mInnerRadiusRatio").getFloat(obj));
+ json.put("thicknessRatio", gradientStateClass.getField("mThicknessRatio").getFloat(obj));
+ json.put("innerRadius", gradientStateClass.getField("mInnerRadius").getInt(obj));
+ json.put("thickness", gradientStateClass.getField("mThickness").getInt(obj));
} catch (Exception e) {
e.printStackTrace();
}
@@ -705,10 +482,7 @@ public class ExtractStyle {
json.put("type", "rotate");
Object obj = drawable.getConstantState();
Class<?> rotateStateClass = obj.getClass();
- if (Build.VERSION.SDK_INT < 23)
- json.put("drawable", getDrawable(getAccessibleField(rotateStateClass, "mDrawable").get(obj), filename, null));
- else
- json.put("drawable", getDrawable(drawable.getClass().getMethod("getDrawable").invoke(drawable), filename, null));
+ json.put("drawable", getDrawable(drawable.getClass().getMethod("getDrawable").invoke(drawable), filename, null));
json.put("pivotX", getAccessibleField(rotateStateClass, "mPivotX").getFloat(obj));
json.put("pivotXRel", getAccessibleField(rotateStateClass, "mPivotXRel").getBoolean(obj));
json.put("pivotY", getAccessibleField(rotateStateClass, "mPivotY").getFloat(obj));
@@ -728,11 +502,10 @@ public class ExtractStyle {
json.put("oneshot", drawable.isOneShot());
final int count = drawable.getNumberOfFrames();
JSONArray frames = new JSONArray();
- for (int i = 0; i < count; ++i)
- {
+ for (int i = 0; i < count; ++i) {
JSONObject frame = new JSONObject();
frame.put("duration", drawable.getDuration(i));
- frame.put("drawable", getDrawable(drawable.getFrame(i), filename+"__"+i, null));
+ frame.put("drawable", getDrawable(drawable.getFrame(i), filename + "__" + i, null));
frames.put(frame);
}
json.put("frames", frames);
@@ -742,8 +515,7 @@ public class ExtractStyle {
return json;
}
- private JSONObject getJsonRect(Rect rect) throws JSONException
- {
+ private JSONObject getJsonRect(Rect rect) throws JSONException {
JSONObject jsonRect = new JSONObject();
jsonRect.put("left", rect.left);
jsonRect.put("top", rect.top);
@@ -753,26 +525,23 @@ public class ExtractStyle {
}
- private JSONArray getJsonArray(int[] array, int pos, int len)
- {
+ private JSONArray getJsonArray(int[] array, int pos, int len) {
JSONArray a = new JSONArray();
- final int l = pos+len;
- for (int i=pos; i<l;i++)
+ final int l = pos + len;
+ for (int i = pos; i < l; i++)
a.put(array[i]);
return a;
}
- private JSONArray getJsonArray(float[] array) throws JSONException
- {
+ private JSONArray getJsonArray(float[] array) throws JSONException {
JSONArray a = new JSONArray();
if (array != null)
- for (float val: array)
+ for (float val : array)
a.put(val);
return a;
}
- private JSONObject getJsonChunkInfo(int[] chunkData) throws JSONException
- {
+ private JSONObject getJsonChunkInfo(int[] chunkData) throws JSONException {
JSONObject jsonRect = new JSONObject();
if (chunkData == null)
return jsonRect;
@@ -783,40 +552,31 @@ public class ExtractStyle {
return jsonRect;
}
- private JSONObject findPatchesMarings(Drawable d) throws JSONException, NoSuchFieldException, IllegalAccessException
- {
+ private JSONObject findPatchesMarings(Drawable d) throws JSONException, IllegalAccessException {
NinePatch np;
Field f = tryGetAccessibleField(NinePatchDrawable.class, "mNinePatch");
if (f != null) {
np = (NinePatch) f.get(d);
} else {
Object state = getAccessibleField(NinePatchDrawable.class, "mNinePatchState").get(d);
- np = (NinePatch) getAccessibleField(state.getClass(), "mNinePatch").get(state);
- }
- return getJsonChunkInfo(extractNativeChunkInfo20(getAccessibleField(np.getClass(), "mNativeChunk").getLong(np)));
- }
-
- class DrawableCache
- {
- public DrawableCache(JSONObject json, Object drawable)
- {
- object = json;
- this.drawable = drawable;
+ np = (NinePatch) getAccessibleField(Objects.requireNonNull(state).getClass(), "mNinePatch").get(state);
}
- JSONObject object;
- Object drawable;
+ return getJsonChunkInfo(extractNativeChunkInfo20(getAccessibleField(Objects.requireNonNull(np).getClass(), "mNativeChunk").getLong(np)));
}
- private HashMap<String, DrawableCache> m_drawableCache = new HashMap<String, DrawableCache>();
- private JSONObject getRippleDrawable(Object drawable, String filename, Rect padding)
- {
+ private JSONObject getRippleDrawable(Object drawable, String filename, Rect padding) {
JSONObject json = getLayerDrawable(drawable, filename);
- JSONObject ripple = new JSONObject();
+ JSONObject ripple = new JSONObject();
try {
+ Class<?> rippleDrawableClass = Class.forName("android.graphics.drawable.RippleDrawable");
final Object mState = getAccessibleField(rippleDrawableClass, "mState").get(drawable);
- ripple.put("mask", getDrawable((Drawable)getAccessibleField(rippleDrawableClass, "mMask").get(drawable), filename, padding));
- ripple.put("maxRadius", getAccessibleField(mState.getClass(), "mMaxRadius").getInt(mState));
- ripple.put("color", getColorStateList((ColorStateList)getAccessibleField(mState.getClass(), "mColor").get(mState)));
+ ripple.put("mask", getDrawable((Drawable) getAccessibleField(rippleDrawableClass, "mMask").get(drawable), filename, padding));
+ if (mState != null) {
+ ripple.put("maxRadius", getAccessibleField(mState.getClass(), "mMaxRadius").getInt(mState));
+ ColorStateList color = (ColorStateList) getAccessibleField(mState.getClass(), "mColor").get(mState);
+ if (color != null)
+ ripple.put("color", getColorStateList(color));
+ }
json.put("ripple", ripple);
} catch (Exception e) {
e.printStackTrace();
@@ -824,32 +584,31 @@ public class ExtractStyle {
return json;
}
- private HashMap<Long, Long> getStateTransitions(Object sa) throws Exception
- {
- HashMap<Long, Long> transitions = new HashMap<Long, Long>();
+ private HashMap<Long, Long> getStateTransitions(Object sa) throws Exception {
+ HashMap<Long, Long> transitions = new HashMap<>();
final int sz = getAccessibleField(sa.getClass(), "mSize").getInt(sa);
long[] keys = (long[]) getAccessibleField(sa.getClass(), "mKeys").get(sa);
long[] values = (long[]) getAccessibleField(sa.getClass(), "mValues").get(sa);
for (int i = 0; i < sz; i++) {
- transitions.put(keys[i], values[i]);
+ if (keys != null && values != null)
+ transitions.put(keys[i], values[i]);
}
return transitions;
}
- private HashMap<Integer, Integer> getStateIds(Object sa) throws Exception
- {
- HashMap<Integer, Integer> states = new HashMap<Integer, Integer>();
+ private HashMap<Integer, Integer> getStateIds(Object sa) throws Exception {
+ HashMap<Integer, Integer> states = new HashMap<>();
final int sz = getAccessibleField(sa.getClass(), "mSize").getInt(sa);
int[] keys = (int[]) getAccessibleField(sa.getClass(), "mKeys").get(sa);
int[] values = (int[]) getAccessibleField(sa.getClass(), "mValues").get(sa);
for (int i = 0; i < sz; i++) {
- states.put(keys[i], values[i]);
+ if (keys != null && values != null)
+ states.put(keys[i], values[i]);
}
return states;
}
- private int findStateIndex(int id, HashMap<Integer, Integer> stateIds)
- {
+ private int findStateIndex(int id, HashMap<Integer, Integer> stateIds) {
for (Map.Entry<Integer, Integer> s : stateIds.entrySet()) {
if (id == s.getValue())
return s.getKey();
@@ -857,27 +616,30 @@ public class ExtractStyle {
return -1;
}
- private JSONObject getAnimatedStateListDrawable(Object drawable, String filename)
- {
+ private JSONObject getAnimatedStateListDrawable(Object drawable, String filename) {
JSONObject json = getStateListDrawable(drawable, filename);
try {
+ Class<?> animatedStateListDrawableClass = Class.forName("android.graphics.drawable.AnimatedStateListDrawable");
Object state = getAccessibleField(animatedStateListDrawableClass, "mState").get(drawable);
- HashMap<Integer, Integer> stateIds = getStateIds(getAccessibleField(state.getClass(), "mStateIds").get(state));
- HashMap<Long, Long> transitions = getStateTransitions(getAccessibleField(state.getClass(), "mTransitions").get(state));
+ if (state != null) {
+ Class<?> stateClass = state.getClass();
+ HashMap<Integer, Integer> stateIds = getStateIds(Objects.requireNonNull(getAccessibleField(stateClass, "mStateIds").get(state)));
+ HashMap<Long, Long> transitions = getStateTransitions(Objects.requireNonNull(getAccessibleField(stateClass, "mTransitions").get(state)));
- for (Map.Entry<Long, Long> t : transitions.entrySet()) {
- final int toState = findStateIndex(t.getKey().intValue(), stateIds);
- final int fromState = findStateIndex((int) (t.getKey() >> 32), stateIds);
+ for (Map.Entry<Long, Long> t : transitions.entrySet()) {
+ final int toState = findStateIndex(t.getKey().intValue(), stateIds);
+ final int fromState = findStateIndex((int) (t.getKey() >> 32), stateIds);
- JSONObject transition = new JSONObject();
- transition.put("from", fromState);
- transition.put("to", toState);
- transition.put("reverse", (t.getValue() >> 32) != 0);
+ JSONObject transition = new JSONObject();
+ transition.put("from", fromState);
+ transition.put("to", toState);
+ transition.put("reverse", (t.getValue() >> 32) != 0);
- JSONArray stateslist = json.getJSONArray("stateslist");
- JSONObject stateobj = stateslist.getJSONObject(t.getValue().intValue());
- stateobj.put("transition", transition);
+ JSONArray stateslist = json.getJSONArray("stateslist");
+ JSONObject stateobj = stateslist.getJSONObject(t.getValue().intValue());
+ stateobj.put("transition", transition);
+ }
}
} catch (Exception e) {
e.printStackTrace();
@@ -885,21 +647,22 @@ public class ExtractStyle {
return json;
}
- private JSONObject getVPath(Object path) throws Exception
- {
+ private JSONObject getVPath(Object path) throws Exception {
JSONObject json = new JSONObject();
final Class<?> pathClass = path.getClass();
json.put("type", "path");
json.put("name", tryGetAccessibleField(pathClass, "mPathName").get(path));
Object[] mNodes = (Object[]) tryGetAccessibleField(pathClass, "mNodes").get(path);
JSONArray nodes = new JSONArray();
- for (Object n: mNodes) {
- JSONObject node = new JSONObject();
- node.put("type", String.valueOf(getAccessibleField(n.getClass(), "mType").getChar(n)));
- node.put("params", getJsonArray((float[])getAccessibleField(n.getClass(), "mParams").get(n)));
- nodes.put(node);
+ if (mNodes != null) {
+ for (Object n : mNodes) {
+ JSONObject node = new JSONObject();
+ node.put("type", String.valueOf(getAccessibleField(n.getClass(), "mType").getChar(n)));
+ node.put("params", getJsonArray((float[]) getAccessibleField(n.getClass(), "mParams").get(n)));
+ nodes.put(node);
+ }
+ json.put("nodes", nodes);
}
- json.put("nodes", nodes);
json.put("isClip", (Boolean) pathClass.getMethod("isClipPath").invoke(path));
if (tryGetAccessibleField(pathClass, "mStrokeColor") == null)
@@ -921,8 +684,7 @@ public class ExtractStyle {
}
@SuppressWarnings("unchecked")
- private JSONObject getVGroup(Object group) throws Exception
- {
+ private JSONObject getVGroup(Object group) throws Exception {
JSONObject json = new JSONObject();
json.put("type", "group");
final Class<?> groupClass = group.getClass();
@@ -937,64 +699,63 @@ public class ExtractStyle {
ArrayList<Object> mChildren = (ArrayList<Object>) getAccessibleField(groupClass, "mChildren").get(group);
JSONArray children = new JSONArray();
- for (Object c: mChildren) {
- if (groupClass.isInstance(c))
- children.put(getVGroup(c));
- else
- children.put(getVPath(c));
+ if (mChildren != null) {
+ for (Object c : mChildren) {
+ if (groupClass.isInstance(c))
+ children.put(getVGroup(c));
+ else
+ children.put(getVPath(c));
+ }
+ json.put("children", children);
}
- json.put("children", children);
return json;
}
- private JSONObject getVectorDrawable(Object drawable, String filename, Rect padding)
- {
+ private JSONObject getVectorDrawable(Object drawable) {
JSONObject json = new JSONObject();
try {
json.put("type", "vector");
+ Class<?> vectorDrawableClass = Class.forName("android.graphics.drawable.VectorDrawable");
final Object state = getAccessibleField(vectorDrawableClass, "mVectorState").get(drawable);
- final Class<?> stateClass = state.getClass();
+ final Class<?> stateClass = Objects.requireNonNull(state).getClass();
final ColorStateList mTint = (ColorStateList) getAccessibleField(stateClass, "mTint").get(state);
if (mTint != null) {
json.put("tintList", getColorStateList(mTint));
json.put("tintMode", (PorterDuff.Mode) getAccessibleField(stateClass, "mTintMode").get(state));
}
final Object mVPathRenderer = getAccessibleField(stateClass, "mVPathRenderer").get(state);
- final Class<?> VPathRendererClass = mVPathRenderer.getClass();
+ final Class<?> VPathRendererClass = Objects.requireNonNull(mVPathRenderer).getClass();
json.put("baseWidth", getAccessibleField(VPathRendererClass, "mBaseWidth").getFloat(mVPathRenderer));
json.put("baseHeight", getAccessibleField(VPathRendererClass, "mBaseHeight").getFloat(mVPathRenderer));
json.put("viewportWidth", getAccessibleField(VPathRendererClass, "mViewportWidth").getFloat(mVPathRenderer));
json.put("viewportHeight", getAccessibleField(VPathRendererClass, "mViewportHeight").getFloat(mVPathRenderer));
json.put("rootAlpha", getAccessibleField(VPathRendererClass, "mRootAlpha").getInt(mVPathRenderer));
json.put("rootName", getAccessibleField(VPathRendererClass, "mRootName").get(mVPathRenderer));
- json.put("rootGroup", getVGroup(getAccessibleField(mVPathRenderer.getClass(), "mRootGroup").get(mVPathRenderer)));
- } catch(Exception e) {
+ json.put("rootGroup", getVGroup(Objects.requireNonNull(getAccessibleField(VPathRendererClass, "mRootGroup").get(mVPathRenderer))));
+ } catch (Exception e) {
e.printStackTrace();
}
return json;
}
- public JSONObject getDrawable(Object drawable, String filename, Rect padding)
- {
+ public JSONObject getDrawable(Object drawable, String filename, Rect padding) {
if (drawable == null || m_minimal)
return null;
DrawableCache dc = m_drawableCache.get(filename);
- if (dc != null)
- {
+ if (dc != null) {
if (dc.drawable.equals(drawable))
return dc.object;
else
- Log.e(QtNative.QtTAG, "Different drawable objects points to the same file name \"" + filename +"\"");
+ Log.e(QtNative.QtTAG, "Different drawable objects points to the same file name \"" + filename + "\"");
}
JSONObject json = new JSONObject();
Bitmap bmp = null;
if (drawable instanceof Bitmap)
bmp = (Bitmap) drawable;
- else
- {
+ else {
if (drawable instanceof BitmapDrawable) {
- BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;
+ BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
bmp = bitmapDrawable.getBitmap();
try {
json.put("gravity", bitmapDrawable.getGravity());
@@ -1009,48 +770,39 @@ public class ExtractStyle {
} catch (Exception e) {
e.printStackTrace();
}
- }
- else
- {
+ } else {
- if (rippleDrawableClass != null && rippleDrawableClass.isInstance(drawable))
+ if (drawable instanceof RippleDrawable)
return getRippleDrawable(drawable, filename, padding);
- if (animatedStateListDrawableClass != null && animatedStateListDrawableClass.isInstance(drawable))
+ if (drawable instanceof AnimatedStateListDrawable)
return getAnimatedStateListDrawable(drawable, filename);
- if (vectorDrawableClass != null && vectorDrawableClass.isInstance(drawable))
- return getVectorDrawable(drawable, filename, padding);
+ if (drawable instanceof VectorDrawable)
+ return getVectorDrawable(drawable);
- if (drawable instanceof ScaleDrawable)
- {
- return getDrawable(((ScaleDrawable)drawable).getDrawable(), filename, null);
+ if (drawable instanceof ScaleDrawable) {
+ return getDrawable(((ScaleDrawable) drawable).getDrawable(), filename, null);
}
- if (drawable instanceof LayerDrawable)
- {
+ if (drawable instanceof LayerDrawable) {
return getLayerDrawable(drawable, filename);
}
- if (drawable instanceof StateListDrawable)
- {
+ if (drawable instanceof StateListDrawable) {
return getStateListDrawable(drawable, filename);
}
- if (drawable instanceof GradientDrawable)
- {
+ if (drawable instanceof GradientDrawable) {
return getGradientDrawable((GradientDrawable) drawable);
}
- if (drawable instanceof RotateDrawable)
- {
+ if (drawable instanceof RotateDrawable) {
return getRotateDrawable((RotateDrawable) drawable, filename);
}
- if (drawable instanceof AnimationDrawable)
- {
+ if (drawable instanceof AnimationDrawable) {
return getAnimationDrawable((AnimationDrawable) drawable, filename);
}
- if (drawable instanceof ClipDrawable)
- {
+ if (drawable instanceof ClipDrawable) {
try {
json.put("type", "clipDrawable");
- Drawable.ConstantState dcs = ((ClipDrawable)drawable).getConstantState();
+ Drawable.ConstantState dcs = ((ClipDrawable) drawable).getConstantState();
json.put("drawable", getDrawable(getAccessibleField(dcs.getClass(), "mDrawable").get(dcs), filename, null));
if (null != padding)
json.put("padding", getJsonRect(padding));
@@ -1064,8 +816,7 @@ public class ExtractStyle {
}
return json;
}
- if (drawable instanceof ColorDrawable)
- {
+ if (drawable instanceof ColorDrawable) {
bmp = Bitmap.createBitmap(1, 1, Config.ARGB_8888);
Drawable d = (Drawable) drawable;
d.setBounds(0, 0, 1, 1);
@@ -1085,36 +836,29 @@ public class ExtractStyle {
}
return json;
}
- if (drawable instanceof InsetDrawable)
- {
+ if (drawable instanceof InsetDrawable) {
try {
- InsetDrawable d = (InsetDrawable)drawable;
- // mInsetState changed to mState in Android 5.1 (22)
- Object mInsetStateObject = getAccessibleField(InsetDrawable.class, (Build.VERSION.SDK_INT > 21) ? "mState"
- : "mInsetState").get(d);
+ InsetDrawable d = (InsetDrawable) drawable;
+ Object mInsetStateObject = getAccessibleField(InsetDrawable.class, "mState").get(d);
Rect _padding = new Rect();
boolean hasPadding = d.getPadding(_padding);
- return getDrawable(getAccessibleField(mInsetStateObject.getClass(), "mDrawable").get(mInsetStateObject), filename, hasPadding ? _padding : null);
+ return getDrawable(getAccessibleField(Objects.requireNonNull(mInsetStateObject).getClass(), "mDrawable").get(mInsetStateObject), filename, hasPadding ? _padding : null);
} catch (Exception e) {
e.printStackTrace();
}
- }
- else
- {
+ } else {
Drawable d = (Drawable) drawable;
- int w=d.getIntrinsicWidth();
- int h=d.getIntrinsicHeight();
+ int w = d.getIntrinsicWidth();
+ int h = d.getIntrinsicHeight();
d.setLevel(10000);
- if (w<1 || h< 1)
- {
- w=100;
- h=100;
+ if (w < 1 || h < 1) {
+ w = 100;
+ h = 100;
}
bmp = Bitmap.createBitmap(w, h, Config.ARGB_8888);
d.setBounds(0, 0, w, h);
d.draw(new Canvas(bmp));
- if (drawable instanceof NinePatchDrawable)
- {
+ if (drawable instanceof NinePatchDrawable) {
NinePatchDrawable npd = (NinePatchDrawable) drawable;
try {
json.put("type", "9patch");
@@ -1138,657 +882,690 @@ public class ExtractStyle {
}
FileOutputStream out;
try {
- filename = m_extractPath+filename+".png";
+ filename = m_extractPath + filename + ".png";
out = new FileOutputStream(filename);
- bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
+ if (bmp != null)
+ bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
json.put("type", "image");
json.put("path", filename);
- json.put("width", bmp.getWidth());
- json.put("height", bmp.getHeight());
+ if (bmp != null) {
+ json.put("width", bmp.getWidth());
+ json.put("height", bmp.getHeight());
+ }
m_drawableCache.put(filename, new DrawableCache(json, drawable));
-// MinistroActivity.nativeChmode(filename, 0644);
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
- public void extractViewInformations(String styleName, int styleId, JSONObject json, String qtClassName, AttributeSet attribSet)
+ private TypedArray obtainStyledAttributes(int styleName, int[] attributes)
{
+ TypedValue typedValue = new TypedValue();
+ Context ctx = new ContextThemeWrapper(m_context, m_theme);
+ ctx.getTheme().resolveAttribute(styleName, typedValue, true);
+ return ctx.obtainStyledAttributes(typedValue.data, attributes);
+ }
+
+ private ArrayList<Integer> getArrayListFromIntArray(int[] attributes) {
+ ArrayList<Integer> sortedAttrs = new ArrayList<>();
+ for (int attr : attributes)
+ sortedAttrs.add(attr);
+ return sortedAttrs;
+ }
+
+ public void extractViewInformation(int styleName, JSONObject json, String qtClassName) {
+ extractViewInformation(styleName, json, qtClassName, null);
+ }
+
+ public void extractViewInformation(int styleName, JSONObject json, String qtClassName, AttributeSet attributeSet) {
try {
- int[] viewAttrs;
- viewAttrs = (int[]) styleableClass.getDeclaredField("View").get(null);
- TypedArray a =m_theme.obtainStyledAttributes(attribSet, viewAttrs, styleId, 0);
+ TypedValue typedValue = new TypedValue();
+ Context ctx = new ContextThemeWrapper(m_context, m_theme);
+ ctx.getTheme().resolveAttribute(styleName, typedValue, true);
+
+ int[] attributes = new int[]{
+ android.R.attr.digits,
+ android.R.attr.background,
+ android.R.attr.padding,
+ android.R.attr.paddingLeft,
+ android.R.attr.paddingTop,
+ android.R.attr.paddingRight,
+ android.R.attr.paddingBottom,
+ android.R.attr.scrollX,
+ android.R.attr.scrollY,
+ android.R.attr.id,
+ android.R.attr.tag,
+ android.R.attr.fitsSystemWindows,
+ android.R.attr.focusable,
+ android.R.attr.focusableInTouchMode,
+ android.R.attr.clickable,
+ android.R.attr.longClickable,
+ android.R.attr.saveEnabled,
+ android.R.attr.duplicateParentState,
+ android.R.attr.visibility,
+ android.R.attr.drawingCacheQuality,
+ android.R.attr.contentDescription,
+ android.R.attr.soundEffectsEnabled,
+ android.R.attr.hapticFeedbackEnabled,
+ android.R.attr.scrollbars,
+ android.R.attr.fadingEdge,
+ android.R.attr.scrollbarStyle,
+ android.R.attr.scrollbarFadeDuration,
+ android.R.attr.scrollbarDefaultDelayBeforeFade,
+ android.R.attr.scrollbarSize,
+ android.R.attr.scrollbarThumbHorizontal,
+ android.R.attr.scrollbarThumbVertical,
+ android.R.attr.scrollbarTrackHorizontal,
+ android.R.attr.scrollbarTrackVertical,
+ android.R.attr.isScrollContainer,
+ android.R.attr.keepScreenOn,
+ android.R.attr.filterTouchesWhenObscured,
+ android.R.attr.nextFocusLeft,
+ android.R.attr.nextFocusRight,
+ android.R.attr.nextFocusUp,
+ android.R.attr.nextFocusDown,
+ android.R.attr.minWidth,
+ android.R.attr.minHeight,
+ android.R.attr.onClick,
+ android.R.attr.overScrollMode,
+ android.R.attr.paddingStart,
+ android.R.attr.paddingEnd,
+ };
+
+ // The array must be sorted in ascending order, otherwise obtainStyledAttributes()
+ // might fail to find some attributes
+ Arrays.sort(attributes);
+ TypedArray array;
+ if (attributeSet != null)
+ array = m_theme.obtainStyledAttributes(attributeSet, attributes, styleName, 0);
+ else
+ array = obtainStyledAttributes(styleName, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
if (null != qtClassName)
json.put("qtClass", qtClassName);
+
json.put("defaultBackgroundColor", defaultBackgroundColor);
json.put("defaultTextColorPrimary", defaultTextColor);
- final int N = a.getIndexCount();
- for (int i = 0; i < N; i++) {
- int attr = a.getIndex(i);
- if (attr == View_background)
- json.put("View_background", getDrawable(a.getDrawable(attr), styleName + "_View_background", null));
- else if (attr == View_padding)
- json.put("View_padding", a.getDimensionPixelSize(attr, -1));
- else if (attr == View_paddingLeft)
- json.put("View_paddingLeft", a.getDimensionPixelSize(attr, -1));
- else if (attr == View_paddingTop)
- json.put("View_paddingTop", a.getDimensionPixelSize(attr, -1));
- else if (attr == View_paddingRight)
- json.put("View_paddingRight", a.getDimensionPixelSize(attr, -1));
- else if (attr == View_paddingBottom)
- json.put("View_paddingBottom", a.getDimensionPixelSize(attr, -1));
- else if (attr == View_scrollX)
- json.put("View_paddingBottom", a.getDimensionPixelOffset(attr, 0));
- else if (attr == View_scrollY)
- json.put("View_scrollY", a.getDimensionPixelOffset(attr, 0));
- else if (attr == View_id)
- json.put("View_id", a.getResourceId(attr, -1));
- else if (attr == View_tag)
- json.put("View_tag", a.getText(attr));
- else if (attr == View_fitsSystemWindows)
- json.put("View_fitsSystemWindows", a.getBoolean(attr, false));
- else if (attr == View_focusable)
- json.put("View_focusable", a.getBoolean(attr, false));
- else if (attr == View_focusableInTouchMode)
- json.put("View_focusableInTouchMode", a.getBoolean(attr, false));
- else if (attr == View_clickable)
- json.put("View_clickable", a.getBoolean(attr, false));
- else if (attr == View_longClickable)
- json.put("View_longClickable", a.getBoolean(attr, false));
- else if (attr == View_saveEnabled)
- json.put("View_saveEnabled", a.getBoolean(attr, true));
- else if (attr == View_duplicateParentState)
- json.put("View_duplicateParentState", a.getBoolean(attr, false));
- else if (attr == View_visibility)
- json.put("View_visibility", a.getInt(attr, 0));
- else if (attr == View_drawingCacheQuality)
- json.put("View_drawingCacheQuality", a.getInt(attr, 0));
- else if (attr == View_drawingCacheQuality)
- json.put("View_contentDescription", a.getString(attr));
- else if (attr == View_soundEffectsEnabled)
- json.put("View_soundEffectsEnabled", a.getBoolean(attr, true));
- else if (attr == View_hapticFeedbackEnabled)
- json.put("View_hapticFeedbackEnabled", a.getBoolean(attr, true));
- else if (attr == View_scrollbars)
- json.put("View_scrollbars", a.getInt(attr, 0));
- else if (attr == View_fadingEdge)
- json.put("View_fadingEdge", a.getInt(attr, 0));
- else if (attr == View_scrollbarStyle)
- json.put("View_scrollbarStyle", a.getInt(attr, 0));
- else if (attr == View_scrollbarFadeDuration)
- json.put("View_scrollbarFadeDuration", a.getInt(attr, 0));
- else if (attr == View_scrollbarDefaultDelayBeforeFade)
- json.put("View_scrollbarDefaultDelayBeforeFade", a.getInt(attr, 0));
- else if (attr == View_scrollbarSize)
- json.put("View_scrollbarSize", a.getDimensionPixelSize(attr, -1));
- else if (attr == View_scrollbarThumbHorizontal)
- json.put("View_scrollbarThumbHorizontal", getDrawable(a.getDrawable(attr), styleName + "_View_scrollbarThumbHorizontal", null));
- else if (attr == View_scrollbarThumbVertical)
- json.put("View_scrollbarThumbVertical", getDrawable(a.getDrawable(attr), styleName + "_View_scrollbarThumbVertical", null));
- else if (attr == View_scrollbarTrackHorizontal)
- json.put("View_scrollbarTrackHorizontal", getDrawable(a.getDrawable(attr), styleName + "_View_scrollbarTrackHorizontal", null));
- else if (attr == View_scrollbarTrackVertical)
- json.put("View_scrollbarTrackVertical", getDrawable(a.getDrawable(attr), styleName + "_View_scrollbarTrackVertical", null));
- else if (attr == View_isScrollContainer)
- json.put("View_isScrollContainer", a.getBoolean(attr, false));
- else if (attr == View_keepScreenOn)
- json.put("View_keepScreenOn", a.getBoolean(attr, false));
- else if (attr == View_filterTouchesWhenObscured)
- json.put("View_filterTouchesWhenObscured", a.getBoolean(attr, false));
- else if (attr == View_nextFocusLeft)
- json.put("View_nextFocusLeft", a.getResourceId(attr, -1));
- else if (attr == View_nextFocusRight)
- json.put("View_nextFocusRight", a.getResourceId(attr, -1));
- else if (attr == View_nextFocusUp)
- json.put("View_nextFocusUp", a.getResourceId(attr, -1));
- else if (attr == View_nextFocusDown)
- json.put("View_nextFocusDown", a.getResourceId(attr, -1));
- else if (attr == View_minWidth)
- json.put("View_minWidth", a.getDimensionPixelSize(attr, 0));
- else if (attr == View_minHeight)
- json.put("View_minHeight", a.getDimensionPixelSize(attr, 0));
- else if (attr == View_onClick)
- json.put("View_onClick", a.getString(attr));
- else if (attr == View_overScrollMode)
- json.put("View_overScrollMode", a.getInt(attr, 1));
- else if (attr == View_paddingStart)
- json.put("View_paddingStart", a.getDimensionPixelSize(attr, 0));
- else if (attr == View_paddingEnd)
- json.put("View_paddingEnd", a.getDimensionPixelSize(attr, 0));
- }
- a.recycle();
+ json.put("TextView_digits", array.getText(sortedAttrs.indexOf(android.R.attr.digits)));
+ json.put("View_background", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.background)), styleName + "_View_background", null));
+ json.put("View_padding", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.padding), -1));
+ json.put("View_paddingLeft", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.paddingLeft), -1));
+ json.put("View_paddingTop", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.paddingTop), -1));
+ json.put("View_paddingRight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.paddingRight), -1));
+ json.put("View_paddingBottom", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.paddingBottom), -1));
+ json.put("View_paddingBottom", array.getDimensionPixelOffset(sortedAttrs.indexOf(android.R.attr.scrollX), 0));
+ json.put("View_scrollY", array.getDimensionPixelOffset(sortedAttrs.indexOf(android.R.attr.scrollY), 0));
+ json.put("View_id", array.getResourceId(sortedAttrs.indexOf(android.R.attr.id), -1));
+ json.put("View_tag", array.getText(sortedAttrs.indexOf(android.R.attr.tag)));
+ json.put("View_fitsSystemWindows", array.getBoolean(sortedAttrs.indexOf(android.R.attr.fitsSystemWindows), false));
+ json.put("View_focusable", array.getBoolean(sortedAttrs.indexOf(android.R.attr.focusable), false));
+ json.put("View_focusableInTouchMode", array.getBoolean(sortedAttrs.indexOf(android.R.attr.focusableInTouchMode), false));
+ json.put("View_clickable", array.getBoolean(sortedAttrs.indexOf(android.R.attr.clickable), false));
+ json.put("View_longClickable", array.getBoolean(sortedAttrs.indexOf(android.R.attr.longClickable), false));
+ json.put("View_saveEnabled", array.getBoolean(sortedAttrs.indexOf(android.R.attr.saveEnabled), true));
+ json.put("View_duplicateParentState", array.getBoolean(sortedAttrs.indexOf(android.R.attr.duplicateParentState), false));
+ json.put("View_visibility", array.getInt(sortedAttrs.indexOf(android.R.attr.visibility), 0));
+ json.put("View_drawingCacheQuality", array.getInt(sortedAttrs.indexOf(android.R.attr.drawingCacheQuality), 0));
+ json.put("View_contentDescription", array.getString(sortedAttrs.indexOf(android.R.attr.contentDescription)));
+ json.put("View_soundEffectsEnabled", array.getBoolean(sortedAttrs.indexOf(android.R.attr.soundEffectsEnabled), true));
+ json.put("View_hapticFeedbackEnabled", array.getBoolean(sortedAttrs.indexOf(android.R.attr.hapticFeedbackEnabled), true));
+ json.put("View_scrollbars", array.getInt(sortedAttrs.indexOf(android.R.attr.scrollbars), 0));
+ json.put("View_fadingEdge", array.getInt(sortedAttrs.indexOf(android.R.attr.fadingEdge), 0));
+ json.put("View_scrollbarStyle", array.getInt(sortedAttrs.indexOf(android.R.attr.scrollbarStyle), 0));
+ json.put("View_scrollbarFadeDuration", array.getInt(sortedAttrs.indexOf(android.R.attr.scrollbarFadeDuration), 0));
+ json.put("View_scrollbarDefaultDelayBeforeFade", array.getInt(sortedAttrs.indexOf(android.R.attr.scrollbarDefaultDelayBeforeFade), 0));
+ json.put("View_scrollbarSize", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.scrollbarSize), -1));
+ json.put("View_scrollbarThumbHorizontal", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.scrollbarThumbHorizontal)), styleName + "_View_scrollbarThumbHorizontal", null));
+ json.put("View_scrollbarThumbVertical", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.scrollbarThumbVertical)), styleName + "_View_scrollbarThumbVertical", null));
+ json.put("View_scrollbarTrackHorizontal", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.scrollbarTrackHorizontal)), styleName + "_View_scrollbarTrackHorizontal", null));
+ json.put("View_scrollbarTrackVertical", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.scrollbarTrackVertical)), styleName + "_View_scrollbarTrackVertical", null));
+ json.put("View_isScrollContainer", array.getBoolean(sortedAttrs.indexOf(android.R.attr.isScrollContainer), false));
+ json.put("View_keepScreenOn", array.getBoolean(sortedAttrs.indexOf(android.R.attr.keepScreenOn), false));
+ json.put("View_filterTouchesWhenObscured", array.getBoolean(sortedAttrs.indexOf(android.R.attr.filterTouchesWhenObscured), false));
+ json.put("View_nextFocusLeft", array.getResourceId(sortedAttrs.indexOf(android.R.attr.nextFocusLeft), -1));
+ json.put("View_nextFocusRight", array.getResourceId(sortedAttrs.indexOf(android.R.attr.nextFocusRight), -1));
+ json.put("View_nextFocusUp", array.getResourceId(sortedAttrs.indexOf(android.R.attr.nextFocusUp), -1));
+ json.put("View_nextFocusDown", array.getResourceId(sortedAttrs.indexOf(android.R.attr.nextFocusDown), -1));
+ json.put("View_minWidth", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.minWidth), 0));
+ json.put("View_minHeight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.minHeight), 0));
+ json.put("View_onClick", array.getString(sortedAttrs.indexOf(android.R.attr.onClick)));
+ json.put("View_overScrollMode", array.getInt(sortedAttrs.indexOf(android.R.attr.overScrollMode), 1));
+ json.put("View_paddingStart", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.paddingStart), 0));
+ json.put("View_paddingEnd", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.paddingEnd), 0));
+ array.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
- public JSONObject extractTextAppearance(int styleId)
+ public JSONObject extractTextAppearance(int styleName)
{
+ return extractTextAppearance(styleName, false);
+ }
+
+ @SuppressLint("ResourceType")
+ public JSONObject extractTextAppearance(int styleName, boolean subStyle)
+ {
+ final int[] attributes = new int[]{
+ android.R.attr.textSize,
+ android.R.attr.textStyle,
+ android.R.attr.textColor,
+ android.R.attr.typeface,
+ android.R.attr.textAllCaps,
+ android.R.attr.textColorHint,
+ android.R.attr.textColorLink,
+ android.R.attr.textColorHighlight
+ };
+ Arrays.sort(attributes);
+ TypedArray array;
+ if (subStyle)
+ array = m_theme.obtainStyledAttributes(styleName, attributes);
+ else
+ array = obtainStyledAttributes(styleName, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
JSONObject json = new JSONObject();
- try
- {
- TypedArray a = m_theme.obtainStyledAttributes(styleId, (int[]) styleableClass.getDeclaredField("TextAppearance").get(null));
- int n = a.getIndexCount();
- for (int i = 0; i < n; i++)
- {
- int attr = a.getIndex(i);
- if (attr == TextAppearance_textColorHighlight)
- json.put("TextAppearance_textColorHighlight", a.getColor(attr, 0));
- else if (attr == TextAppearance_textColor)
- json.put("TextAppearance_textColor", getColorStateList(a.getColorStateList(attr)));
- else if (attr == TextAppearance_textColorHint)
- json.put("TextAppearance_textColorHint", getColorStateList(a.getColorStateList(attr)));
- else if (attr == TextAppearance_textColorLink)
- json.put("TextAppearance_textColorLink", getColorStateList(a.getColorStateList(attr)));
- else if (attr == TextAppearance_textSize)
- json.put("TextAppearance_textSize", a.getDimensionPixelSize(attr, 15));
- else if (attr == TextAppearance_typeface)
- json.put("TextAppearance_typeface", a.getInt(attr, -1));
- else if (attr == TextAppearance_textStyle)
- json.put("TextAppearance_textStyle", a.getInt(attr, -1));
- else if (attr == TextAppearance_textAllCaps)
- json.put("TextAppearance_textAllCaps", a.getBoolean(attr, false));
- }
- a.recycle();
- }
- catch (Exception e)
- {
+ try {
+ int attr = sortedAttrs.indexOf(android.R.attr.textSize);
+ if (array.hasValue(attr))
+ json.put("TextAppearance_textSize", array.getDimensionPixelSize(attr, 15));
+ attr = sortedAttrs.indexOf(android.R.attr.textStyle);
+ if (array.hasValue(attr))
+ json.put("TextAppearance_textStyle", array.getInt(attr, -1));
+ ColorStateList color = array.getColorStateList(sortedAttrs.indexOf(android.R.attr.textColor));
+ if (color != null)
+ json.put("TextAppearance_textColor", getColorStateList(color));
+ attr = sortedAttrs.indexOf(android.R.attr.typeface);
+ if (array.hasValue(attr))
+ json.put("TextAppearance_typeface", array.getInt(attr, -1));
+ attr = sortedAttrs.indexOf(android.R.attr.textAllCaps);
+ if (array.hasValue(attr))
+ json.put("TextAppearance_textAllCaps", array.getBoolean(attr, false));
+ color = array.getColorStateList(sortedAttrs.indexOf(android.R.attr.textColorHint));
+ if (color != null)
+ json.put("TextAppearance_textColorHint", getColorStateList(color));
+ color = array.getColorStateList(sortedAttrs.indexOf(android.R.attr.textColorLink));
+ if (color != null)
+ json.put("TextAppearance_textColorLink", getColorStateList(color));
+ attr = sortedAttrs.indexOf(android.R.attr.textColorHighlight);
+ if (array.hasValue(attr))
+ json.put("TextAppearance_textColorHighlight", array.getColor(attr, 0));
+ array.recycle();
+ } catch (Exception e) {
e.printStackTrace();
}
return json;
}
- public JSONObject extractTextAppearanceInformations(String styleName, String qtClass, AttributeSet attribSet, int textAppearance)
- {
+ public JSONObject extractTextAppearanceInformation(int styleName, String qtClass, AttributeSet attributeSet) {
+ return extractTextAppearanceInformation(styleName, qtClass, android.R.attr.textAppearance, attributeSet);
+ }
+
+ public JSONObject extractTextAppearanceInformation(int styleName, String qtClass) {
+ return extractTextAppearanceInformation(styleName, qtClass, android.R.attr.textAppearance, null);
+ }
+
+ public JSONObject extractTextAppearanceInformation(int styleName, String qtClass, int textAppearance, AttributeSet attributeSet) {
JSONObject json = new JSONObject();
- try
- {
- int textColorHighlight = 0; //
- ColorStateList textColor = null; //
- ColorStateList textColorHint = null; //
- ColorStateList textColorLink = null; //
- int textSize = 15; //
- int typefaceIndex = -1; //
+ extractViewInformation(styleName, json, qtClass, attributeSet);
+
+ if (textAppearance == -1)
+ textAppearance = android.R.attr.textAppearance;
+
+ try {
+ TypedValue typedValue = new TypedValue();
+ Context ctx = new ContextThemeWrapper(m_context, m_theme);
+ ctx.getTheme().resolveAttribute(styleName, typedValue, true);
+
+ // Get textAppearance values
+ int[] textAppearanceAttr = new int[]{textAppearance};
+ TypedArray textAppearanceArray = ctx.obtainStyledAttributes(typedValue.data, textAppearanceAttr);
+ int textAppearanceId = textAppearanceArray.getResourceId(0, -1);
+ textAppearanceArray.recycle();
+
+ int textSize = 15;
int styleIndex = -1;
+ int typefaceIndex = -1;
+ int textColorHighlight = 0;
boolean allCaps = false;
- Class<?> attrClass= Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
-
- extractViewInformations(styleName, styleId, json, qtClass, attribSet);
-
- int[] textViewAttrs=(int[]) styleableClass.getDeclaredField("TextView").get(null);
- TypedArray a =m_theme.obtainStyledAttributes(null, textViewAttrs, styleId, 0);
-
- TypedArray appearance = null;
- if (-1==textAppearance)
- textAppearance = a.getResourceId(styleableClass.getDeclaredField("TextView_textAppearance").getInt(null), -1);
-
- if (textAppearance != -1)
- appearance = m_theme.obtainStyledAttributes(textAppearance, (int[]) styleableClass.getDeclaredField("TextAppearance").get(null));
-
- if (appearance != null)
- {
- int n = appearance.getIndexCount();
- for (int i = 0; i < n; i++)
- {
- int attr = appearance.getIndex(i);
- if (attr == TextAppearance_textColorHighlight)
- textColorHighlight = appearance.getColor(attr, textColorHighlight);
- else if (attr == TextAppearance_textColor)
- textColor = appearance.getColorStateList(attr);
- else if (attr == TextAppearance_textColorHint)
- textColorHint = appearance.getColorStateList(attr);
- else if (attr == TextAppearance_textColorLink)
- textColorLink = appearance.getColorStateList(attr);
- else if (attr == TextAppearance_textSize)
- textSize = appearance.getDimensionPixelSize(attr, textSize);
- else if (attr == TextAppearance_typeface)
- typefaceIndex = appearance.getInt(attr, -1);
- else if (attr == TextAppearance_textStyle)
- styleIndex = appearance.getInt(attr, -1);
- else if (attr == TextAppearance_textAllCaps)
- allCaps = appearance.getBoolean(attr, false);
- }
- appearance.recycle();
+ if (textAppearanceId != -1) {
+ int[] attributes = new int[]{
+ android.R.attr.textSize,
+ android.R.attr.textStyle,
+ android.R.attr.typeface,
+ android.R.attr.textAllCaps,
+ android.R.attr.textColorHighlight
+ };
+ Arrays.sort(attributes);
+ TypedArray array = m_theme.obtainStyledAttributes(textAppearanceId, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ textSize = array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.textSize), 15);
+ styleIndex = array.getInt(sortedAttrs.indexOf(android.R.attr.textStyle), -1);
+ typefaceIndex = array.getInt(sortedAttrs.indexOf(android.R.attr.typeface), -1);
+ textColorHighlight = array.getColor(sortedAttrs.indexOf(android.R.attr.textColorHighlight), 0);
+ allCaps = array.getBoolean(sortedAttrs.indexOf(android.R.attr.textAllCaps), false);
+ array.recycle();
}
+ // Get TextView values
+ int[] attributes = new int[]{
+ android.R.attr.editable,
+ android.R.attr.inputMethod,
+ android.R.attr.numeric,
+ android.R.attr.digits,
+ android.R.attr.phoneNumber,
+ android.R.attr.autoText,
+ android.R.attr.capitalize,
+ android.R.attr.bufferType,
+ android.R.attr.selectAllOnFocus,
+ android.R.attr.autoLink,
+ android.R.attr.linksClickable,
+ android.R.attr.drawableLeft,
+ android.R.attr.drawableTop,
+ android.R.attr.drawableRight,
+ android.R.attr.drawableBottom,
+ android.R.attr.drawableStart,
+ android.R.attr.drawableEnd,
+ android.R.attr.maxLines,
+ android.R.attr.drawablePadding,
+ android.R.attr.textCursorDrawable,
+ android.R.attr.maxHeight,
+ android.R.attr.lines,
+ android.R.attr.height,
+ android.R.attr.minLines,
+ android.R.attr.minHeight,
+ android.R.attr.maxEms,
+ android.R.attr.maxWidth,
+ android.R.attr.ems,
+ android.R.attr.width,
+ android.R.attr.minEms,
+ android.R.attr.minWidth,
+ android.R.attr.gravity,
+ android.R.attr.hint,
+ android.R.attr.text,
+ android.R.attr.scrollHorizontally,
+ android.R.attr.singleLine,
+ android.R.attr.ellipsize,
+ android.R.attr.marqueeRepeatLimit,
+ android.R.attr.includeFontPadding,
+ android.R.attr.cursorVisible,
+ android.R.attr.maxLength,
+ android.R.attr.textScaleX,
+ android.R.attr.freezesText,
+ android.R.attr.shadowColor,
+ android.R.attr.shadowDx,
+ android.R.attr.shadowDy,
+ android.R.attr.shadowRadius,
+ android.R.attr.enabled,
+ android.R.attr.textColorHighlight,
+ android.R.attr.textColor,
+ android.R.attr.textColorHint,
+ android.R.attr.textColorLink,
+ android.R.attr.textSize,
+ android.R.attr.typeface,
+ android.R.attr.textStyle,
+ android.R.attr.password,
+ android.R.attr.lineSpacingExtra,
+ android.R.attr.lineSpacingMultiplier,
+ android.R.attr.inputType,
+ android.R.attr.imeOptions,
+ android.R.attr.imeActionLabel,
+ android.R.attr.imeActionId,
+ android.R.attr.privateImeOptions,
+ android.R.attr.textSelectHandleLeft,
+ android.R.attr.textSelectHandleRight,
+ android.R.attr.textSelectHandle,
+ android.R.attr.textIsSelectable,
+ android.R.attr.textAllCaps
+ };
+
+ // The array must be sorted in ascending order, otherwise obtainStyledAttributes()
+ // might fail to find some attributes
+ Arrays.sort(attributes);
+ TypedArray array = ctx.obtainStyledAttributes(typedValue.data, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ textSize = array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.textSize), textSize);
+ styleIndex = array.getInt(sortedAttrs.indexOf(android.R.attr.textStyle), styleIndex);
+ typefaceIndex = array.getInt(sortedAttrs.indexOf(android.R.attr.typeface), typefaceIndex);
+ textColorHighlight = array.getColor(sortedAttrs.indexOf(android.R.attr.textColorHighlight), textColorHighlight);
+ allCaps = array.getBoolean(sortedAttrs.indexOf(android.R.attr.textAllCaps), allCaps);
+
+ ColorStateList textColor = array.getColorStateList(sortedAttrs.indexOf(android.R.attr.textColor));
+ ColorStateList textColorHint = array.getColorStateList(sortedAttrs.indexOf(android.R.attr.textColorHint));
+ ColorStateList textColorLink = array.getColorStateList(sortedAttrs.indexOf(android.R.attr.textColorLink));
+
+ json.put("TextAppearance_textSize", textSize);
+ json.put("TextAppearance_textStyle", styleIndex);
+ json.put("TextAppearance_typeface", typefaceIndex);
+ json.put("TextAppearance_textColorHighlight", textColorHighlight);
+ json.put("TextAppearance_textAllCaps", allCaps);
+ if (textColor != null)
+ json.put("TextAppearance_textColor", getColorStateList(textColor));
+ if (textColorHint != null)
+ json.put("TextAppearance_textColorHint", getColorStateList(textColorHint));
+ if (textColorLink != null)
+ json.put("TextAppearance_textColorLink", getColorStateList(textColorLink));
+
+ json.put("TextView_editable", array.getBoolean(sortedAttrs.indexOf(android.R.attr.editable), false));
+ json.put("TextView_inputMethod", array.getText(sortedAttrs.indexOf(android.R.attr.inputMethod)));
+ json.put("TextView_numeric", array.getInt(sortedAttrs.indexOf(android.R.attr.numeric), 0));
+ json.put("TextView_digits", array.getText(sortedAttrs.indexOf(android.R.attr.digits)));
+ json.put("TextView_phoneNumber", array.getBoolean(sortedAttrs.indexOf(android.R.attr.phoneNumber), false));
+ json.put("TextView_autoText", array.getBoolean(sortedAttrs.indexOf(android.R.attr.autoText), false));
+ json.put("TextView_capitalize", array.getInt(sortedAttrs.indexOf(android.R.attr.capitalize), -1));
+ json.put("TextView_bufferType", array.getInt(sortedAttrs.indexOf(android.R.attr.bufferType), 0));
+ json.put("TextView_selectAllOnFocus", array.getBoolean(sortedAttrs.indexOf(android.R.attr.selectAllOnFocus), false));
+ json.put("TextView_autoLink", array.getInt(sortedAttrs.indexOf(android.R.attr.autoLink), 0));
+ json.put("TextView_linksClickable", array.getBoolean(sortedAttrs.indexOf(android.R.attr.linksClickable), true));
+ json.put("TextView_drawableLeft", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.drawableLeft)), styleName + "_TextView_drawableLeft", null));
+ json.put("TextView_drawableTop", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.drawableTop)), styleName + "_TextView_drawableTop", null));
+ json.put("TextView_drawableRight", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.drawableRight)), styleName + "_TextView_drawableRight", null));
+ json.put("TextView_drawableBottom", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.drawableBottom)), styleName + "_TextView_drawableBottom", null));
+ json.put("TextView_drawableStart", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.drawableStart)), styleName + "_TextView_drawableStart", null));
+ json.put("TextView_drawableEnd", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.drawableEnd)), styleName + "_TextView_drawableEnd", null));
+ json.put("TextView_maxLines", array.getInt(sortedAttrs.indexOf(android.R.attr.maxLines), -1));
+ json.put("TextView_drawablePadding", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.drawablePadding), 0));
- int n = a.getIndexCount();
-
- for (int i = 0; i < n; i++) {
- int attr = a.getIndex(i);
-
- if (attr == TextView_editable)
- json.put("TextView_editable", a.getBoolean(attr, false));
- else if (attr == TextView_inputMethod)
- json.put("TextView_inputMethod", a.getText(attr));
- else if (attr == TextView_numeric)
- json.put("TextView_numeric", a.getInt(attr, 0));
- else if (attr == TextView_digits)
- json.put("TextView_digits", a.getText(attr));
- else if (attr == TextView_phoneNumber)
- json.put("TextView_phoneNumber", a.getBoolean(attr, false));
- else if (attr == TextView_autoText)
- json.put("TextView_autoText", a.getBoolean(attr, false));
- else if (attr == TextView_capitalize)
- json.put("TextView_capitalize", a.getInt(attr, -1));
- else if (attr == TextView_bufferType)
- json.put("TextView_bufferType", a.getInt(attr, 0));
- else if (attr == TextView_selectAllOnFocus)
- json.put("TextView_selectAllOnFocus", a.getBoolean(attr, false));
- else if (attr == TextView_autoLink)
- json.put("TextView_autoLink", a.getInt(attr, 0));
- else if (attr == TextView_linksClickable)
- json.put("TextView_linksClickable", a.getBoolean(attr, true));
- else if (attr == TextView_linksClickable)
- json.put("TextView_linksClickable", a.getBoolean(attr, true));
- else if (attr == TextView_drawableLeft)
- json.put("TextView_drawableLeft", getDrawable(a.getDrawable(attr), styleName + "_TextView_drawableLeft", null));
- else if (attr == TextView_drawableTop)
- json.put("TextView_drawableTop", getDrawable(a.getDrawable(attr), styleName + "_TextView_drawableTop", null));
- else if (attr == TextView_drawableRight)
- json.put("TextView_drawableRight", getDrawable(a.getDrawable(attr), styleName + "_TextView_drawableRight", null));
- else if (attr == TextView_drawableBottom)
- json.put("TextView_drawableBottom", getDrawable(a.getDrawable(attr), styleName + "_TextView_drawableBottom", null));
- else if (attr == TextView_drawableStart)
- json.put("TextView_drawableStart", getDrawable(a.getDrawable(attr), styleName + "_TextView_drawableStart", null));
- else if (attr == TextView_drawableEnd)
- json.put("TextView_drawableEnd", getDrawable(a.getDrawable(attr), styleName + "_TextView_drawableEnd", null));
- else if (attr == TextView_drawablePadding)
- json.put("TextView_drawablePadding", a.getDimensionPixelSize(attr, 0));
- else if (attr == TextView_textCursorDrawable) {
- try {
- json.put("TextView_textCursorDrawable", getDrawable(a.getDrawable(attr), styleName + "_TextView_textCursorDrawable", null));
- } catch (Exception e_) {
- try {
- json.put("TextView_textCursorDrawable", getDrawable(m_context.getResources().getDrawable(a.getResourceId(attr, 0)), styleName + "_TextView_textCursorDrawable", null));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }else if (attr == TextView_maxLines)
- json.put("TextView_maxLines", a.getInt(attr, -1));
- else if (attr == TextView_maxHeight)
- json.put("TextView_maxHeight", a.getDimensionPixelSize(attr, -1));
- else if (attr == TextView_lines)
- json.put("TextView_lines", a.getInt(attr, -1));
- else if (attr == TextView_height)
- json.put("TextView_height", a.getDimensionPixelSize(attr, -1));
- else if (attr == TextView_minLines)
- json.put("TextView_minLines", a.getInt(attr, -1));
- else if (attr == TextView_minHeight)
- json.put("TextView_minHeight", a.getDimensionPixelSize(attr, -1));
- else if (attr == TextView_maxEms)
- json.put("TextView_maxEms", a.getInt(attr, -1));
- else if (attr == TextView_maxWidth)
- json.put("TextView_maxWidth", a.getDimensionPixelSize(attr, -1));
- else if (attr == TextView_ems)
- json.put("TextView_ems", a.getInt(attr, -1));
- else if (attr == TextView_width)
- json.put("TextView_width", a.getDimensionPixelSize(attr, -1));
- else if (attr == TextView_minEms)
- json.put("TextView_minEms", a.getInt(attr, -1));
- else if (attr == TextView_minWidth)
- json.put("TextView_minWidth", a.getDimensionPixelSize(attr, -1));
- else if (attr == TextView_gravity)
- json.put("TextView_gravity", a.getInt(attr, -1));
- else if (attr == TextView_hint)
- json.put("TextView_hint", a.getText(attr));
- else if (attr == TextView_text)
- json.put("TextView_text", a.getText(attr));
- else if (attr == TextView_scrollHorizontally)
- json.put("TextView_scrollHorizontally", a.getBoolean(attr, false));
- else if (attr == TextView_singleLine)
- json.put("TextView_singleLine", a.getBoolean(attr, false));
- else if (attr == TextView_ellipsize)
- json.put("TextView_ellipsize", a.getInt(attr, -1));
- else if (attr == TextView_marqueeRepeatLimit)
- json.put("TextView_marqueeRepeatLimit", a.getInt(attr, 3));
- else if (attr == TextView_includeFontPadding)
- json.put("TextView_includeFontPadding", a.getBoolean(attr, true));
- else if (attr == TextView_cursorVisible)
- json.put("TextView_cursorVisible", a.getBoolean(attr, true));
- else if (attr == TextView_maxLength)
- json.put("TextView_maxLength", a.getInt(attr, -1));
- else if (attr == TextView_textScaleX)
- json.put("TextView_textScaleX", a.getFloat(attr, 1.0f));
- else if (attr == TextView_freezesText)
- json.put("TextView_freezesText", a.getBoolean(attr, false));
- else if (attr == TextView_shadowColor)
- json.put("TextView_shadowColor", a.getInt(attr, 0));
- else if (attr == TextView_shadowDx)
- json.put("TextView_shadowDx", a.getFloat(attr, 0));
- else if (attr == TextView_shadowDy)
- json.put("TextView_shadowDy", a.getFloat(attr, 0));
- else if (attr == TextView_shadowRadius)
- json.put("TextView_shadowRadius", a.getFloat(attr, 0));
- else if (attr == TextView_enabled)
- json.put("TextView_enabled", a.getBoolean(attr,true));
- else if (attr == TextView_textColorHighlight)
- textColorHighlight = a.getColor(attr, textColorHighlight);
- else if (attr == TextView_textColor)
- textColor = a.getColorStateList(attr);
- else if (attr == TextView_textColorHint)
- textColorHint = a.getColorStateList(attr);
- else if (attr == TextView_textColorLink)
- textColorLink = a.getColorStateList(attr);
- else if (attr == TextView_textSize)
- textSize = a.getDimensionPixelSize(attr, textSize);
- else if (attr == TextView_typeface)
- typefaceIndex = a.getInt(attr, typefaceIndex);
- else if (attr == TextView_textStyle)
- styleIndex = a.getInt(attr, styleIndex);
- else if (attr == TextView_password)
- json.put("TextView_password", a.getBoolean(attr,false));
- else if (attr == TextView_lineSpacingExtra)
- json.put("TextView_lineSpacingExtra", a.getDimensionPixelSize(attr, 0));
- else if (attr == TextView_lineSpacingMultiplier)
- json.put("TextView_lineSpacingMultiplier", a.getFloat(attr, 1.0f));
- else if (attr == TextView_inputType)
- json.put("TextView_inputType", a.getInt(attr, EditorInfo.TYPE_NULL));
- else if (attr == TextView_imeOptions)
- json.put("TextView_imeOptions", a.getInt(attr, EditorInfo.IME_NULL));
- else if (attr == TextView_imeActionLabel)
- json.put("TextView_imeActionLabel", a.getText(attr));
- else if (attr == TextView_imeActionId)
- json.put("TextView_imeActionId", a.getInt(attr,0));
- else if (attr == TextView_privateImeOptions)
- json.put("TextView_privateImeOptions", a.getString(attr));
- else if (attr == TextView_textSelectHandleLeft && styleName.equals("textViewStyle")) {
- try {
- json.put("TextView_textSelectHandleLeft", getDrawable(a.getDrawable(attr), styleName + "_TextView_textSelectHandleLeft", null));
- } catch (Exception _e) {
- try {
- json.put("TextView_textSelectHandleLeft", getDrawable(m_context.getResources().getDrawable(a.getResourceId(attr, 0)), styleName + "_TextView_textSelectHandleLeft", null));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } else if (attr == TextView_textSelectHandleRight && styleName.equals("textViewStyle")) {
- try {
- json.put("TextView_textSelectHandleRight", getDrawable(a.getDrawable(attr), styleName + "_TextView_textSelectHandleRight", null));
- } catch (Exception _e) {
- try {
- json.put("TextView_textSelectHandleRight", getDrawable(m_context.getResources().getDrawable(a.getResourceId(attr, 0)), styleName + "_TextView_textSelectHandleRight", null));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } else if (attr == TextView_textSelectHandle && styleName.equals("textViewStyle")) {
- try {
- json.put("TextView_textSelectHandle", getDrawable(a.getDrawable(attr), styleName + "_TextView_textSelectHandle", null));
- } catch (Exception _e) {
- try {
- json.put("TextView_textSelectHandle", getDrawable(m_context.getResources().getDrawable(a.getResourceId(attr, 0)), styleName + "_TextView_textSelectHandle", null));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } else if (attr == TextView_textIsSelectable)
- json.put("TextView_textIsSelectable", a.getBoolean(attr, false));
- else if (attr == TextView_textAllCaps)
- allCaps = a.getBoolean(attr, false);
+ try {
+ json.put("TextView_textCursorDrawable", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.textCursorDrawable)), styleName + "_TextView_textCursorDrawable", null));
+ } catch (Exception e_) {
+ json.put("TextView_textCursorDrawable", getDrawable(m_context.getResources().getDrawable(array.getResourceId(sortedAttrs.indexOf(android.R.attr.textCursorDrawable), 0), m_theme), styleName + "_TextView_textCursorDrawable", null));
}
- a.recycle();
-
- json.put("TextAppearance_textColorHighlight",textColorHighlight);
- json.put("TextAppearance_textColor", getColorStateList(textColor));
- json.put("TextAppearance_textColorHint", getColorStateList(textColorHint));
- json.put("TextAppearance_textColorLink", getColorStateList(textColorLink));
- json.put("TextAppearance_textSize",textSize);
- json.put("TextAppearance_typeface",typefaceIndex);
- json.put("TextAppearance_textStyle",styleIndex);
- json.put("TextAppearance_textAllCaps",allCaps);
- }
- catch(Exception e)
- {
+
+ json.put("TextView_maxLines", array.getInt(sortedAttrs.indexOf(android.R.attr.maxLines), -1));
+ json.put("TextView_maxHeight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.maxHeight), -1));
+ json.put("TextView_lines", array.getInt(sortedAttrs.indexOf(android.R.attr.lines), -1));
+ json.put("TextView_height", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.height), -1));
+ json.put("TextView_minLines", array.getInt(sortedAttrs.indexOf(android.R.attr.minLines), -1));
+ json.put("TextView_minHeight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.minHeight), -1));
+ json.put("TextView_maxEms", array.getInt(sortedAttrs.indexOf(android.R.attr.maxEms), -1));
+ json.put("TextView_maxWidth", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.maxWidth), -1));
+ json.put("TextView_ems", array.getInt(sortedAttrs.indexOf(android.R.attr.ems), -1));
+ json.put("TextView_width", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.width), -1));
+ json.put("TextView_minEms", array.getInt(sortedAttrs.indexOf(android.R.attr.minEms), -1));
+ json.put("TextView_minWidth", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.minWidth), -1));
+ json.put("TextView_gravity", array.getInt(sortedAttrs.indexOf(android.R.attr.gravity), -1));
+ json.put("TextView_hint", array.getText(sortedAttrs.indexOf(android.R.attr.hint)));
+ json.put("TextView_text", array.getText(sortedAttrs.indexOf(android.R.attr.text)));
+ json.put("TextView_scrollHorizontally", array.getBoolean(sortedAttrs.indexOf(android.R.attr.scrollHorizontally), false));
+ json.put("TextView_singleLine", array.getBoolean(sortedAttrs.indexOf(android.R.attr.singleLine), false));
+ json.put("TextView_ellipsize", array.getInt(sortedAttrs.indexOf(android.R.attr.ellipsize), -1));
+ json.put("TextView_marqueeRepeatLimit", array.getInt(sortedAttrs.indexOf(android.R.attr.marqueeRepeatLimit), 3));
+ json.put("TextView_includeFontPadding", array.getBoolean(sortedAttrs.indexOf(android.R.attr.includeFontPadding), true));
+ json.put("TextView_cursorVisible", array.getBoolean(sortedAttrs.indexOf(android.R.attr.maxLength), true));
+ json.put("TextView_maxLength", array.getInt(sortedAttrs.indexOf(android.R.attr.maxLength), -1));
+ json.put("TextView_textScaleX", array.getFloat(sortedAttrs.indexOf(android.R.attr.textScaleX), 1.0f));
+ json.put("TextView_freezesText", array.getBoolean(sortedAttrs.indexOf(android.R.attr.freezesText), false));
+ json.put("TextView_shadowColor", array.getInt(sortedAttrs.indexOf(android.R.attr.shadowColor), 0));
+ json.put("TextView_shadowDx", array.getFloat(sortedAttrs.indexOf(android.R.attr.shadowDx), 0));
+ json.put("TextView_shadowDy", array.getFloat(sortedAttrs.indexOf(android.R.attr.shadowDy), 0));
+ json.put("TextView_shadowRadius", array.getFloat(sortedAttrs.indexOf(android.R.attr.shadowRadius), 0));
+ json.put("TextView_enabled", array.getBoolean(sortedAttrs.indexOf(android.R.attr.enabled), true));
+ json.put("TextView_password", array.getBoolean(sortedAttrs.indexOf(android.R.attr.password), false));
+ json.put("TextView_lineSpacingExtra", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.lineSpacingExtra), 0));
+ json.put("TextView_lineSpacingMultiplier", array.getFloat(sortedAttrs.indexOf(android.R.attr.lineSpacingMultiplier), 1.0f));
+ json.put("TextView_inputType", array.getInt(sortedAttrs.indexOf(android.R.attr.inputType), EditorInfo.TYPE_NULL));
+ json.put("TextView_imeOptions", array.getInt(sortedAttrs.indexOf(android.R.attr.imeOptions), EditorInfo.IME_NULL));
+ json.put("TextView_imeActionLabel", array.getText(sortedAttrs.indexOf(android.R.attr.imeActionLabel)));
+ json.put("TextView_imeActionId", array.getInt(sortedAttrs.indexOf(android.R.attr.imeActionId), 0));
+ json.put("TextView_privateImeOptions", array.getString(sortedAttrs.indexOf(android.R.attr.privateImeOptions)));
+
+ try {
+ json.put("TextView_textSelectHandleLeft", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.textSelectHandleLeft)), styleName + "_TextView_textSelectHandleLeft", null));
+ } catch (Exception _e) {
+ json.put("TextView_textSelectHandleLeft", getDrawable(m_context.getResources().getDrawable(array.getResourceId(sortedAttrs.indexOf(android.R.attr.textSelectHandleLeft), 0), m_theme), styleName + "_TextView_textSelectHandleLeft", null));
+ }
+
+ try {
+ json.put("TextView_textSelectHandleRight", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.textSelectHandleRight)), styleName + "_TextView_textSelectHandleRight", null));
+ } catch (Exception _e) {
+ json.put("TextView_textSelectHandleRight", getDrawable(m_context.getResources().getDrawable(array.getResourceId(sortedAttrs.indexOf(android.R.attr.textSelectHandleRight), 0), m_theme), styleName + "_TextView_textSelectHandleRight", null));
+ }
+
+ try {
+ json.put("TextView_textSelectHandle", getDrawable(array.getDrawable(sortedAttrs.indexOf(android.R.attr.textSelectHandle)), styleName + "_TextView_textSelectHandle", null));
+ } catch (Exception _e) {
+ json.put("TextView_textSelectHandle", getDrawable(m_context.getResources().getDrawable(array.getResourceId(sortedAttrs.indexOf(android.R.attr.textSelectHandle), 0), m_theme), styleName + "_TextView_textSelectHandle", null));
+ }
+ json.put("TextView_textIsSelectable", array.getBoolean(sortedAttrs.indexOf(android.R.attr.textIsSelectable), false));
+ array.recycle();
+ } catch (Exception e) {
e.printStackTrace();
}
return json;
}
- final String[] sScaleTypeArray = {
- "MATRIX",
- "FIT_XY",
- "FIT_START",
- "FIT_CENTER",
- "FIT_END",
- "CENTER",
- "CENTER_CROP",
- "CENTER_INSIDE"
- };
-
- public JSONObject extractImageViewInformations(String styleName, String qtClassName )
- {
+ public JSONObject extractImageViewInformation(int styleName, String qtClassName) {
JSONObject json = new JSONObject();
- try
- {
- Class<?> attrClass= Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
-
- extractViewInformations(styleName, styleId, json, qtClassName, null);
-
- int[] imageViewAttrs=(int[]) styleableClass.getDeclaredField("ImageView").get(null);
- TypedArray a =m_theme.obtainStyledAttributes(null, imageViewAttrs, styleId, 0);
- Drawable d = a.getDrawable(ImageView_src);
- if (d != null)
- json.put("ImageView_src", getDrawable(d, styleName + "_ImageView_src", null));
-
- json.put("ImageView_baselineAlignBottom", a.getBoolean(ImageView_baselineAlignBottom, false));
- json.put("ImageView_adjustViewBounds", a.getBoolean(ImageView_adjustViewBounds, false));
- json.put("ImageView_maxWidth", a.getDimensionPixelSize(ImageView_maxWidth, Integer.MAX_VALUE));
- json.put("ImageView_maxHeight", a.getDimensionPixelSize(ImageView_maxHeight, Integer.MAX_VALUE));
- int index = a.getInt(ImageView_scaleType, -1);
+ try {
+ extractViewInformation(styleName, json, qtClassName);
+
+ int[] attributes = new int[]{
+ android.R.attr.src,
+ android.R.attr.baselineAlignBottom,
+ android.R.attr.adjustViewBounds,
+ android.R.attr.maxWidth,
+ android.R.attr.maxHeight,
+ android.R.attr.scaleType,
+ android.R.attr.cropToPadding,
+ android.R.attr.tint
+
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(styleName, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable drawable = array.getDrawable(sortedAttrs.indexOf(android.R.attr.src));
+ if (drawable != null)
+ json.put("ImageView_src", getDrawable(drawable, styleName + "_ImageView_src", null));
+
+ json.put("ImageView_baselineAlignBottom", array.getBoolean(sortedAttrs.indexOf(android.R.attr.baselineAlignBottom), false));
+ json.put("ImageView_adjustViewBounds", array.getBoolean(sortedAttrs.indexOf(android.R.attr.baselineAlignBottom), false));
+ json.put("ImageView_maxWidth", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.maxWidth), Integer.MAX_VALUE));
+ json.put("ImageView_maxHeight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.maxHeight), Integer.MAX_VALUE));
+ int index = array.getInt(sortedAttrs.indexOf(android.R.attr.scaleType), -1);
if (index >= 0)
json.put("ImageView_scaleType", sScaleTypeArray[index]);
- int tint = a.getInt(ImageView_tint, 0);
+ int tint = array.getInt(sortedAttrs.indexOf(android.R.attr.tint), 0);
if (tint != 0)
json.put("ImageView_tint", tint);
-
- json.put("ImageView_cropToPadding",a.getBoolean(ImageView_cropToPadding, false));
- a.recycle();
- }
- catch(Exception e)
- {
+ json.put("ImageView_cropToPadding", array.getBoolean(sortedAttrs.indexOf(android.R.attr.cropToPadding), false));
+ array.recycle();
+ } catch (Exception e) {
e.printStackTrace();
}
return json;
-
}
- void extractCompoundButton(SimpleJsonWriter jsonWriter, String styleName, String qtClass)
- {
- JSONObject json = extractTextAppearanceInformations(styleName, qtClass, null, -1);
- Class<?> attrClass;
- try {
- attrClass = Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
- int[] compoundButtonAttrs=(int[]) styleableClass.getDeclaredField("CompoundButton").get(null);
-
- TypedArray a = m_theme.obtainStyledAttributes(
- null, compoundButtonAttrs, styleId, 0);
+ void extractCompoundButton(SimpleJsonWriter jsonWriter, int styleName, String className, String qtClass) {
+ JSONObject json = extractTextAppearanceInformation(styleName, qtClass);
- Drawable d = a.getDrawable(getField(styleableClass,"CompoundButton_button"));
- if (d != null)
- json.put("CompoundButton_button", getDrawable(d, styleName + "_CompoundButton_button", null));
+ TypedValue typedValue = new TypedValue();
+ Context ctx = new ContextThemeWrapper(m_context, m_theme);
+ ctx.getTheme().resolveAttribute(styleName, typedValue, true);
+ final int[] attributes = new int[]{android.R.attr.button};
+ TypedArray array = ctx.obtainStyledAttributes(typedValue.data, attributes);
+ Drawable drawable = array.getDrawable(0);
+ array.recycle();
- a.recycle();
- jsonWriter.name(styleName).value(json);
+ try {
+ if (drawable != null)
+ json.put("CompoundButton_button", getDrawable(drawable, styleName + "_CompoundButton_button", null));
+ jsonWriter.name(className).value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractProgressBarInfo(JSONObject json, String styleName)
- {
- Class<?> attrClass;
+ void extractProgressBarInfo(JSONObject json, int styleName) {
try {
- attrClass = Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
- int[] progressBarAttrs=(int[]) styleableClass.getDeclaredField("ProgressBar").get(null);
-
- TypedArray a = m_theme.obtainStyledAttributes(null, progressBarAttrs, styleId, 0);
- int mMinWidth = 24;
- int mMaxWidth = 48;
- int mMinHeight = 24;
- int mMaxHeight = 48;
- mMinWidth = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_minWidth"), mMinWidth);
- mMaxWidth = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_maxWidth"), mMaxWidth);
- mMinHeight = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_minHeight"), mMinHeight);
- mMaxHeight = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_maxHeight"), mMaxHeight);
-
- json.put("ProgressBar_indeterminateDuration", a.getInt(getField(styleableClass, "ProgressBar_indeterminateDuration"), 4000));
- json.put("ProgressBar_minWidth", mMinWidth);
- json.put("ProgressBar_maxWidth", mMaxWidth);
- json.put("ProgressBar_minHeight", mMinHeight);
- json.put("ProgressBar_maxHeight", mMaxHeight);
+ final int[] attributes = new int[]{
+ android.R.attr.minWidth,
+ android.R.attr.maxWidth,
+ android.R.attr.minHeight,
+ android.R.attr.maxHeight,
+ android.R.attr.indeterminateDuration,
+ android.R.attr.progressDrawable,
+ android.R.attr.indeterminateDrawable
+ };
+
+ // The array must be sorted in ascending order, otherwise obtainStyledAttributes()
+ // might fail to find some attributes
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(styleName, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ json.put("ProgressBar_indeterminateDuration", array.getInt(sortedAttrs.indexOf(android.R.attr.indeterminateDuration), 4000));
+ json.put("ProgressBar_minWidth", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.minWidth), 24));
+ json.put("ProgressBar_maxWidth", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.maxWidth), 48));
+ json.put("ProgressBar_minHeight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.minHeight), 24));
+ json.put("ProgressBar_maxHeight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.maxHeight), 28));
json.put("ProgressBar_progress_id", android.R.id.progress);
json.put("ProgressBar_secondaryProgress_id", android.R.id.secondaryProgress);
- Drawable d = a.getDrawable(getField(styleableClass,"ProgressBar_progressDrawable"));
- if (d != null)
- json.put("ProgressBar_progressDrawable", getDrawable(d, styleName + "_ProgressBar_progressDrawable", null));
+ Drawable drawable = array.getDrawable(sortedAttrs.indexOf(android.R.attr.progressDrawable));
+ if (drawable != null)
+ json.put("ProgressBar_progressDrawable", getDrawable(drawable,
+ styleName + "_ProgressBar_progressDrawable", null));
- d = a.getDrawable(getField(styleableClass,"ProgressBar_indeterminateDrawable"));
- if (d != null)
- json.put("ProgressBar_indeterminateDrawable", getDrawable(d, styleName + "_ProgressBar_indeterminateDrawable", null));
+ drawable = array.getDrawable(sortedAttrs.indexOf(android.R.attr.indeterminateDrawable));
+ if (drawable != null)
+ json.put("ProgressBar_indeterminateDrawable", getDrawable(drawable,
+ styleName + "_ProgressBar_indeterminateDrawable", null));
- a.recycle();
+ array.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractProgressBar(SimpleJsonWriter writer, String styleName, String qtClass)
- {
- JSONObject json = extractTextAppearanceInformations(styleName, qtClass, null, -1);
+ void extractProgressBar(SimpleJsonWriter writer, int styleName, String className, String qtClass) {
+ JSONObject json = extractTextAppearanceInformation(android.R.attr.progressBarStyle, qtClass);
try {
extractProgressBarInfo(json, styleName);
- writer.name(styleName).value(json);
+ writer.name(className).value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractAbsSeekBar(SimpleJsonWriter jsonWriter, String styleName, String qtClass)
- {
- JSONObject json = extractTextAppearanceInformations(styleName, qtClass, null, -1);
- extractProgressBarInfo(json, styleName);
- Class<?> attrClass;
+ void extractAbsSeekBar(SimpleJsonWriter jsonWriter) {
+ JSONObject json = extractTextAppearanceInformation(android.R.attr.seekBarStyle, "QSlider");
+ extractProgressBarInfo(json, android.R.attr.seekBarStyle);
try {
- attrClass = Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
- int[] compoundButtonAttrs=(int[]) styleableClass.getDeclaredField("SeekBar").get(null);
-
- TypedArray a = m_theme.obtainStyledAttributes(
- null, compoundButtonAttrs, styleId, 0);
-
- Drawable d = a.getDrawable(getField(styleableClass,"SeekBar_thumb"));
+ int[] attributes = new int[]{
+ android.R.attr.thumb,
+ android.R.attr.thumbOffset
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.seekBarStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable d = array.getDrawable(sortedAttrs.indexOf(android.R.attr.thumb));
if (d != null)
- json.put("SeekBar_thumb", getDrawable(d, styleName + "_SeekBar_thumb", null));
-
- try {
- json.put("SeekBar_thumbOffset", styleableClass.getDeclaredField("SeekBar_thumbOffset").getInt(null));
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- a.recycle();
- jsonWriter.name(styleName).value(json);
+ json.put("SeekBar_thumb", getDrawable(d, android.R.attr.seekBarStyle + "_SeekBar_thumb", null));
+ json.put("SeekBar_thumbOffset", array.getDimensionPixelOffset(sortedAttrs.indexOf(android.R.attr.thumbOffset), -1));
+ array.recycle();
+ jsonWriter.name("seekBarStyle").value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractSwitch(SimpleJsonWriter jsonWriter, String styleName, String qtClass)
- {
+ void extractSwitch(SimpleJsonWriter jsonWriter) {
JSONObject json = new JSONObject();
try {
- Class<?> attrClass = Class.forName("com.android.internal.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
-
- int[] switchAttrs = (int[]) styleableClass.getDeclaredField("Switch").get(null);
- TypedArray a = m_theme.obtainStyledAttributes(null, switchAttrs, styleId, 0);
-
- Drawable thumb = a.getDrawable(getField(styleableClass,"Switch_thumb"));
+ int[] attributes = new int[]{
+ android.R.attr.thumb,
+ android.R.attr.track,
+ android.R.attr.switchTextAppearance,
+ android.R.attr.textOn,
+ android.R.attr.textOff,
+ android.R.attr.switchMinWidth,
+ android.R.attr.switchPadding,
+ android.R.attr.thumbTextPadding,
+ android.R.attr.showText,
+ android.R.attr.splitTrack
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.switchStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable thumb = array.getDrawable(sortedAttrs.indexOf(android.R.attr.thumb));
if (thumb != null)
- json.put("Switch_thumb", getDrawable(thumb, styleName + "_Switch_thumb", null));
+ json.put("Switch_thumb", getDrawable(thumb, android.R.attr.switchStyle + "_Switch_thumb", null));
- Drawable track = a.getDrawable(getField(styleableClass,"Switch_track"));
+ Drawable track = array.getDrawable(sortedAttrs.indexOf(android.R.attr.track));
if (track != null)
- json.put("Switch_track", getDrawable(track, styleName + "_Switch_track", null));
-
- int textAppearance = a.getResourceId(styleableClass.getDeclaredField("Switch_switchTextAppearance").getInt(null), -1);
- json.put("Switch_switchTextAppearance", extractTextAppearance(textAppearance));
-
- json.put("Switch_textOn", a.getText(getField(styleableClass, "Switch_textOn")));
- json.put("Switch_textOff", a.getText(getField(styleableClass, "Switch_textOff")));
- json.put("Switch_switchMinWidth", a.getDimensionPixelSize(getField(styleableClass, "Switch_switchMinWidth"), 0));
- json.put("Switch_switchPadding", a.getDimensionPixelSize(getField(styleableClass, "Switch_switchPadding"), 0));
- json.put("Switch_thumbTextPadding", a.getDimensionPixelSize(getField(styleableClass, "Switch_thumbTextPadding"), 0));
-
- json.put("Switch_showText", a.getBoolean(getField(styleableClass, "Switch_showText"), true));
- json.put("Switch_splitTrack", a.getBoolean(getField(styleableClass, "Switch_splitTrack"), false));
-
- a.recycle();
- jsonWriter.name(styleName).value(json);
+ json.put("Switch_track", getDrawable(track, android.R.attr.switchStyle + "_Switch_track", null));
+
+ json.put("Switch_textOn", array.getText(sortedAttrs.indexOf(android.R.attr.textOn)));
+ json.put("Switch_textOff", array.getText(sortedAttrs.indexOf(android.R.attr.textOff)));
+ json.put("Switch_switchMinWidth", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.switchMinWidth), 0));
+ json.put("Switch_switchPadding", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.switchPadding), 0));
+ json.put("Switch_thumbTextPadding", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.thumbTextPadding), 0));
+ json.put("Switch_showText", array.getBoolean(sortedAttrs.indexOf(android.R.attr.showText), true));
+ json.put("Switch_splitTrack", array.getBoolean(sortedAttrs.indexOf(android.R.attr.splitTrack), false));
+
+ // Get textAppearance values
+ final int textAppearanceId = array.getResourceId(sortedAttrs.indexOf(android.R.attr.switchTextAppearance), -1);
+ json.put("Switch_switchTextAppearance", extractTextAppearance(textAppearanceId, true));
+
+ array.recycle();
+ jsonWriter.name("switchStyle").value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- JSONObject extractCheckedTextView(AttributeSet attribSet, String itemName)
- {
- JSONObject json = extractTextAppearanceInformations("textViewStyle", itemName, attribSet, -1);
+ JSONObject extractCheckedTextView(String itemName) {
+ JSONObject json = extractTextAppearanceInformation(android.R.attr.checkedTextViewStyle, itemName);
try {
- Class<?> attrClass= Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField("textViewStyle").getInt(null);
- int[] compoundButtonAttrs=(int[]) styleableClass.getDeclaredField("CheckedTextView").get(null);
-
- TypedArray a = m_theme.obtainStyledAttributes(attribSet, compoundButtonAttrs, styleId, 0);
-
- Drawable d = a.getDrawable(getField(styleableClass,"CheckedTextView_checkMark"));
- if (d != null)
- json.put("CheckedTextView_checkMark", getDrawable(d, itemName+"_CheckedTextView_checkMark", null));
-
- a.recycle();
+ int[] attributes = new int[]{
+ android.R.attr.checkMark,
+ };
+
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.switchStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable drawable = array.getDrawable(sortedAttrs.indexOf(android.R.attr.checkMark));
+ if (drawable != null)
+ json.put("CheckedTextView_checkMark", getDrawable(drawable, itemName + "_CheckedTextView_checkMark", null));
+ array.recycle();
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
- private JSONObject extractItemStyle(int resourceId, String itemName, int textAppearance) {
- try
- {
+ private JSONObject extractItemStyle(int resourceId, String itemName)
+ {
+ try {
XmlResourceParser parser = m_context.getResources().getLayout(resourceId);
- int type;
- while ((type = parser.next()) != XmlPullParser.START_TAG &&
- type != XmlPullParser.END_DOCUMENT) {
- // Empty
- }
+ int type = parser.next();
+ while (type != XmlPullParser.START_TAG && type != XmlPullParser.END_DOCUMENT)
+ type = parser.next();
- if (type != XmlPullParser.START_TAG) {
+ if (type != XmlPullParser.START_TAG)
return null;
- }
AttributeSet attributes = Xml.asAttributeSet(parser);
String name = parser.getName();
if (name.equals("TextView"))
- return extractTextAppearanceInformations("textViewStyle", itemName, attributes, textAppearance);
- if (name.equals("CheckedTextView"))
- return extractCheckedTextView(attributes, itemName);
+ return extractTextAppearanceInformation(android.R.attr.textViewStyle, itemName, android.R.attr.textAppearanceListItem, attributes);
+ else if (name.equals("CheckedTextView"))
+ return extractCheckedTextView(itemName);
} catch (Exception e) {
e.printStackTrace();
}
@@ -1796,243 +1573,258 @@ public class ExtractStyle {
}
private void extractItemsStyle(SimpleJsonWriter jsonWriter) {
- try
- {
- jsonWriter.name("simple_list_item").value(extractItemStyle(android.R.layout.simple_list_item_1, "simple_list_item", android.R.style.TextAppearance_Large));
- jsonWriter.name("simple_list_item_checked").value(extractItemStyle(android.R.layout.simple_list_item_checked, "simple_list_item_checked", android.R.style.TextAppearance_Large));
- jsonWriter.name("simple_list_item_multiple_choice").value(extractItemStyle(android.R.layout.simple_list_item_multiple_choice, "simple_list_item_multiple_choice", android.R.style.TextAppearance_Large));
- jsonWriter.name("simple_list_item_single_choice").value(extractItemStyle(android.R.layout.simple_list_item_single_choice, "simple_list_item_single_choice", android.R.style.TextAppearance_Large));
- jsonWriter.name("simple_spinner_item").value(extractItemStyle(android.R.layout.simple_spinner_item, "simple_spinner_item", -1));
- jsonWriter.name("simple_spinner_dropdown_item").value(extractItemStyle(android.R.layout.simple_spinner_dropdown_item, "simple_spinner_dropdown_item",android.R.style.TextAppearance_Large));
- jsonWriter.name("simple_dropdown_item_1line").value(extractItemStyle(android.R.layout.simple_dropdown_item_1line, "simple_dropdown_item_1line",android.R.style.TextAppearance_Large));
- jsonWriter.name("simple_selectable_list_item").value(extractItemStyle(android.R.layout.simple_selectable_list_item, "simple_selectable_list_item",android.R.style.TextAppearance_Large));
+ try {
+ JSONObject itemStyle = extractItemStyle(android.R.layout.simple_list_item_1, "simple_list_item");
+ if (itemStyle != null)
+ jsonWriter.name("simple_list_item").value(itemStyle);
+ itemStyle = extractItemStyle(android.R.layout.simple_list_item_checked, "simple_list_item_checked");
+ if (itemStyle != null)
+ jsonWriter.name("simple_list_item_checked").value(itemStyle);
+ itemStyle = extractItemStyle(android.R.layout.simple_list_item_multiple_choice, "simple_list_item_multiple_choice");
+ if (itemStyle != null)
+ jsonWriter.name("simple_list_item_multiple_choice").value(itemStyle);
+ itemStyle = extractItemStyle(android.R.layout.simple_list_item_single_choice, "simple_list_item_single_choice");
+ if (itemStyle != null)
+ jsonWriter.name("simple_list_item_single_choice").value(itemStyle);
+ itemStyle = extractItemStyle(android.R.layout.simple_spinner_item, "simple_spinner_item");
+ if (itemStyle != null)
+ jsonWriter.name("simple_spinner_item").value(itemStyle);
+ itemStyle = extractItemStyle(android.R.layout.simple_spinner_dropdown_item, "simple_spinner_dropdown_item");
+ if (itemStyle != null)
+ jsonWriter.name("simple_spinner_dropdown_item").value(itemStyle);
+ itemStyle = extractItemStyle(android.R.layout.simple_dropdown_item_1line, "simple_dropdown_item_1line");
+ if (itemStyle != null)
+ jsonWriter.name("simple_dropdown_item_1line").value(itemStyle);
+ itemStyle = extractItemStyle(android.R.layout.simple_selectable_list_item, "simple_selectable_list_item");
+ if (itemStyle != null)
+ jsonWriter.name("simple_selectable_list_item").value(itemStyle);
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractListView(SimpleJsonWriter writer, String styleName, String qtClass)
- {
- JSONObject json = extractTextAppearanceInformations(styleName, qtClass, null, -1);
+ void extractListView(SimpleJsonWriter writer) {
+ JSONObject json = extractTextAppearanceInformation(android.R.attr.listViewStyle, "QListView");
try {
- Class<?> attrClass = Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
-
- int[] styleAttrs = (int[]) styleableClass.getDeclaredField("ListView").get(null);
- TypedArray a = m_theme.obtainStyledAttributes(null, styleAttrs, styleId, 0);
-
- Drawable divider = a.getDrawable(getField(styleableClass,"ListView_divider"));
+ int[] attributes = new int[]{
+ android.R.attr.divider,
+ android.R.attr.dividerHeight
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.listViewStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable divider = array.getDrawable(sortedAttrs.indexOf(android.R.attr.divider));
if (divider != null)
- json.put("ListView_divider", getDrawable(divider, styleName + "_ListView_divider", null));
+ json.put("ListView_divider", getDrawable(divider, android.R.attr.listViewStyle + "_ListView_divider", null));
- json.put("ListView_dividerHeight", a.getDimensionPixelSize(getField(styleableClass, "ListView_dividerHeight"), 0));
+ json.put("ListView_dividerHeight", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.dividerHeight), 0));
- a.recycle();
- writer.name(styleName).value(json);
+ array.recycle();
+ writer.name("listViewStyle").value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractCalendar(SimpleJsonWriter writer, String styleName, String qtClass)
- {
- JSONObject json = extractTextAppearanceInformations(styleName, qtClass, null, -1);
+ void extractCalendar(SimpleJsonWriter writer) {
+ JSONObject json = extractTextAppearanceInformation(android.R.attr.calendarViewStyle, "QCalendarWidget");
try {
- Class<?> attrClass = Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
-
- int[] styleAttrs = (int[]) styleableClass.getDeclaredField("CalendarView").get(null);
- TypedArray a = m_theme.obtainStyledAttributes(null, styleAttrs, styleId, 0);
-
- Drawable d = a.getDrawable(getField(styleableClass,"CalendarView_selectedDateVerticalBar"));
+ int[] attributes = new int[]{
+ android.R.attr.firstDayOfWeek,
+ android.R.attr.focusedMonthDateColor,
+ android.R.attr.selectedWeekBackgroundColor,
+ android.R.attr.showWeekNumber,
+ android.R.attr.shownWeekCount,
+ android.R.attr.unfocusedMonthDateColor,
+ android.R.attr.weekNumberColor,
+ android.R.attr.weekSeparatorLineColor,
+ android.R.attr.selectedDateVerticalBar,
+ android.R.attr.dateTextAppearance,
+ android.R.attr.weekDayTextAppearance
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.calendarViewStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable d = array.getDrawable(sortedAttrs.indexOf(android.R.attr.selectedDateVerticalBar));
if (d != null)
- json.put("CalendarView_selectedDateVerticalBar", getDrawable(d, styleName + "_CalendarView_selectedDateVerticalBar", null));
-
- int dateTextAppearance = a.getResourceId(styleableClass.getDeclaredField("CalendarView_dateTextAppearance").getInt(null), -1);
- json.put("CalendarView_dateTextAppearance", extractTextAppearance(dateTextAppearance));
-
- int weekDayTextAppearance = a.getResourceId(styleableClass.getDeclaredField("CalendarView_weekDayTextAppearance").getInt(null), -1);
- json.put("CalendarView_weekDayTextAppearance", extractTextAppearance(weekDayTextAppearance));
-
- json.put("CalendarView_firstDayOfWeek", a.getInt(getField(styleableClass, "CalendarView_firstDayOfWeek"), 0));
- json.put("CalendarView_focusedMonthDateColor", a.getColor(getField(styleableClass, "CalendarView_focusedMonthDateColor"), 0));
- json.put("CalendarView_selectedWeekBackgroundColor", a.getColor(getField(styleableClass, "CalendarView_selectedWeekBackgroundColor"), 0));
- json.put("CalendarView_showWeekNumber", a.getBoolean(getField(styleableClass, "CalendarView_showWeekNumber"), true));
- json.put("CalendarView_shownWeekCount", a.getInt(getField(styleableClass, "CalendarView_shownWeekCount"), 6));
- json.put("CalendarView_unfocusedMonthDateColor", a.getColor(getField(styleableClass, "CalendarView_unfocusedMonthDateColor"), 0));
- json.put("CalendarView_weekNumberColor", a.getColor(getField(styleableClass, "CalendarView_weekNumberColor"), 0));
- json.put("CalendarView_weekSeparatorLineColor", a.getColor(getField(styleableClass, "CalendarView_weekSeparatorLineColor"), 0));
-
- a.recycle();
- writer.name(styleName).value(json);
+ json.put("CalendarView_selectedDateVerticalBar", getDrawable(d, android.R.attr.calendarViewStyle + "_CalendarView_selectedDateVerticalBar", null));
+
+ int textAppearanceId = array.getResourceId(sortedAttrs.indexOf(android.R.attr.dateTextAppearance), -1);
+ json.put("CalendarView_dateTextAppearance", extractTextAppearance(textAppearanceId, true));
+ textAppearanceId = array.getResourceId(sortedAttrs.indexOf(android.R.attr.weekDayTextAppearance), -1);
+ json.put("CalendarView_weekDayTextAppearance", extractTextAppearance(textAppearanceId, true));
+
+
+ json.put("CalendarView_firstDayOfWeek", array.getInt(sortedAttrs.indexOf(android.R.attr.firstDayOfWeek), 0));
+ json.put("CalendarView_focusedMonthDateColor", array.getColor(sortedAttrs.indexOf(android.R.attr.focusedMonthDateColor), 0));
+ json.put("CalendarView_selectedWeekBackgroundColor", array.getColor(sortedAttrs.indexOf(android.R.attr.selectedWeekBackgroundColor), 0));
+ json.put("CalendarView_showWeekNumber", array.getBoolean(sortedAttrs.indexOf(android.R.attr.showWeekNumber), true));
+ json.put("CalendarView_shownWeekCount", array.getInt(sortedAttrs.indexOf(android.R.attr.shownWeekCount), 6));
+ json.put("CalendarView_unfocusedMonthDateColor", array.getColor(sortedAttrs.indexOf(android.R.attr.unfocusedMonthDateColor), 0));
+ json.put("CalendarView_weekNumberColor", array.getColor(sortedAttrs.indexOf(android.R.attr.weekNumberColor), 0));
+ json.put("CalendarView_weekSeparatorLineColor", array.getColor(sortedAttrs.indexOf(android.R.attr.weekSeparatorLineColor), 0));
+ array.recycle();
+ writer.name("calendarViewStyle").value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractToolBar(SimpleJsonWriter writer, String styleName, String qtClass)
- {
- JSONObject json = extractTextAppearanceInformations(styleName, qtClass, null, -1);
+ void extractToolBar(SimpleJsonWriter writer) {
+ JSONObject json = extractTextAppearanceInformation(android.R.attr.toolbarStyle, "QToolBar");
try {
- Class<?> attrClass = Class.forName("com.android.internal.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
-
- int[] styleAttrs = (int[]) styleableClass.getDeclaredField("ActionBar").get(null);
- TypedArray a = m_theme.obtainStyledAttributes(null, styleAttrs, styleId, 0);
-
- Drawable d = a.getDrawable(getField(styleableClass,"ActionBar_background"));
+ int[] attributes = new int[]{
+ android.R.attr.background,
+ android.R.attr.backgroundStacked,
+ android.R.attr.backgroundSplit,
+ android.R.attr.divider,
+ android.R.attr.itemPadding
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.toolbarStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable d = array.getDrawable(sortedAttrs.indexOf(android.R.attr.background));
if (d != null)
- json.put("ActionBar_background", getDrawable(d, styleName + "_ActionBar_background", null));
+ json.put("ActionBar_background", getDrawable(d, android.R.attr.toolbarStyle + "_ActionBar_background", null));
- d = a.getDrawable(getField(styleableClass,"ActionBar_backgroundStacked"));
+ d = array.getDrawable(sortedAttrs.indexOf(android.R.attr.backgroundStacked));
if (d != null)
- json.put("ActionBar_backgroundStacked", getDrawable(d, styleName + "_ActionBar_backgroundStacked", null));
+ json.put("ActionBar_backgroundStacked", getDrawable(d, android.R.attr.toolbarStyle + "_ActionBar_backgroundStacked", null));
- d = a.getDrawable(getField(styleableClass,"ActionBar_backgroundSplit"));
+ d = array.getDrawable(sortedAttrs.indexOf(android.R.attr.backgroundSplit));
if (d != null)
- json.put("ActionBar_backgroundSplit", getDrawable(d, styleName + "_ActionBar_backgroundSplit", null));
+ json.put("ActionBar_backgroundSplit", getDrawable(d, android.R.attr.toolbarStyle + "_ActionBar_backgroundSplit", null));
- d = a.getDrawable(getField(styleableClass,"ActionBar_divider"));
+ d = array.getDrawable(sortedAttrs.indexOf(android.R.attr.divider));
if (d != null)
- json.put("ActionBar_divider", getDrawable(d, styleName + "_ActionBar_divider", null));
+ json.put("ActionBar_divider", getDrawable(d, android.R.attr.toolbarStyle + "_ActionBar_divider", null));
- json.put("ActionBar_itemPadding", a.getDimensionPixelSize(getField(styleableClass, "ActionBar_itemPadding"), 0));
+ json.put("ActionBar_itemPadding", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.itemPadding), 0));
- a.recycle();
- writer.name(styleName).value(json);
+ array.recycle();
+ writer.name("actionBarStyle").value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- void extractTabBar(SimpleJsonWriter writer, String styleName, String qtClass)
- {
- JSONObject json = extractTextAppearanceInformations(styleName, qtClass, null, -1);
+ void extractTabBar(SimpleJsonWriter writer) {
+ JSONObject json = extractTextAppearanceInformation(android.R.attr.actionBarTabBarStyle, "QTabBar");
try {
- Class<?> attrClass = Class.forName("android.R$attr");
- int styleId = attrClass.getDeclaredField(styleName).getInt(null);
-
- int[] styleAttrs = (int[]) styleableClass.getDeclaredField("LinearLayout").get(null);
- TypedArray a = m_theme.obtainStyledAttributes(null, styleAttrs, styleId, 0);
-
- Drawable d = a.getDrawable(getField(styleableClass,"LinearLayout_divider"));
+ int[] attributes = new int[]{
+ android.R.attr.showDividers,
+ android.R.attr.dividerPadding,
+ android.R.attr.divider
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.actionBarTabStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable d = array.getDrawable(sortedAttrs.indexOf(android.R.attr.divider));
if (d != null)
- json.put("LinearLayout_divider", getDrawable(d, styleName + "_LinearLayout_divider", null));
- json.put("LinearLayout_showDividers", a.getInt(getField(styleableClass, "LinearLayout_showDividers"), 0));
- json.put("LinearLayout_dividerPadding", a.getDimensionPixelSize(getField(styleableClass, "LinearLayout_dividerPadding"), 0));
+ json.put("LinearLayout_divider", getDrawable(d, android.R.attr.actionBarTabStyle + "_LinearLayout_divider", null));
+ json.put("LinearLayout_showDividers", array.getInt(sortedAttrs.indexOf(android.R.attr.showDividers), 0));
+ json.put("LinearLayout_dividerPadding", array.getDimensionPixelSize(sortedAttrs.indexOf(android.R.attr.dividerPadding), 0));
- a.recycle();
- writer.name(styleName).value(json);
+ array.recycle();
+ writer.name("actionBarTabBarStyle").value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- private void extractWindow(SimpleJsonWriter writer, String styleName) {
+ private void extractWindow(SimpleJsonWriter writer) {
JSONObject json = new JSONObject();
- try
- {
- Class<?> attrClass = Class.forName("android.R$attr");
- int[] windowAttrs = (int[]) styleableClass.getDeclaredField("Window").get(null);
-
- int backgroundId = attrClass.getDeclaredField("windowBackground").getInt(null);
- TypedArray a = m_theme.obtainStyledAttributes(null, windowAttrs, backgroundId, 0);
- Drawable background = a.getDrawable(getField(styleableClass, "Window_windowBackground"));
+ try {
+ int[] attributes = new int[]{
+ android.R.attr.windowBackground,
+ android.R.attr.windowFrame
+ };
+ Arrays.sort(attributes);
+ TypedArray array = obtainStyledAttributes(android.R.attr.popupWindowStyle, attributes);
+ ArrayList<Integer> sortedAttrs = getArrayListFromIntArray(attributes);
+
+ Drawable background = array.getDrawable(sortedAttrs.indexOf(android.R.attr.windowBackground));
if (background != null)
- json.put("Window_windowBackground", getDrawable(background, styleName + "_Window_windowBackground", null));
- a.recycle();
+ json.put("Window_windowBackground", getDrawable(background, android.R.attr.popupWindowStyle + "_Window_windowBackground", null));
- int frameId = attrClass.getDeclaredField("windowFrame").getInt(null);
- a = m_theme.obtainStyledAttributes(null, windowAttrs, frameId, 0);
- Drawable frame = a.getDrawable(getField(styleableClass, "Window_windowFrame"));
+ Drawable frame = array.getDrawable(sortedAttrs.indexOf(android.R.attr.windowFrame));
if (frame != null)
- json.put("Window_windowFrame", getDrawable(frame, styleName + "_Window_windowFrame", null));
- a.recycle();
-
- writer.name(styleName).value(json);
+ json.put("Window_windowFrame", getDrawable(frame, android.R.attr.popupWindowStyle + "_Window_windowFrame", null));
+ array.recycle();
+ writer.name("windowStyle").value(json);
} catch (Exception e) {
e.printStackTrace();
}
}
- private JSONObject extractDefaultPalette()
- {
- TypedArray array = m_theme.obtainStyledAttributes(new int[]{
- android.R.attr.textAppearance
- });
- int pos = 0;
- JSONObject json = extractTextAppearance(array.getResourceId(pos++, -1));
+ private JSONObject extractDefaultPalette() {
+ JSONObject json = extractTextAppearance(android.R.attr.textAppearance);
try {
json.put("defaultBackgroundColor", defaultBackgroundColor);
json.put("defaultTextColorPrimary", defaultTextColor);
} catch (Exception e) {
e.printStackTrace();
}
- array.recycle();
return json;
}
- public ExtractStyle(Context context, String extractPath, boolean minimal)
- {
-// Log.i(MinistroService.TAG, "Extract " + extractPath);
- m_minimal = minimal;
- m_extractPath = extractPath + "/";
- new File(m_extractPath).mkdirs();
-// MinistroActivity.nativeChmode(m_extractPath, 0755);
- m_context = context;
- m_theme = context.getTheme();
- TypedArray array = m_theme.obtainStyledAttributes(new int[]{
- android.R.attr.colorBackground,
- android.R.attr.textColorPrimary,
- android.R.attr.textColor
- });
- defaultBackgroundColor = array.getColor(0, 0);
- int textColor = array.getColor(1, 0xFFFFFF);
- if (textColor == 0xFFFFFF)
- textColor = array.getColor(2, 0xFFFFFF);
- defaultTextColor = textColor;
- array.recycle();
+ static class SimpleJsonWriter {
+ private final OutputStreamWriter m_writer;
+ private boolean m_addComma = false;
+ private int m_indentLevel = 0;
+
+ public SimpleJsonWriter(String filePath) throws FileNotFoundException {
+ m_writer = new OutputStreamWriter(new FileOutputStream(filePath));
+ }
+
+ public void close() throws IOException {
+ m_writer.close();
+ }
+
+ private void writeIndent() throws IOException {
+ m_writer.write(" ", 0, m_indentLevel);
+ }
+
+ void beginObject() throws IOException {
+ writeIndent();
+ m_writer.write("{\n");
+ ++m_indentLevel;
+ m_addComma = false;
+ }
+
+ void endObject() throws IOException {
+ m_writer.write("\n");
+ writeIndent();
+ m_writer.write("}\n");
+ --m_indentLevel;
+ m_addComma = false;
+ }
+
+ SimpleJsonWriter name(String name) throws IOException {
+ if (m_addComma) {
+ m_writer.write(",\n");
+ }
+ writeIndent();
+ m_writer.write(JSONObject.quote(name) + ": ");
+ m_addComma = true;
+ return this;
+ }
- try
- {
- SimpleJsonWriter jsonWriter = new SimpleJsonWriter(m_extractPath+"style.json");
- jsonWriter.beginObject();
- try {
- jsonWriter.name("defaultStyle").value(extractDefaultPalette());
- extractWindow(jsonWriter, "windowStyle");
- jsonWriter.name("buttonStyle").value(extractTextAppearanceInformations("buttonStyle", "QPushButton", null, -1));
- jsonWriter.name("spinnerStyle").value(extractTextAppearanceInformations("spinnerStyle", "QComboBox", null, -1));
- extractProgressBar(jsonWriter, "progressBarStyleHorizontal", "QProgressBar");
- extractProgressBar(jsonWriter, "progressBarStyleLarge", null);
- extractProgressBar(jsonWriter, "progressBarStyleSmall", null);
- extractProgressBar(jsonWriter, "progressBarStyle", null);
- extractAbsSeekBar(jsonWriter, "seekBarStyle", "QSlider");
- extractSwitch(jsonWriter, "switchStyle", null);
- extractCompoundButton(jsonWriter, "checkboxStyle", "QCheckBox");
- jsonWriter.name("editTextStyle").value(extractTextAppearanceInformations("editTextStyle", "QLineEdit", null, -1));
- extractCompoundButton(jsonWriter, "radioButtonStyle", "QRadioButton");
- jsonWriter.name("textViewStyle").value(extractTextAppearanceInformations("textViewStyle", "QWidget", null, -1));
- jsonWriter.name("scrollViewStyle").value(extractTextAppearanceInformations("scrollViewStyle", "QAbstractScrollArea", null, -1));
- extractListView(jsonWriter, "listViewStyle", "QListView");
- jsonWriter.name("listSeparatorTextViewStyle").value(extractTextAppearanceInformations("listSeparatorTextViewStyle", null, null, -1));
- extractItemsStyle(jsonWriter);
- extractCompoundButton(jsonWriter, "buttonStyleToggle", null);
- extractCalendar(jsonWriter, "calendarViewStyle", "QCalendarWidget");
- extractToolBar(jsonWriter, "actionBarStyle", "QToolBar");
- jsonWriter.name("actionButtonStyle").value(extractTextAppearanceInformations("actionButtonStyle", "QToolButton", null, -1));
- jsonWriter.name("actionBarTabTextStyle").value(extractTextAppearanceInformations("actionBarTabTextStyle", null, null, -1));
- jsonWriter.name("actionBarTabStyle").value(extractTextAppearanceInformations("actionBarTabStyle", null, null, -1));
- jsonWriter.name("actionOverflowButtonStyle").value(extractImageViewInformations("actionOverflowButtonStyle", null));
- extractTabBar(jsonWriter, "actionBarTabBarStyle", "QTabBar");
- } catch (Exception e) {
- e.printStackTrace();
- }
- jsonWriter.endObject();
- jsonWriter.close();
-// MinistroActivity.nativeChmode(m_extractPath+"style.json", 0644);
+ void value(JSONObject value) throws IOException {
+ m_writer.write(value.toString());
}
- catch (Exception e) {
- e.printStackTrace();
+ }
+
+ static class DrawableCache {
+ JSONObject object;
+ Object drawable;
+ public DrawableCache(JSONObject json, Object drawable) {
+ object = json;
+ this.drawable = drawable;
}
}
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
index 45b5c0b061..e94ce60248 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -77,14 +77,16 @@ public class QtLayout extends ViewGroup
Rect r = new Rect();
((Activity) getContext()).getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
- if (m_bottomDisplayFrame != r.bottom) {
+ if (m_bottomDisplayFrame != r.bottom || oldh == -1) {
m_bottomDisplayFrame = r.bottom;
QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h,
metrics.xdpi,
metrics.ydpi,
metrics.scaledDensity,
metrics.density,
- ((metrics.heightPixels == h) || (metrics.heightPixels == h + r.top)));
+ ((metrics.heightPixels == h)
+ || (metrics.heightPixels == h + r.top)
+ || (m_bottomDisplayFrame > metrics.heightPixels + r.top)));
}
}
@@ -171,7 +173,7 @@ public class QtLayout extends ViewGroup
}
}
- handleSizeChanged (r, b, 0, 0);
+ handleSizeChanged (r, b, 0, -1);
}
// Override to allow type-checking of LayoutParams.
diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java
index 47dcde304c..749b9ac4a9 100644
--- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java
+++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java
@@ -102,9 +102,7 @@ public class QtApplication extends Application
}
}
}
- } catch (Exception e) {
- e.printStackTrace();
- }
+ } catch (Exception e) { }
}
}
diff --git a/src/android/templates/AndroidManifest.xml b/src/android/templates/AndroidManifest.xml
index 092cf16545..27de71d718 100644
--- a/src/android/templates/AndroidManifest.xml
+++ b/src/android/templates/AndroidManifest.xml
@@ -73,7 +73,7 @@
* minimal - useful for Quick Controls 2 apps, it is much faster than "full"
* none - useful for apps that don't use any of the above Qt modules
-->
- <meta-data android:name="android.app.extract_android_style" android:value="default"/>
+ <meta-data android:name="android.app.extract_android_style" android:value="minimal"/>
<!-- extract android style -->
</activity>
diff --git a/src/concurrent/qtconcurrentfilter.h b/src/concurrent/qtconcurrentfilter.h
index d01b351ad0..532057c33c 100644
--- a/src/concurrent/qtconcurrentfilter.h
+++ b/src/concurrent/qtconcurrentfilter.h
@@ -136,7 +136,9 @@ QFuture<typename qValueType<Iterator>::value_type> filtered(Iterator begin, Iter
template <typename Sequence, typename KeepFunctor>
void blockingFilter(Sequence &sequence, KeepFunctor keep)
{
- filterInternal(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::PushBackWrapper()).startBlocking();
+ QFuture<void> future =
+ filterInternal(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::PushBackWrapper());
+ future.waitForFinished();
}
// blocking filteredReduced() on sequences
@@ -146,8 +148,9 @@ ResultType blockingFilteredReduced(const Sequence &sequence,
ReduceFunctor reduce,
ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
{
- return startFilteredReduced<ResultType>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::createFunctionWrapper(reduce), options)
- .startBlocking();
+ QFuture<ResultType> future =
+ startFilteredReduced<ResultType>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::createFunctionWrapper(reduce), options);
+ return future.result();
}
#ifndef Q_CLANG_QDOC
@@ -173,12 +176,11 @@ ResultType blockingFilteredReduced(Iterator begin,
ReduceFunctor reduce,
ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
{
- return startFilteredReduced<ResultType>
- (begin, end,
+ QFuture<ResultType> future = startFilteredReduced<ResultType>(begin, end,
QtPrivate::createFunctionWrapper(keep),
QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
+ options);
+ return future.result();
}
#ifndef Q_CLANG_QDOC
@@ -189,12 +191,13 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFiltered
ReduceFunctor reduce,
ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
{
- return startFilteredReduced<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
+ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> future =
+ startFilteredReduced<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
(begin, end,
QtPrivate::createFunctionWrapper(keep),
QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
+ options);
+ return future.result();
}
#endif
@@ -202,17 +205,20 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFiltered
template <typename Sequence, typename KeepFunctor>
Sequence blockingFiltered(const Sequence &sequence, KeepFunctor keep)
{
- return startFilteredReduced<Sequence>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::PushBackWrapper(), OrderedReduce).startBlocking();
+ QFuture<Sequence> future =
+ startFilteredReduced<Sequence>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::PushBackWrapper(), OrderedReduce);
+ return future.result();
}
// blocking filtered() on iterators
template <typename OutputSequence, typename Iterator, typename KeepFunctor>
OutputSequence blockingFiltered(Iterator begin, Iterator end, KeepFunctor keep)
{
- return startFilteredReduced<OutputSequence>(begin, end,
+ QFuture<OutputSequence> future = startFilteredReduced<OutputSequence>(begin, end,
QtPrivate::createFunctionWrapper(keep),
QtPrivate::PushBackWrapper(),
- OrderedReduce).startBlocking();
+ OrderedReduce);
+ return future.result();
}
} // namespace QtConcurrent
diff --git a/src/concurrent/qtconcurrentmap.h b/src/concurrent/qtconcurrentmap.h
index 151f03cf56..70eea29bca 100644
--- a/src/concurrent/qtconcurrentmap.h
+++ b/src/concurrent/qtconcurrentmap.h
@@ -143,14 +143,16 @@ QFuture<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType> mapped(
template <typename Sequence, typename MapFunctor>
void blockingMap(Sequence &sequence, MapFunctor map)
{
- startMap(sequence.begin(), sequence.end(), QtPrivate::createFunctionWrapper(map)).startBlocking();
+ QFuture<void> future = startMap(sequence.begin(), sequence.end(), QtPrivate::createFunctionWrapper(map));
+ future.waitForFinished();
}
// blockingMap() for iterator ranges
template <typename Iterator, typename MapFunctor>
void blockingMap(Iterator begin, Iterator end, MapFunctor map)
{
- startMap(begin, end, QtPrivate::createFunctionWrapper(map)).startBlocking();
+ QFuture<void> future = startMap(begin, end, QtPrivate::createFunctionWrapper(map));
+ future.waitForFinished();
}
// blockingMappedReduced() for sequences
@@ -160,12 +162,13 @@ ResultType blockingMappedReduced(const Sequence &sequence,
ReduceFunctor reduce,
ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
{
- return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
+ QFuture<ResultType> future =
+ QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
(sequence,
QtPrivate::createFunctionWrapper(map),
QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
+ options);
+ return future.result();
}
template <typename MapFunctor, typename ReduceFunctor, typename Sequence>
@@ -174,12 +177,13 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingMappedRe
ReduceFunctor reduce,
ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
{
- return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
+ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> future =
+ QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
(sequence,
QtPrivate::createFunctionWrapper(map),
QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
+ options);
+ return future.result();
}
// blockingMappedReduced() for iterator ranges
@@ -190,12 +194,13 @@ ResultType blockingMappedReduced(Iterator begin,
ReduceFunctor reduce,
QtConcurrent::ReduceOptions options = QtConcurrent::ReduceOptions(QtConcurrent::UnorderedReduce | QtConcurrent::SequentialReduce))
{
- return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
+ QFuture<ResultType> future =
+ QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
(begin, end,
QtPrivate::createFunctionWrapper(map),
QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
+ options);
+ return future.result();
}
template <typename Iterator, typename MapFunctor, typename ReduceFunctor>
@@ -205,12 +210,13 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingMappedRe
ReduceFunctor reduce,
QtConcurrent::ReduceOptions options = QtConcurrent::ReduceOptions(QtConcurrent::UnorderedReduce | QtConcurrent::SequentialReduce))
{
- return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
+ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> future =
+ QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
(begin, end,
QtPrivate::createFunctionWrapper(map),
QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
+ options);
+ return future.result();
}
// mapped() for sequences with a different putput sequence type.
diff --git a/src/concurrent/qtconcurrentthreadengine.cpp b/src/concurrent/qtconcurrentthreadengine.cpp
index 7f91a2ba68..ea6ce3ac42 100644
--- a/src/concurrent/qtconcurrentthreadengine.cpp
+++ b/src/concurrent/qtconcurrentthreadengine.cpp
@@ -176,39 +176,6 @@ void ThreadEngineBase::startSingleThreaded()
finish();
}
-void ThreadEngineBase::startBlocking()
-{
- start();
- barrier.acquire();
- startThreads();
-
- bool throttled = false;
-#ifndef QT_NO_EXCEPTIONS
- try {
-#endif
- while (threadFunction() == ThrottleThread) {
- if (threadThrottleExit()) {
- throttled = true;
- break;
- }
- }
-#ifndef QT_NO_EXCEPTIONS
- } catch (QException &e) {
- handleException(e);
- } catch (...) {
- handleException(QUnhandledException());
- }
-#endif
-
- if (throttled == false) {
- barrier.release();
- }
-
- barrier.wait();
- finish();
- exceptionStore.throwPossibleException();
-}
-
void ThreadEngineBase::startThread()
{
startThreadInternal();
diff --git a/src/concurrent/qtconcurrentthreadengine.h b/src/concurrent/qtconcurrentthreadengine.h
index a4c8548cc4..7c30cebdbc 100644
--- a/src/concurrent/qtconcurrentthreadengine.h
+++ b/src/concurrent/qtconcurrentthreadengine.h
@@ -91,7 +91,6 @@ public:
ThreadEngineBase();
virtual ~ThreadEngineBase();
void startSingleThreaded();
- void startBlocking();
void startThread();
bool isCanceled();
void waitForResume();
@@ -145,15 +144,6 @@ public:
}
// Runs the user algorithm using multiple threads.
- // This function blocks until the algorithm is finished,
- // and then returns the result.
- T *startBlocking()
- {
- ThreadEngineBase::startBlocking();
- return result();
- }
-
- // Runs the user algorithm using multiple threads.
// Does not block, returns a future.
QFuture<T> startAsynchronously()
{
@@ -233,13 +223,6 @@ class ThreadEngineStarter : public ThreadEngineStarterBase<T>
public:
ThreadEngineStarter(TypedThreadEngine *eng)
: Base(eng) { }
-
- T startBlocking()
- {
- T t = *this->threadEngine->startBlocking();
- delete this->threadEngine;
- return t;
- }
};
// Full template specialization where T is void.
@@ -249,12 +232,6 @@ class ThreadEngineStarter<void> : public ThreadEngineStarterBase<void>
public:
ThreadEngineStarter(ThreadEngine<void> *_threadEngine)
: ThreadEngineStarterBase<void>(_threadEngine) {}
-
- void startBlocking()
- {
- this->threadEngine->startBlocking();
- delete this->threadEngine;
- }
};
//! [qtconcurrentthreadengine-1]
diff --git a/src/corelib/Qt5AndroidSupport.cmake b/src/corelib/Qt5AndroidSupport.cmake
index 5512635f97..74d9e257d3 100644
--- a/src/corelib/Qt5AndroidSupport.cmake
+++ b/src/corelib/Qt5AndroidSupport.cmake
@@ -123,24 +123,28 @@ if (NOT ${PROJECT_NAME}-MultiAbiBuild)
set(android_deploy_qt_platform "--android-platform ${ANDROID_SDK_PLATFORM}")
endif()
- add_custom_target(apk
- COMMAND ${CMAKE_COMMAND} -E env JAVA_HOME=${JAVA_HOME} ${ANDROID_DEPLOY_QT}
- --input "${CMAKE_BINARY_DIR}/android_deployment_settings.json"
- --output "${CMAKE_BINARY_DIR}/android-build"
- --apk "${CMAKE_BINARY_DIR}/android-build/${PROJECT_NAME}.apk"
- ${android_deploy_qt_platform}
- ${android_deploy_qt_jdk}
- VERBATIM)
-
- add_custom_target(aab
- COMMAND ${CMAKE_COMMAND} -E env JAVA_HOME=${JAVA_HOME} ${ANDROID_DEPLOY_QT}
- --input "${CMAKE_BINARY_DIR}/android_deployment_settings.json"
- --output "${CMAKE_BINARY_DIR}/android-build"
- --apk "${CMAKE_BINARY_DIR}/android-build/${PROJECT_NAME}.apk"
- --aab
- ${android_deploy_qt_platform}
- ${android_deploy_qt_jdk}
- VERBATIM)
+ if(NOT TARGET apk)
+ add_custom_target(apk
+ COMMAND ${CMAKE_COMMAND} -E env JAVA_HOME=${JAVA_HOME} ${ANDROID_DEPLOY_QT}
+ --input "${CMAKE_BINARY_DIR}/android_deployment_settings.json"
+ --output "${CMAKE_BINARY_DIR}/android-build"
+ --apk "${CMAKE_BINARY_DIR}/android-build/${PROJECT_NAME}.apk"
+ ${android_deploy_qt_platform}
+ ${android_deploy_qt_jdk}
+ VERBATIM)
+ endif()
+
+ if(NOT TARGET aab)
+ add_custom_target(aab
+ COMMAND ${CMAKE_COMMAND} -E env JAVA_HOME=${JAVA_HOME} ${ANDROID_DEPLOY_QT}
+ --input "${CMAKE_BINARY_DIR}/android_deployment_settings.json"
+ --output "${CMAKE_BINARY_DIR}/android-build"
+ --apk "${CMAKE_BINARY_DIR}/android-build/${PROJECT_NAME}.apk"
+ --aab
+ ${android_deploy_qt_platform}
+ ${android_deploy_qt_jdk}
+ VERBATIM)
+ endif()
include(ExternalProject)
macro (setup_library library_name android_abi)
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index 9b5d19d41b..74c7181dd1 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -1045,6 +1045,7 @@
"label": "QTimeZone",
"purpose": "Provides support for time-zone handling.",
"section": "Utilities",
+ "condition": "!config.wasm",
"output": [ "publicFeature" ]
},
"datetimeparser": {
diff --git a/src/corelib/doc/snippets/code/src_corelib_global_qrandom.cpp b/src/corelib/doc/snippets/code/src_corelib_global_qrandom.cpp
index 0dc47f2370..35bf49c186 100644
--- a/src/corelib/doc/snippets/code/src_corelib_global_qrandom.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_global_qrandom.cpp
@@ -127,5 +127,5 @@
//! [15]
//! [16]
- qint64 value = QRandomGenerator64::generate() & std::numeric_limits<qint64>::max();
+ qint64 value = QRandomGenerator64::global()->generate() & std::numeric_limits<qint64>::max();
//! [16]
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp
index 78875c19e2..418cbe5ec3 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qlistdata.cpp
@@ -228,7 +228,7 @@ qDeleteAll(list.constBegin(), list.constEnd());
QVector<double> vect;
vect << 20.0 << 30.0 << 40.0 << 50.0;
-QList<double> list = QVector<T>::fromVector(vect);
+QList<double> list = QList<double>::fromVector(vect);
// list: [20.0, 30.0, 40.0, 50.0]
//! [21]
diff --git a/src/corelib/doc/src/includes/qfile-copy.qdocinc b/src/corelib/doc/src/includes/qfile-copy.qdocinc
new file mode 100644
index 0000000000..5ff68eac81
--- /dev/null
+++ b/src/corelib/doc/src/includes/qfile-copy.qdocinc
@@ -0,0 +1,11 @@
+This file is closed before it is copied.
+
+If the copied file is a symbolic link (symlink), the
+file it refers to is copied, not the link itself. With the
+exception of permissions, which are copied, no other file metadata
+is copied.
+
+Returns \c true if successful; otherwise returns \c false.
+
+Note that if a file with the name \a newName already exists,
+copy() returns \c false. This means QFile will not overwrite it.
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 0efcf6ba53..fd8319aae0 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -499,6 +499,14 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
\since 4.2
Returns \c true if the flag \a flag is set, otherwise \c false.
+
+ \note if \a flag contains multiple bits set to 1 (for instance, if
+ it's an enumerator equal to the bitwise-OR of other enumerators)
+ then this function will return \c true if and only if all the bits
+ are set in this flags object. On the other hand, if \a flag contains
+ no bits set to 1 (that is, its value as a integer is 0), then this
+ function will return \c true if and only if this flags object also
+ has no bits set to 1.
*/
/*!
diff --git a/src/corelib/global/qglobalstatic.h b/src/corelib/global/qglobalstatic.h
index e56fe1dbcb..d1e1107f95 100644
--- a/src/corelib/global/qglobalstatic.h
+++ b/src/corelib/global/qglobalstatic.h
@@ -44,6 +44,8 @@
#include <QtCore/qatomic.h>
+#include <type_traits>
+
QT_BEGIN_NAMESPACE
namespace QtGlobalStatic {
@@ -86,7 +88,7 @@ enum GuardValues {
static struct Holder : public HolderBase { \
Type value; \
Holder() \
- noexcept(noexcept(Type ARGS)) \
+ noexcept(noexcept(typename std::remove_cv<Type>::type ARGS)) \
: value ARGS \
{ guard.storeRelaxed(QtGlobalStatic::Initialized); } \
} holder; \
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index f95e2621e9..9755121273 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -117,7 +117,9 @@
\value AA_DontShowShortcutsInContextMenus Actions with the Shortcut property
won't be shown in any shortcut menus unless specifically set by the
QAction::shortcutVisibleInContextMenu property. This value was added
- in Qt 5.10.
+ in Qt 5.10, and defaults to the preference reported by the implementation
+ of QPlatformIntegration::styleHint. To override the platform integration,
+ set this attribute after QCoreApplication has been instantiated.
\value AA_NativeWindows Ensures that widgets have native windows.
@@ -2913,6 +2915,11 @@
the first item and continues until all items have been examined.
\value MatchRecursive Searches the entire hierarchy.
+ \note Qt::MatchExactly, Qt::MatchContains, Qt::MatchStartsWith,
+ Qt::MatchEndsWith, Qt::MatchRegularExpression, Qt::MatchWildcard, and
+ Qt::MatchFixedString are mutually exclusive. The behavior achieved by
+ setting several of them in a Qt::MatchFlags argument is undefined.
+
\sa QString::compare(), QRegExp, QRegularExpression
*/
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp
index 17e94add96..14ce49da56 100644
--- a/src/corelib/io/qfile.cpp
+++ b/src/corelib/io/qfile.cpp
@@ -829,13 +829,9 @@ QFile::link(const QString &fileName, const QString &linkName)
}
/*!
- Copies the file currently specified by fileName() to a file called
- \a newName. Returns \c true if successful; otherwise returns \c false.
+ Copies the file named fileName() to \a newName.
- Note that if a file with the name \a newName already exists,
- copy() returns \c false (i.e. QFile will not overwrite it).
-
- The source file is closed before it is copied.
+ \include qfile-copy.qdocinc
\sa setFileName()
*/
@@ -941,11 +937,9 @@ QFile::copy(const QString &newName)
/*!
\overload
- Copies the file \a fileName to \a newName. Returns \c true if successful;
- otherwise returns \c false.
+ Copies the file named \a fileName to \a newName.
- If a file with the name \a newName already exists, copy() returns \c false
- (i.e., QFile will not overwrite it).
+ \include qfile-copy.qdocinc
\sa rename()
*/
diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp
index 443e6bb00a..de146c6ac2 100644
--- a/src/corelib/io/qsettings_mac.cpp
+++ b/src/corelib/io/qsettings_mac.cpp
@@ -274,7 +274,15 @@ static QVariant qtValue(CFPropertyListRef cfvalue)
}
const QString str = QString::fromUtf8(byteArray.constData(), byteArray.size());
- return QSettingsPrivate::stringToVariant(str);
+ QVariant variant = QSettingsPrivate::stringToVariant(str);
+ if (variant == QVariant(str)) {
+ // We did not find an encoded variant in the string,
+ // so return the raw byte array instead.
+ byteArray.detach();
+ return byteArray;
+ }
+
+ return variant;
} else if (typeId == CFDictionaryGetTypeID()) {
CFDictionaryRef cfdict = static_cast<CFDictionaryRef>(cfvalue);
CFTypeID arrayTypeId = CFArrayGetTypeID();
diff --git a/src/corelib/io/qt_attribution.json b/src/corelib/io/qt_attribution.json
index 9cf1081e80..cc62beef86 100644
--- a/src/corelib/io/qt_attribution.json
+++ b/src/corelib/io/qt_attribution.json
@@ -20,7 +20,7 @@ supported by Qt (by the QNetworkCookieJar class).",
"Homepage": "Consult https://github.com/publicsuffix/list for the sha1 but download from ...",
"Homepage": "http://publicsuffix.org/",
- "Version": "f2cce86a42f38265c67caa32c6e0ff61793bb534, fetched on 2021-01-21",
+ "Version": "d4e247a71d1b6da08dad906b098c818493166fcc, fetched on 2021-06-11",
"License": "Mozilla Public License 2.0",
"LicenseFile": "PSL-LICENSE.txt",
"LicenseId": "MPL-2.0",
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index ce4149ed05..50512a4a73 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -3640,6 +3640,8 @@ bool QUrl::operator <(const QUrl &url) const
/*!
Returns \c true if this URL and the given \a url are equal;
otherwise returns \c false.
+
+ \sa matches()
*/
bool QUrl::operator ==(const QUrl &url) const
{
@@ -3747,6 +3749,8 @@ bool QUrl::matches(const QUrl &url, FormattingOptions options) const
/*!
Returns \c true if this URL and the given \a url are not equal;
otherwise returns \c false.
+
+ \sa matches()
*/
bool QUrl::operator !=(const QUrl &url) const
{
diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h
index 60c3eaa5a4..1353210a2e 100644
--- a/src/corelib/io/qurltlds_p.h
+++ b/src/corelib/io/qurltlds_p.h
@@ -61,14843 +61,14953 @@ QT_BEGIN_NAMESPACE
// for instructions see the program at
// util/corelib/qurl-generateTLDs/
-static const quint16 tldCount = 9117;
+static const quint16 tldCount = 9177;
static const quint32 tldIndices[] = {
0,
-39,
-64,
-81,
-81,
-81,
+17,
+36,
+56,
+62,
+62,
+69,
+69,
+69,
+75,
87,
-113,
-134,
-134,
-152,
-152,
-160,
-177,
-183,
-218,
-244,
-244,
+153,
+174,
+174,
+174,
+198,
+198,
+198,
+215,
+215,
+240,
+255,
264,
-271,
-284,
-306,
-336,
-360,
-360,
-383,
-394,
-394,
-394,
-394,
-394,
-399,
-399,
-399,
-416,
-443,
+288,
+314,
+328,
+328,
+344,
+344,
+396,
+396,
+420,
+449,
+449,
454,
-454,
-454,
-479,
-500,
-507,
-507,
-507,
-541,
-541,
-541,
-548,
-562,
-562,
-593,
+463,
+463,
+469,
+475,
+498,
+516,
+523,
+523,
+550,
+561,
597,
-635,
-641,
-641,
-652,
-665,
-665,
-680,
-680,
-699,
-699,
-709,
-709,
-709,
-724,
-730,
-776,
-785,
-791,
+608,
+608,
+626,
+636,
+636,
+647,
+647,
+647,
+647,
+675,
+715,
+715,
+732,
+732,
+745,
+753,
+768,
+787,
799,
-805,
-828,
-834,
-843,
-853,
-853,
-882,
-882,
-882,
-882,
-892,
-897,
-903,
-913,
+799,
+806,
+814,
+840,
+849,
+849,
+860,
+881,
+881,
+881,
913,
-930,
-936,
-948,
-977,
-1032,
-1048,
-1061,
-1061,
-1067,
-1095,
-1095,
-1121,
-1121,
-1130,
-1146,
-1172,
-1172,
-1172,
-1172,
-1172,
-1172,
-1172,
-1178,
-1178,
-1197,
-1225,
-1225,
-1235,
-1254,
-1254,
-1280,
-1302,
+926,
+946,
+946,
+946,
+946,
+946,
+952,
+971,
+971,
+978,
+996,
+1002,
+1019,
+1019,
+1025,
+1059,
+1059,
+1059,
+1082,
+1082,
+1082,
+1110,
+1117,
+1117,
+1123,
+1139,
+1139,
+1160,
+1170,
+1191,
+1191,
+1191,
+1207,
+1217,
+1217,
+1232,
+1238,
+1245,
+1279,
+1299,
1319,
-1346,
-1354,
-1391,
-1395,
-1411,
-1436,
-1452,
-1458,
-1458,
-1477,
-1481,
-1481,
-1481,
-1481,
-1492,
-1499,
-1499,
-1515,
-1543,
-1543,
-1543,
-1543,
-1555,
-1559,
-1574,
-1574,
-1598,
-1630,
-1642,
-1654,
-1654,
-1670,
-1670,
-1686,
-1710,
-1710,
-1726,
-1726,
-1742,
-1756,
-1756,
-1756,
-1769,
-1804,
+1336,
+1336,
+1342,
+1357,
+1363,
+1370,
+1370,
+1380,
+1400,
+1405,
+1424,
+1430,
+1430,
+1430,
+1438,
+1438,
+1457,
+1475,
+1493,
+1493,
+1529,
+1541,
+1556,
+1556,
+1563,
+1563,
+1563,
+1576,
+1618,
+1656,
+1685,
+1706,
+1721,
+1741,
+1761,
+1781,
+1797,
+1797,
+1797,
1804,
1810,
1816,
-1832,
-1832,
-1832,
-1838,
-1854,
-1854,
-1854,
+1816,
+1816,
1854,
-1858,
-1885,
-1924,
-1952,
-1967,
-1967,
-1977,
-2005,
-2024,
+1860,
+1860,
+1899,
+1899,
+1933,
+1945,
+1945,
+1958,
+1986,
+1986,
+1992,
+2007,
+2013,
+2013,
+2019,
+2019,
+2025,
2036,
-2084,
-2100,
-2126,
-2126,
-2138,
-2174,
-2201,
-2246,
-2246,
-2279,
-2286,
-2330,
-2366,
-2366,
-2372,
-2415,
-2424,
-2443,
-2462,
-2482,
-2488,
-2534,
-2534,
-2557,
-2587,
-2597,
-2623,
-2623,
-2642,
-2686,
-2698,
-2717,
-2754,
-2754,
+2036,
+2036,
+2036,
+2036,
+2036,
+2111,
+2111,
+2111,
+2147,
+2147,
+2158,
+2163,
+2176,
+2176,
+2195,
+2202,
+2216,
+2222,
+2254,
+2284,
+2284,
+2297,
+2319,
+2319,
+2325,
+2340,
+2350,
+2357,
+2362,
+2362,
+2362,
+2380,
+2387,
+2400,
+2400,
+2400,
+2448,
+2448,
+2455,
+2463,
+2478,
+2501,
+2520,
+2538,
+2565,
+2584,
+2591,
+2610,
+2610,
+2651,
+2651,
+2667,
+2667,
+2695,
+2704,
+2716,
+2716,
+2716,
+2723,
+2723,
+2759,
+2759,
+2765,
2771,
-2795,
-2828,
-2855,
-2884,
-2944,
+2799,
+2818,
+2836,
+2836,
+2848,
+2848,
+2848,
+2859,
+2869,
+2878,
+2878,
+2902,
+2902,
+2902,
+2919,
+2954,
+2954,
+2954,
+2965,
2980,
2980,
-3042,
-3042,
-3110,
-3117,
-3127,
-3140,
-3154,
-3164,
-3164,
-3164,
-3169,
-3213,
-3231,
-3253,
-3260,
-3298,
+3012,
+3018,
+3025,
+3062,
+3062,
+3092,
+3104,
+3104,
+3116,
+3122,
+3141,
+3165,
+3165,
+3199,
+3242,
+3273,
+3273,
+3291,
3322,
-3322,
-3365,
-3376,
-3386,
-3386,
-3393,
-3401,
-3417,
-3417,
-3430,
-3488,
+3336,
+3375,
+3375,
+3381,
+3412,
+3412,
+3412,
+3434,
+3448,
+3482,
+3482,
+3482,
3488,
-3516,
+3497,
+3510,
+3521,
+3558,
3563,
-3578,
+3563,
+3581,
+3581,
+3581,
+3587,
+3587,
+3587,
3593,
-3609,
-3624,
-3624,
-3638,
-3675,
-3721,
-3731,
-3731,
+3616,
+3616,
+3654,
+3670,
+3670,
+3676,
+3688,
+3715,
3736,
-3751,
-3780,
-3820,
-3820,
-3858,
-3868,
-3920,
-3926,
-3947,
-3947,
-3961,
-3961,
-3961,
-3978,
-3978,
-3987,
-4006,
-4015,
-4031,
-4037,
-4056,
-4067,
-4067,
-4067,
-4067,
-4091,
-4091,
-4099,
-4099,
-4117,
-4153,
-4170,
-4170,
-4187,
-4187,
-4187,
-4205,
-4205,
-4205,
-4205,
-4226,
-4226,
-4226,
-4226,
-4234,
-4252,
-4252,
-4260,
-4260,
-4260,
-4278,
-4313,
-4313,
-4331,
-4344,
-4390,
-4390,
-4390,
-4414,
-4435,
-4435,
-4435,
-4450,
-4467,
-4467,
-4467,
-4467,
-4467,
-4479,
+3763,
+3799,
+3806,
+3813,
+3822,
+3828,
+3871,
+3881,
+3897,
+3897,
+3897,
+3897,
+3897,
+3906,
+3906,
+3916,
+3933,
+3943,
+3943,
+3963,
+3970,
+3996,
+4010,
+4063,
+4063,
+4081,
+4081,
+4092,
+4097,
+4097,
+4097,
+4136,
+4136,
+4146,
+4175,
+4183,
+4183,
+4183,
+4183,
+4199,
+4199,
+4206,
+4206,
+4206,
+4216,
+4224,
+4231,
+4236,
+4236,
+4236,
+4243,
+4243,
+4256,
+4256,
+4262,
+4262,
+4262,
+4272,
+4294,
+4298,
+4298,
+4304,
+4314,
+4314,
+4314,
+4333,
+4357,
+4384,
+4384,
+4384,
+4389,
+4419,
+4419,
+4425,
+4425,
+4446,
+4485,
+4501,
+4535,
4535,
-4584,
-4595,
-4595,
-4595,
-4654,
-4669,
-4669,
-4669,
-4713,
-4734,
-4776,
-4776,
-4811,
-4811,
-4828,
+4555,
+4555,
+4555,
+4577,
+4577,
+4594,
+4594,
+4594,
+4594,
+4594,
+4594,
+4594,
+4594,
+4594,
+4594,
+4604,
+4604,
+4604,
+4604,
+4623,
+4623,
+4648,
+4658,
+4658,
+4665,
+4695,
+4719,
+4742,
+4742,
+4763,
+4763,
+4784,
+4788,
+4794,
+4794,
+4810,
+4827,
+4827,
4839,
4839,
4839,
-4857,
-4887,
-4887,
-4921,
-4932,
+4839,
+4875,
+4884,
+4884,
+4914,
+4933,
+4948,
4948,
-4953,
-4953,
-4965,
-4970,
-4970,
-4970,
-4998,
-5013,
-5013,
-5013,
-5013,
-5013,
-5013,
-5030,
-5048,
-5048,
-5048,
-5048,
-5048,
-5048,
-5078,
-5078,
-5078,
-5078,
-5078,
-5103,
-5127,
-5127,
+4992,
+5018,
+5043,
+5058,
+5068,
+5068,
+5090,
+5090,
+5096,
+5117,
+5117,
+5117,
+5123,
+5132,
+5150,
5150,
-5164,
-5164,
-5164,
-5175,
-5183,
-5211,
-5211,
-5227,
-5239,
-5239,
-5249,
+5166,
+5172,
+5172,
+5184,
+5184,
+5188,
+5209,
+5245,
+5245,
+5245,
5261,
-5277,
-5277,
-5277,
-5277,
-5296,
-5296,
-5336,
-5336,
-5336,
-5342,
-5342,
-5342,
-5386,
-5419,
-5441,
-5466,
-5466,
-5466,
-5488,
-5488,
-5507,
-5511,
-5511,
-5528,
-5545,
-5545,
-5573,
-5573,
-5588,
-5614,
-5624,
-5624,
-5634,
-5634,
-5661,
-5661,
-5661,
-5679,
-5679,
-5679,
-5689,
-5709,
-5709,
-5747,
-5759,
-5759,
-5759,
-5759,
-5759,
-5759,
-5777,
-5794,
-5834,
-5854,
-5854,
-5873,
+5261,
+5269,
+5269,
+5319,
+5319,
+5319,
+5319,
+5319,
+5334,
+5334,
+5344,
+5381,
+5402,
+5411,
+5446,
+5482,
+5482,
+5498,
+5506,
+5513,
+5531,
+5531,
+5551,
+5555,
+5555,
+5555,
+5577,
+5581,
+5609,
+5609,
+5609,
+5627,
+5627,
+5627,
+5650,
+5667,
+5671,
+5671,
+5677,
+5698,
+5705,
+5705,
+5721,
+5738,
+5755,
+5762,
+5762,
+5762,
+5785,
+5822,
+5822,
+5860,
+5894,
5894,
-5918,
-5993,
-5993,
-5993,
-6020,
-6020,
-6020,
-6039,
-6039,
-6062,
-6062,
-6067,
-6067,
-6067,
-6074,
-6088,
-6105,
-6118,
-6138,
-6138,
-6161,
-6161,
-6161,
-6169,
-6169,
-6169,
-6175,
-6175,
-6196,
-6215,
-6280,
+5913,
+5913,
+5926,
+5932,
+5932,
+5932,
+5943,
+5963,
+5963,
+5963,
+5986,
+5986,
+6002,
+6012,
+6012,
+6012,
+6012,
+6019,
+6019,
+6023,
+6079,
+6079,
+6083,
+6094,
+6094,
+6111,
+6117,
+6117,
+6117,
+6124,
+6134,
+6147,
+6147,
+6147,
+6153,
+6157,
+6157,
+6157,
+6173,
+6185,
+6205,
+6216,
+6216,
+6248,
+6259,
+6269,
+6269,
6297,
-6317,
-6321,
-6357,
-6399,
-6420,
-6420,
-6420,
-6420,
-6420,
+6320,
+6336,
+6336,
+6356,
+6362,
+6396,
+6396,
+6413,
6420,
-6456,
-6482,
-6482,
-6482,
-6536,
-6541,
-6554,
-6578,
-6578,
-6602,
-6602,
-6618,
-6618,
-6618,
-6618,
-6618,
-6626,
-6626,
-6626,
-6626,
-6626,
+6444,
+6444,
+6444,
+6500,
+6512,
+6512,
+6512,
+6512,
+6518,
+6526,
+6526,
+6539,
+6539,
+6557,
+6557,
+6557,
+6571,
+6583,
+6628,
+6628,
+6628,
6640,
6640,
6640,
-6656,
-6656,
-6656,
6662,
-6662,
-6662,
-6662,
-6678,
-6678,
-6725,
-6744,
-6744,
-6744,
-6753,
-6762,
-6775,
-6799,
-6812,
-6826,
-6836,
-6836,
-6858,
-6914,
-6914,
-6949,
-6989,
-6989,
-6999,
-6999,
-7008,
-7008,
-7014,
-7040,
-7078,
-7096,
-7113,
-7113,
-7130,
-7130,
-7130,
-7130,
-7153,
-7153,
-7153,
-7159,
-7159,
-7159,
-7175,
-7175,
-7175,
-7190,
-7222,
-7222,
-7222,
-7240,
-7240,
-7276,
-7283,
-7310,
-7310,
-7310,
-7310,
-7323,
-7341,
-7341,
-7366,
-7366,
-7366,
-7415,
-7415,
-7415,
-7420,
-7420,
-7438,
-7446,
-7457,
-7475,
-7493,
-7493,
-7528,
-7569,
-7569,
-7569,
-7584,
-7584,
-7593,
-7593,
-7593,
-7593,
-7601,
-7622,
-7633,
-7670,
-7670,
-7701,
-7701,
-7725,
-7764,
-7764,
-7783,
-7783,
-7783,
-7806,
-7806,
-7806,
-7849,
-7854,
-7887,
-7887,
-7894,
-7901,
-7921,
-7921,
-7928,
-7934,
-7934,
-7971,
-7995,
-8010,
-8010,
-8029,
-8067,
+6674,
+6693,
+6693,
+6693,
+6693,
+6718,
+6729,
+6751,
+6751,
+6751,
+6801,
+6811,
+6831,
+6831,
+6831,
+6831,
+6850,
+6869,
+6869,
+6911,
+6922,
+6922,
+6951,
+6951,
+6978,
+7027,
+7027,
+7027,
+7033,
+7033,
+7033,
+7033,
+7057,
+7063,
+7063,
+7081,
+7098,
+7098,
+7098,
+7108,
+7108,
+7108,
+7145,
+7145,
+7145,
+7162,
+7162,
+7162,
+7162,
+7162,
+7162,
+7220,
+7232,
+7239,
+7264,
+7264,
+7268,
+7268,
+7299,
+7299,
+7299,
+7327,
+7346,
+7346,
+7363,
+7377,
+7377,
+7377,
+7392,
+7419,
+7419,
+7419,
+7428,
+7455,
+7455,
+7476,
+7476,
+7501,
+7501,
+7501,
+7501,
+7501,
+7552,
+7574,
+7585,
+7595,
+7595,
+7630,
+7659,
+7659,
+7659,
+7663,
+7663,
+7683,
+7683,
+7711,
+7748,
+7748,
+7772,
+7772,
+7782,
+7794,
+7819,
+7833,
+7840,
+7861,
+7879,
+7910,
+7943,
+7965,
+7979,
+7989,
+7989,
+7989,
+8012,
+8038,
+8058,
8081,
-8095,
-8114,
-8137,
-8137,
-8137,
-8160,
-8160,
-8167,
-8180,
-8184,
-8237,
-8250,
-8268,
-8268,
+8081,
+8085,
+8107,
+8143,
+8143,
+8151,
+8151,
+8151,
+8193,
+8193,
+8193,
+8193,
+8203,
+8221,
+8221,
+8221,
+8221,
+8251,
+8251,
+8256,
+8286,
8286,
-8306,
-8313,
-8320,
-8320,
-8337,
-8359,
-8389,
-8403,
-8470,
-8470,
-8470,
-8483,
-8498,
-8527,
-8531,
-8531,
-8551,
-8563,
-8581,
-8588,
+8351,
+8351,
+8367,
+8367,
+8367,
+8392,
+8392,
+8392,
+8392,
+8398,
+8398,
+8398,
+8437,
+8467,
+8472,
+8495,
+8510,
+8517,
+8517,
+8539,
+8570,
+8570,
8594,
-8601,
-8601,
-8608,
-8608,
-8646,
-8694,
-8705,
-8705,
-8712,
-8716,
-8744,
-8770,
-8783,
-8794,
-8804,
-8820,
-8827,
+8594,
+8594,
+8594,
+8594,
+8604,
+8604,
+8638,
+8670,
+8720,
+8720,
+8749,
+8749,
+8765,
+8765,
+8765,
+8776,
+8786,
+8795,
+8795,
+8795,
+8795,
+8795,
+8812,
8827,
-8837,
-8866,
-8866,
-8883,
-8910,
-8910,
-8925,
-8925,
-8925,
-8948,
-8964,
-8971,
-8986,
-8986,
-8986,
-9001,
-9001,
-9019,
+8841,
+8841,
+8848,
+8848,
+8848,
+8855,
+8867,
+8867,
+8867,
+8867,
+8867,
+8867,
+8900,
+8900,
+8900,
+8915,
+8953,
+8987,
+9011,
+9032,
+9043,
+9043,
+9043,
+9043,
9043,
-9074,
-9081,
-9117,
-9117,
+9043,
+9043,
+9043,
+9043,
+9053,
+9053,
+9068,
+9079,
+9089,
+9094,
+9099,
+9099,
9126,
-9155,
-9159,
-9159,
-9168,
-9186,
-9217,
-9249,
-9262,
-9262,
-9275,
-9296,
-9319,
-9319,
-9355,
-9371,
-9378,
-9419,
-9448,
-9448,
-9455,
-9472,
-9492,
-9492,
-9530,
-9551,
-9573,
-9598,
-9598,
-9631,
-9671,
-9671,
-9676,
-9676,
-9686,
-9691,
-9725,
-9737,
-9752,
-9757,
-9788,
-9788,
-9788,
-9788,
-9795,
-9815,
-9822,
-9822,
-9822,
-9838,
-9845,
-9852,
-9862,
-9869,
-9884,
-9893,
-9893,
-9893,
+9126,
+9150,
+9150,
+9150,
+9150,
+9171,
+9171,
+9171,
+9196,
+9196,
+9233,
+9233,
+9261,
+9261,
+9261,
+9261,
+9280,
+9294,
+9307,
+9307,
+9342,
+9342,
+9373,
+9384,
+9384,
+9384,
+9384,
+9384,
+9394,
+9394,
+9410,
+9410,
+9410,
+9425,
+9442,
+9442,
+9442,
+9442,
+9471,
+9471,
+9471,
+9500,
+9500,
+9510,
+9531,
+9531,
+9561,
+9577,
+9612,
+9642,
+9657,
+9657,
+9657,
+9692,
+9692,
+9692,
+9696,
+9696,
+9714,
+9714,
+9714,
+9730,
+9739,
+9739,
+9739,
+9749,
+9749,
+9770,
+9770,
+9770,
+9775,
+9789,
+9818,
+9818,
+9818,
+9834,
+9834,
+9834,
+9841,
+9868,
+9868,
+9868,
+9875,
9893,
-9934,
-9934,
-9941,
-9941,
-9948,
-9948,
-9993,
-9993,
-9993,
-9993,
-10013,
-10013,
-10020,
-10020,
-10044,
-10056,
-10056,
-10062,
-10077,
-10119,
-10161,
-10183,
-10190,
-10208,
-10232,
-10245,
-10289,
-10296,
-10303,
-10329,
-10336,
-10366,
-10391,
-10407,
-10407,
-10427,
-10459,
-10482,
-10489,
-10496,
-10503,
-10516,
-10533,
-10551,
-10558,
-10558,
-10565,
-10581,
-10595,
-10602,
-10602,
-10602,
-10609,
-10609,
-10622,
-10622,
-10636,
+9905,
+9905,
+9909,
+9921,
+9938,
+9958,
+9983,
+9983,
+10000,
+10016,
+10016,
+10030,
+10030,
+10030,
+10030,
+10046,
+10066,
+10094,
+10104,
+10118,
+10137,
+10154,
+10177,
+10225,
+10246,
+10264,
+10272,
+10280,
+10299,
+10299,
+10299,
+10304,
+10304,
+10325,
+10344,
+10372,
+10406,
+10424,
+10424,
+10429,
+10429,
+10444,
+10487,
+10500,
+10525,
+10525,
+10525,
+10540,
+10545,
+10554,
+10554,
+10554,
+10554,
+10564,
+10596,
+10617,
+10623,
+10629,
+10643,
+10651,
10684,
-10710,
-10724,
-10738,
-10745,
-10763,
-10770,
-10797,
-10817,
-10844,
-10858,
-10881,
-10898,
-10909,
-10916,
-10916,
-10916,
-10916,
-10941,
-10951,
-10951,
-10978,
-10995,
-10995,
-11011,
-11036,
-11058,
-11065,
-11065,
-11099,
-11115,
-11154,
-11154,
-11168,
-11199,
-11199,
-11206,
-11214,
-11245,
-11277,
-11304,
-11329,
-11347,
-11356,
-11356,
-11381,
-11407,
-11414,
-11437,
-11482,
-11526,
-11526,
-11562,
-11569,
-11584,
-11628,
-11660,
-11690,
-11699,
-11728,
-11738,
-11738,
-11738,
-11750,
-11767,
-11767,
-11806,
-11816,
-11848,
-11867,
-11871,
-11903,
-11920,
-11932,
-11943,
-11979,
-11994,
-12012,
-12055,
-12062,
-12075,
-12092,
-12098,
-12146,
-12153,
-12153,
-12164,
-12172,
-12197,
-12197,
-12197,
-12204,
-12204,
-12204,
-12235,
-12253,
-12267,
-12304,
-12311,
-12335,
-12354,
-12378,
-12427,
-12437,
-12437,
-12479,
-12486,
-12522,
-12535,
-12542,
-12549,
+10684,
+10704,
+10726,
+10746,
+10758,
+10762,
+10791,
+10806,
+10823,
+10870,
+10877,
+10900,
+10900,
+10922,
+10928,
+10928,
+10949,
+11008,
+11008,
+11048,
+11066,
+11103,
+11103,
+11103,
+11103,
+11103,
+11103,
+11103,
+11103,
+11120,
+11120,
+11120,
+11120,
+11120,
+11120,
+11135,
+11135,
+11135,
+11135,
+11135,
+11155,
+11155,
+11167,
+11167,
+11176,
+11176,
+11187,
+11217,
+11217,
+11225,
+11235,
+11243,
+11262,
+11267,
+11294,
+11307,
+11324,
+11333,
+11343,
+11357,
+11357,
+11357,
+11373,
+11391,
+11408,
+11461,
+11481,
+11500,
+11500,
+11507,
+11511,
+11523,
+11530,
+11571,
+11588,
+11617,
+11639,
+11639,
+11639,
+11664,
+11671,
+11676,
+11708,
+11708,
+11708,
+11708,
+11724,
+11724,
+11731,
+11731,
+11731,
+11731,
+11769,
+11769,
+11769,
+11779,
+11779,
+11791,
+11807,
+11813,
+11813,
+11820,
+11835,
+11847,
+11877,
+11912,
+11917,
+11924,
+11941,
+11953,
+11973,
+11973,
+11983,
+12001,
+12028,
+12042,
+12042,
+12095,
+12095,
+12095,
+12095,
+12095,
+12095,
+12102,
+12112,
+12126,
+12126,
+12145,
+12152,
+12189,
+12205,
+12214,
+12214,
+12231,
+12247,
+12247,
+12293,
+12348,
+12361,
+12389,
+12389,
+12423,
+12423,
+12423,
+12439,
+12439,
+12439,
+12439,
+12439,
+12439,
+12447,
+12447,
+12507,
+12512,
+12512,
+12512,
+12528,
+12528,
+12528,
+12528,
+12528,
12559,
12566,
-12578,
-12611,
-12628,
-12652,
-12665,
-12671,
-12712,
-12712,
-12712,
-12712,
-12729,
-12729,
-12746,
-12751,
-12779,
-12779,
-12786,
-12824,
-12841,
-12848,
-12869,
-12876,
-12876,
-12876,
-12898,
-12930,
-12951,
-12969,
-13013,
-13019,
-13019,
-13019,
-13026,
-13026,
+12592,
+12592,
+12597,
+12603,
+12603,
+12603,
+12620,
+12644,
+12644,
+12644,
+12644,
+12666,
+12714,
+12731,
+12731,
+12745,
+12782,
+12791,
+12791,
+12816,
+12832,
+12854,
+12892,
+12892,
+12892,
+12907,
+12928,
+12939,
+12977,
+12996,
+12996,
+13022,
+13027,
+13039,
+13039,
+13039,
+13039,
+13039,
13049,
-13073,
-13105,
-13125,
-13141,
-13141,
-13182,
-13192,
-13192,
-13228,
-13228,
-13241,
-13282,
-13282,
-13282,
-13282,
-13297,
-13297,
-13297,
-13315,
-13324,
-13335,
-13382,
-13391,
-13391,
-13417,
-13417,
-13440,
-13469,
-13476,
-13496,
-13530,
-13530,
-13548,
-13548,
-13570,
-13580,
-13580,
-13599,
-13609,
-13627,
-13627,
-13634,
-13634,
-13634,
-13634,
-13634,
-13663,
-13663,
-13663,
-13674,
-13674,
-13686,
-13686,
+13088,
+13116,
+13116,
+13156,
+13156,
+13156,
+13156,
+13164,
+13174,
+13174,
+13184,
+13229,
+13229,
+13267,
+13267,
+13267,
+13272,
+13299,
+13299,
+13316,
+13338,
+13338,
+13338,
+13370,
+13370,
+13370,
+13374,
+13394,
+13410,
+13416,
+13459,
+13459,
+13468,
+13468,
+13472,
+13477,
+13488,
+13488,
+13516,
+13528,
+13528,
+13568,
+13579,
+13583,
+13583,
+13608,
+13608,
+13618,
+13676,
+13681,
+13690,
+13690,
+13707,
13707,
-13714,
-13714,
-13714,
-13733,
-13733,
-13781,
-13793,
-13793,
-13793,
-13809,
-13809,
-13825,
-13876,
-13886,
-13896,
-13925,
-13958,
-13958,
-13999,
-13999,
-13999,
-13999,
-14018,
-14039,
-14039,
-14046,
-14055,
-14055,
-14059,
-14100,
-14115,
-14129,
-14142,
-14142,
-14148,
-14173,
-14209,
-14209,
-14209,
-14224,
-14224,
-14224,
-14224,
-14224,
-14224,
-14229,
-14244,
-14263,
-14263,
-14271,
-14271,
-14271,
-14288,
-14288,
-14288,
-14335,
-14335,
-14344,
-14363,
-14363,
-14363,
-14394,
-14415,
-14446,
-14495,
-14512,
-14512,
-14518,
-14535,
-14535,
-14548,
-14557,
-14571,
-14582,
-14614,
-14614,
-14635,
-14649,
-14649,
-14656,
-14663,
-14684,
-14689,
-14689,
-14689,
-14689,
-14689,
-14689,
-14689,
-14701,
-14701,
-14713,
-14713,
-14725,
-14725,
-14725,
-14725,
-14762,
-14807,
-14807,
-14814,
-14834,
-14846,
-14846,
-14857,
-14864,
-14864,
-14871,
-14879,
-14879,
-14892,
-14892,
-14932,
-14932,
+13707,
+13707,
+13726,
+13726,
+13764,
+13775,
+13775,
+13775,
+13811,
+13842,
+13858,
+13873,
+13885,
+13924,
+13924,
+13924,
+13924,
+13969,
+13984,
+13991,
+13991,
+13991,
+13991,
+13991,
+13991,
+14000,
+14000,
+14000,
+14038,
+14057,
+14057,
+14057,
+14057,
+14057,
+14087,
+14095,
+14106,
+14116,
+14159,
+14167,
+14199,
+14199,
+14199,
+14211,
+14211,
+14217,
+14230,
+14251,
+14251,
+14261,
+14286,
+14290,
+14300,
+14300,
+14300,
+14327,
+14342,
+14356,
+14381,
+14381,
+14381,
+14381,
+14381,
+14402,
+14409,
+14409,
+14419,
+14419,
+14440,
+14444,
+14444,
+14467,
+14467,
+14477,
+14493,
+14511,
+14519,
+14519,
+14576,
+14605,
+14620,
+14647,
+14688,
+14688,
+14719,
+14728,
+14728,
+14732,
+14741,
+14741,
+14741,
+14741,
+14805,
+14805,
+14805,
+14810,
+14810,
+14891,
+14915,
14942,
-14949,
-14949,
-14961,
-14961,
-14976,
-14990,
-14990,
-15038,
-15038,
-15057,
-15078,
-15078,
-15078,
-15078,
-15091,
-15091,
+14954,
+14954,
+14964,
+15008,
+15008,
+15018,
+15050,
+15063,
+15081,
15098,
15098,
15098,
-15105,
-15105,
-15105,
-15105,
-15105,
-15105,
-15105,
-15113,
-15128,
-15140,
-15140,
-15140,
-15152,
-15164,
-15178,
-15195,
-15207,
-15223,
+15110,
+15110,
+15110,
+15119,
+15119,
+15126,
+15133,
+15133,
+15133,
+15133,
+15166,
+15166,
+15166,
+15166,
+15166,
+15166,
+15166,
+15166,
+15166,
+15173,
+15173,
+15215,
+15215,
+15215,
+15215,
+15215,
15234,
-15251,
-15251,
-15251,
-15271,
-15287,
-15287,
-15297,
-15328,
-15345,
-15345,
-15383,
-15412,
-15412,
-15412,
-15412,
-15437,
-15470,
-15470,
-15490,
-15490,
-15490,
-15490,
-15495,
-15504,
-15514,
-15514,
-15514,
-15514,
-15522,
-15528,
-15528,
-15528,
-15528,
-15528,
-15539,
-15539,
-15575,
-15575,
-15575,
-15575,
-15575,
+15243,
+15264,
+15264,
+15264,
+15264,
+15284,
+15284,
+15284,
+15284,
+15308,
+15308,
+15326,
+15346,
+15346,
+15346,
+15377,
+15377,
+15389,
+15389,
+15429,
+15429,
+15448,
+15448,
+15457,
+15457,
+15457,
+15483,
+15501,
+15501,
+15511,
+15531,
+15545,
15595,
-15610,
-15628,
-15641,
-15651,
-15664,
-15675,
-15675,
-15680,
-15690,
-15690,
-15704,
-15719,
-15740,
-15740,
-15740,
-15740,
-15740,
-15740,
-15740,
-15740,
-15752,
-15759,
-15759,
-15816,
-15844,
-15844,
-15844,
-15844,
-15852,
-15859,
-15867,
-15888,
-15936,
-15936,
-15989,
-16014,
-16014,
-16028,
-16028,
+15629,
+15629,
+15646,
+15654,
+15654,
+15668,
+15668,
+15668,
+15697,
+15709,
+15709,
+15709,
+15724,
+15742,
+15742,
+15761,
+15774,
+15811,
+15838,
+15838,
+15838,
+15855,
+15855,
+15865,
+15865,
+15865,
+15865,
+15865,
+15865,
+15872,
+15872,
+15872,
+15896,
+15921,
+15921,
+15921,
+15947,
+15947,
+15947,
+15947,
+15947,
+15978,
+15978,
+15978,
+16009,
+16025,
+16042,
+16042,
16042,
-16069,
-16076,
-16076,
+16052,
+16052,
+16078,
+16078,
+16082,
16092,
-16099,
-16108,
-16118,
-16118,
-16123,
-16123,
-16141,
-16158,
-16178,
-16193,
-16205,
-16223,
-16223,
-16223,
-16233,
-16233,
-16233,
-16256,
-16271,
-16271,
-16283,
-16302,
-16310,
-16310,
-16316,
-16338,
-16358,
-16358,
-16358,
-16368,
-16376,
-16409,
-16409,
-16442,
-16442,
-16451,
-16451,
-16451,
-16451,
-16472,
-16487,
-16506,
-16558,
-16579,
-16579,
-16593,
-16593,
-16593,
-16607,
-16607,
-16607,
-16623,
-16661,
-16684,
-16742,
-16742,
-16742,
-16762,
-16762,
-16762,
-16778,
-16815,
-16844,
-16922,
-16922,
-16922,
+16102,
+16102,
+16102,
+16102,
+16102,
+16102,
+16116,
+16126,
+16138,
+16144,
+16144,
+16164,
+16164,
+16174,
+16196,
+16203,
+16214,
+16234,
+16234,
+16261,
+16297,
+16297,
+16319,
+16347,
+16347,
+16347,
+16380,
+16380,
+16380,
+16380,
+16396,
+16396,
+16396,
+16396,
+16415,
+16423,
+16467,
+16514,
+16514,
+16518,
+16568,
+16578,
+16617,
+16637,
+16637,
+16637,
+16657,
+16683,
+16683,
+16704,
+16704,
+16732,
+16737,
+16758,
+16758,
+16797,
+16836,
+16836,
+16883,
+16883,
+16890,
+16890,
+16890,
+16905,
+16905,
+16905,
+16905,
+16905,
+16905,
+16905,
+16929,
16950,
-16968,
-16968,
-16987,
-17003,
-17003,
-17015,
-17015,
-17015,
-17035,
-17035,
-17035,
-17063,
-17079,
-17079,
-17079,
+16961,
+16961,
+17030,
+17050,
+17062,
+17080,
+17093,
17093,
17110,
-17127,
-17140,
-17158,
-17178,
-17192,
-17219,
-17219,
-17219,
-17238,
-17254,
-17254,
-17264,
-17264,
-17279,
-17279,
-17279,
-17279,
-17279,
-17293,
-17293,
-17293,
-17293,
-17304,
-17331,
-17331,
-17347,
-17366,
-17366,
-17391,
-17423,
-17427,
-17427,
-17427,
-17432,
-17432,
-17432,
-17451,
-17451,
+17138,
+17138,
+17148,
+17148,
+17216,
+17228,
+17239,
+17239,
+17269,
+17298,
+17298,
+17312,
+17312,
+17312,
+17312,
+17312,
+17312,
+17312,
+17345,
+17360,
+17360,
+17369,
+17369,
+17389,
+17408,
+17408,
+17416,
+17416,
+17416,
+17440,
17458,
-17462,
-17462,
-17477,
-17488,
-17515,
-17568,
-17580,
-17580,
-17603,
-17603,
-17615,
-17615,
-17638,
-17668,
-17677,
-17714,
-17714,
-17746,
-17746,
-17762,
-17771,
-17771,
-17771,
-17771,
-17771,
-17793,
-17793,
-17826,
-17826,
-17826,
-17837,
-17861,
-17881,
-17889,
-17889,
-17889,
-17889,
-17889,
-17889,
-17889,
-17889,
-17889,
-17889,
-17904,
-17904,
-17917,
-17917,
-17917,
-17917,
-17935,
-17956,
-17973,
-18008,
-18008,
-18017,
-18027,
-18027,
-18048,
-18065,
-18065,
-18065,
-18071,
-18075,
-18075,
-18103,
-18103,
-18103,
-18168,
-18168,
-18201,
-18213,
-18225,
-18264,
-18274,
-18292,
+17458,
+17458,
+17458,
+17458,
+17458,
+17458,
+17474,
+17499,
+17499,
+17499,
+17499,
+17506,
+17506,
+17512,
+17512,
+17512,
+17512,
+17532,
+17546,
+17569,
+17569,
+17579,
+17583,
+17583,
+17583,
+17591,
+17604,
+17604,
+17604,
+17604,
+17628,
+17685,
+17693,
+17707,
+17707,
+17734,
+17753,
+17753,
+17770,
+17770,
+17780,
+17798,
+17814,
+17814,
+17820,
+17855,
+17855,
+17855,
+17855,
+17894,
+17921,
+17942,
+17950,
+17969,
+17986,
+17986,
+17999,
+18031,
+18040,
+18053,
+18077,
+18086,
+18129,
+18159,
+18159,
+18159,
+18169,
+18169,
+18169,
+18169,
+18211,
+18234,
+18234,
+18242,
+18242,
+18259,
+18262,
18292,
-18298,
-18298,
-18327,
-18338,
-18390,
-18390,
-18390,
-18410,
-18410,
-18410,
-18410,
-18417,
-18417,
-18432,
-18432,
+18304,
+18307,
+18317,
+18317,
+18320,
+18320,
+18342,
+18380,
+18403,
18432,
-18438,
-18451,
-18451,
+18435,
+18455,
+18461,
18467,
-18467,
-18481,
-18485,
-18502,
-18502,
+18480,
+18483,
+18529,
18532,
-18548,
-18548,
-18564,
-18564,
-18564,
-18575,
-18591,
-18591,
-18637,
-18663,
-18680,
-18680,
-18691,
-18691,
-18691,
-18691,
-18691,
-18691,
-18699,
-18699,
-18715,
-18715,
-18715,
-18715,
-18715,
-18715,
-18715,
-18715,
-18715,
-18728,
-18728,
-18741,
-18741,
-18741,
-18771,
-18789,
-18795,
-18813,
-18825,
-18825,
-18864,
-18880,
-18880,
-18880,
-18880,
-18896,
-18896,
-18896,
-18896,
-18901,
-18931,
-18953,
-18964,
-18964,
-18984,
-18984,
-18993,
-19016,
-19025,
-19036,
+18555,
+18561,
+18592,
+18598,
+18598,
+18598,
+18601,
+18604,
+18607,
+18607,
+18616,
+18619,
+18643,
+18649,
+18649,
+18655,
+18674,
+18677,
+18693,
+18729,
+18729,
+18752,
+18775,
+18802,
+18805,
+18805,
+18805,
+18816,
+18829,
+18838,
+18872,
+18893,
+18921,
+18941,
+18950,
+18967,
+18970,
+18991,
+19004,
+19030,
19051,
-19072,
-19089,
-19114,
-19121,
-19121,
-19121,
-19141,
-19141,
-19158,
-19158,
-19203,
-19203,
-19203,
-19242,
-19242,
-19242,
-19287,
-19287,
-19287,
-19301,
-19316,
-19338,
-19338,
-19338,
-19358,
-19391,
-19419,
-19419,
-19443,
-19443,
-19456,
-19468,
-19468,
+19051,
+19083,
+19090,
+19093,
+19105,
+19132,
+19147,
+19150,
+19207,
+19227,
+19230,
+19230,
+19262,
+19271,
+19280,
+19291,
+19299,
+19299,
+19317,
+19327,
+19330,
+19333,
+19353,
+19377,
+19389,
+19408,
+19418,
+19418,
+19418,
+19427,
+19427,
+19430,
+19436,
+19445,
+19451,
19468,
-19479,
-19479,
-19495,
-19512,
-19512,
-19512,
-19540,
-19540,
-19552,
-19552,
-19552,
-19586,
-19586,
-19586,
-19586,
-19594,
-19605,
-19605,
+19471,
+19504,
+19507,
+19532,
+19535,
+19557,
+19569,
+19588,
+19591,
+19614,
+19617,
+19617,
+19627,
19630,
-19634,
-19634,
-19644,
-19673,
-19694,
-19714,
+19633,
+19655,
+19658,
+19661,
+19685,
+19703,
+19703,
+19706,
19714,
-19733,
-19743,
-19759,
-19766,
-19778,
-19797,
-19811,
-19825,
-19842,
-19842,
-19878,
-19878,
-19878,
-19887,
-19887,
-19905,
-19905,
-19905,
-19905,
-19922,
-19940,
-19959,
-19959,
-19995,
-20003,
-20018,
-20068,
-20076,
-20092,
-20101,
-20117,
-20148,
-20151,
-20199,
-20199,
-20219,
-20219,
-20225,
-20231,
+19727,
+19727,
+19737,
+19786,
+19795,
+19810,
+19827,
+19830,
+19845,
+19858,
+19864,
+19864,
+19872,
+19889,
+19915,
+19951,
+19951,
+19965,
+19974,
+19994,
+20021,
+20021,
+20036,
+20039,
+20042,
+20052,
+20055,
+20055,
+20055,
+20077,
+20091,
+20119,
+20130,
+20160,
+20160,
+20160,
+20163,
+20166,
+20183,
+20217,
+20228,
20242,
-20262,
-20268,
-20294,
-20307,
-20313,
-20325,
-20351,
-20351,
-20374,
-20391,
-20407,
-20433,
-20443,
-20446,
-20453,
-20466,
-20472,
-20558,
+20245,
+20245,
+20248,
+20267,
+20270,
+20270,
+20306,
+20327,
+20362,
+20365,
+20365,
+20368,
+20406,
+20412,
+20435,
+20441,
+20441,
+20464,
+20496,
+20515,
+20527,
20564,
-20599,
-20621,
-20627,
-20630,
-20630,
-20653,
-20669,
-20672,
-20675,
-20682,
-20682,
-20685,
-20696,
-20696,
-20756,
-20759,
-20781,
-20805,
-20808,
-20843,
-20859,
-20859,
-20862,
-20890,
-20916,
-20936,
-20936,
-20936,
+20567,
+20567,
+20575,
+20605,
+20605,
+20605,
+20608,
+20611,
+20634,
+20640,
+20677,
+20680,
+20717,
+20729,
+20754,
+20754,
+20770,
+20773,
+20773,
+20776,
+20779,
+20782,
+20817,
+20820,
+20872,
+20887,
+20904,
+20910,
+20923,
20946,
-20968,
-20971,
-20982,
-20985,
-20985,
-20998,
-21001,
-21001,
-21010,
-21026,
-21047,
-21073,
-21073,
-21104,
-21113,
+20952,
+20988,
+20988,
+20991,
+21016,
+21032,
+21035,
+21035,
+21035,
+21038,
+21038,
+21053,
+21056,
+21056,
+21056,
+21067,
+21077,
+21080,
+21080,
+21106,
21129,
+21129,
+21129,
+21144,
+21147,
+21158,
+21158,
21158,
-21182,
-21182,
+21177,
21198,
-21206,
-21221,
-21224,
-21224,
-21224,
-21227,
-21235,
-21259,
-21266,
-21275,
-21281,
-21281,
-21298,
-21315,
-21332,
-21335,
-21338,
-21341,
-21341,
-21360,
-21363,
-21366,
-21382,
-21382,
-21385,
-21402,
-21405,
-21428,
-21431,
-21449,
-21449,
-21452,
-21472,
-21481,
+21238,
+21302,
+21302,
+21339,
+21371,
+21374,
+21394,
+21407,
+21407,
+21417,
+21420,
+21437,
+21451,
+21454,
+21454,
+21496,
21514,
-21544,
-21569,
+21514,
+21517,
+21517,
+21535,
+21535,
+21535,
+21554,
+21580,
+21580,
21602,
-21605,
+21609,
21623,
21623,
-21627,
-21630,
-21643,
-21649,
-21684,
-21684,
-21691,
+21626,
+21636,
+21662,
+21677,
+21686,
+21686,
21691,
21697,
-21704,
-21718,
+21713,
21727,
-21784,
-21793,
-21813,
-21813,
+21751,
+21776,
+21786,
+21812,
21829,
-21832,
-21835,
-21838,
-21841,
-21841,
-21852,
-21904,
-21922,
-21922,
-21935,
-21935,
-21945,
-21945,
-21981,
-21984,
-21997,
-22018,
-22046,
+21882,
+21895,
+21902,
+21926,
+21951,
+21970,
+21980,
+21990,
+22002,
+22011,
+22021,
+22031,
+22052,
+22062,
22065,
-22068,
-22068,
-22108,
+22071,
+22082,
22114,
-22117,
-22121,
-22148,
-22148,
-22151,
-22174,
-22189,
-22204,
-22240,
-22273,
+22127,
+22135,
+22141,
+22144,
+22157,
+22180,
+22183,
+22209,
+22255,
22289,
-22304,
-22318,
-22342,
-22378,
-22383,
-22404,
-22407,
-22425,
-22425,
-22461,
-22493,
-22493,
-22493,
-22503,
-22528,
-22534,
-22540,
-22546,
-22549,
-22575,
-22608,
-22617,
-22617,
+22325,
+22363,
+22374,
+22413,
+22431,
+22431,
+22434,
+22445,
+22465,
+22472,
+22475,
+22491,
+22523,
+22538,
+22557,
+22581,
+22581,
+22591,
+22591,
+22604,
+22604,
+22607,
22620,
-22635,
-22640,
-22673,
-22713,
-22746,
-22752,
-22755,
-22791,
-22831,
-22873,
-22904,
-22910,
+22623,
+22634,
+22669,
+22672,
+22672,
+22684,
+22703,
+22724,
+22738,
+22784,
+22788,
+22803,
+22803,
+22803,
+22844,
+22863,
+22898,
+22898,
+22913,
22913,
-22925,
-22928,
-22946,
-22969,
-23005,
-23005,
-23008,
-23042,
-23055,
-23058,
-23079,
-23079,
-23098,
-23119,
-23119,
-23129,
-23154,
-23173,
-23185,
-23199,
-23202,
-23202,
-23202,
-23208,
+22913,
+22933,
+22933,
+22967,
+22977,
+23017,
+23044,
+23044,
+23047,
+23054,
+23061,
+23066,
+23077,
+23084,
+23094,
+23101,
+23113,
+23120,
+23163,
+23170,
+23170,
+23189,
+23196,
+23196,
23221,
23221,
-23233,
-23240,
-23243,
-23246,
-23258,
-23267,
-23267,
-23282,
-23307,
-23327,
-23340,
-23343,
-23343,
-23343,
-23346,
-23349,
-23358,
-23361,
-23409,
-23439,
-23442,
-23442,
-23445,
-23464,
+23261,
+23271,
+23278,
+23278,
+23315,
+23322,
+23354,
+23365,
+23365,
+23388,
+23393,
+23419,
+23424,
+23424,
+23424,
+23449,
23464,
-23476,
-23482,
-23504,
-23525,
+23471,
+23490,
+23509,
+23509,
+23516,
23540,
-23540,
-23547,
-23553,
-23553,
-23563,
-23587,
-23605,
-23611,
-23631,
-23631,
-23657,
-23677,
-23677,
-23677,
-23693,
-23700,
-23728,
-23731,
-23746,
-23763,
-23789,
-23789,
-23814,
-23830,
-23853,
-23872,
-23875,
-23885,
-23914,
-23939,
-23942,
-23942,
-23949,
-23971,
-23984,
-23999,
-24002,
-24040,
-24043,
-24110,
-24120,
-24133,
-24136,
-24146,
-24174,
-24184,
-24203,
-24207,
-24210,
-24228,
-24235,
-24251,
-24258,
-24268,
-24274,
-24281,
-24288,
-24298,
-24301,
-24389,
-24454,
-24478,
-24478,
-24478,
-24488,
-24514,
-24549,
-24565,
-24578,
-24606,
-24609,
-24626,
-24646,
-24678,
-24678,
-24684,
-24701,
+23567,
+23577,
+23584,
+23613,
+23620,
+23620,
+23620,
+23620,
+23620,
+23635,
+23642,
+23645,
+23645,
+23654,
+23654,
+23668,
+23684,
+23706,
+23727,
+23745,
+23758,
+23773,
+23784,
+23791,
+23821,
+23849,
+23849,
+23862,
+23891,
+23917,
+23924,
+23933,
+23965,
+23982,
+23989,
+24001,
+24011,
+24049,
+24057,
+24080,
+24096,
+24125,
+24159,
+24173,
+24186,
+24186,
+24200,
+24229,
+24255,
+24255,
+24262,
+24295,
+24305,
+24329,
+24336,
+24372,
+24372,
+24379,
+24413,
+24430,
+24448,
+24453,
+24471,
+24484,
+24484,
+24496,
+24496,
+24529,
+24553,
+24553,
+24560,
+24593,
+24619,
+24667,
+24674,
+24687,
+24705,
+24705,
24733,
-24745,
-24773,
-24773,
-24780,
-24794,
-24807,
-24817,
-24827,
-24833,
-24833,
-24839,
-24864,
-24871,
-24882,
-24888,
-24910,
-24917,
-24917,
-24955,
-24955,
-24979,
-24986,
-24986,
-24993,
-25000,
-25007,
-25019,
-25049,
-25056,
-25056,
-25073,
-25086,
-25093,
-25100,
-25107,
-25120,
-25133,
-25140,
-25161,
-25161,
-25189,
-25206,
-25206,
-25213,
-25222,
-25267,
-25304,
-25345,
-25345,
-25345,
-25363,
-25363,
-25370,
-25373,
-25373,
-25373,
-25395,
-25411,
-25425,
-25445,
-25445,
-25452,
-25462,
-25475,
-25511,
-25535,
-25560,
-25575,
-25582,
-25589,
-25601,
-25607,
-25610,
-25654,
-25679,
-25698,
-25705,
-25711,
-25711,
-25718,
-25724,
-25724,
-25724,
-25766,
-25766,
-25809,
-25828,
-25852,
-25852,
-25867,
-25867,
-25891,
-25934,
-25969,
-25986,
-26015,
-26041,
-26070,
-26095,
-26109,
-26129,
-26129,
-26150,
-26157,
-26175,
-26189,
-26229,
-26244,
-26244,
-26244,
-26244,
-26263,
-26263,
-26288,
-26326,
-26340,
-26340,
-26347,
-26382,
-26412,
-26448,
-26468,
-26474,
-26481,
-26488,
-26524,
-26563,
-26596,
-26596,
-26613,
-26627,
-26671,
-26710,
-26722,
-26729,
-26773,
-26812,
-26826,
-26844,
-26861,
-26876,
-26905,
-26905,
-26905,
-26919,
-26938,
-26970,
-26970,
-26970,
-26988,
-27001,
-27025,
-27025,
-27025,
-27054,
+24740,
+24757,
+24757,
+24764,
+24793,
+24810,
+24810,
+24824,
+24824,
+24859,
+24859,
+24883,
+24897,
+24897,
+24913,
+24919,
+24919,
+24919,
+24926,
+24938,
+24938,
+24943,
+24954,
+24987,
+25010,
+25017,
+25041,
+25041,
+25067,
+25118,
+25122,
+25129,
+25149,
+25171,
+25185,
+25211,
+25239,
+25262,
+25262,
+25262,
+25287,
+25293,
+25319,
+25347,
+25347,
+25347,
+25356,
+25382,
+25382,
+25397,
+25397,
+25405,
+25405,
+25405,
+25405,
+25420,
+25432,
+25432,
+25471,
+25507,
+25531,
+25541,
+25563,
+25591,
+25591,
+25591,
+25605,
+25612,
+25626,
+25648,
+25671,
+25692,
+25726,
+25739,
+25746,
+25750,
+25774,
+25785,
+25805,
+25812,
+25843,
+25843,
+25843,
+25843,
+25850,
+25888,
+25898,
+25905,
+25905,
+25942,
+25949,
+25956,
+25973,
+25984,
+25991,
+26074,
+26091,
+26101,
+26108,
+26115,
+26125,
+26168,
+26185,
+26192,
+26206,
+26216,
+26223,
+26245,
+26245,
+26245,
+26257,
+26261,
+26283,
+26310,
+26328,
+26350,
+26370,
+26370,
+26383,
+26413,
+26461,
+26475,
+26506,
+26529,
+26529,
+26529,
+26529,
+26543,
+26566,
+26566,
+26579,
+26638,
+26638,
+26638,
+26660,
+26660,
+26678,
+26678,
+26725,
+26725,
+26739,
+26754,
+26754,
+26761,
+26774,
+26774,
+26774,
+26781,
+26788,
+26795,
+26811,
+26817,
+26833,
+26833,
+26833,
+26847,
+26847,
+26880,
+26886,
+26899,
+26899,
+26899,
+26906,
+26928,
+26933,
+26933,
+26964,
+26973,
+26995,
+26995,
+26995,
+27011,
+27011,
+27031,
+27048,
+27048,
+27055,
27060,
-27073,
-27099,
-27133,
-27140,
-27157,
-27184,
-27231,
-27257,
-27271,
-27293,
-27312,
-27330,
-27392,
-27401,
-27401,
-27426,
-27433,
-27445,
-27482,
-27489,
-27489,
-27524,
+27074,
+27090,
+27090,
+27110,
+27137,
+27137,
+27137,
+27159,
+27175,
+27187,
+27205,
+27205,
+27225,
+27225,
+27255,
+27264,
+27264,
+27264,
+27264,
+27264,
+27264,
+27288,
+27292,
+27292,
+27326,
+27333,
+27337,
+27375,
+27387,
+27403,
+27415,
+27430,
+27446,
+27462,
+27483,
+27514,
+27540,
+27547,
27556,
-27563,
-27570,
-27570,
-27587,
-27600,
-27600,
-27623,
-27623,
-27673,
-27673,
-27688,
-27688,
-27688,
-27688,
-27694,
-27701,
-27706,
-27706,
-27728,
-27775,
-27782,
-27806,
-27828,
-27828,
-27834,
+27566,
+27573,
+27580,
+27586,
+27586,
+27590,
+27597,
+27657,
+27679,
+27702,
+27724,
+27740,
+27740,
+27768,
+27783,
+27790,
+27790,
+27809,
+27816,
27840,
-27853,
-27862,
-27868,
-27899,
-27906,
-27923,
+27847,
+27847,
+27872,
+27894,
+27910,
+27937,
27937,
-27956,
-27963,
-27974,
-27981,
-28010,
-28046,
-28050,
-28078,
-28085,
-28085,
-28092,
-28099,
-28105,
-28128,
-28146,
-28153,
-28170,
+27954,
+27977,
+27977,
+27984,
+27998,
+28032,
+28079,
+28093,
+28100,
+28107,
+28154,
+28160,
+28166,
+28166,
+28176,
28190,
-28197,
-28215,
-28225,
-28232,
-28251,
-28251,
-28251,
-28258,
-28271,
-28278,
-28278,
-28285,
-28300,
-28300,
-28325,
-28325,
-28325,
-28332,
-28362,
-28392,
-28401,
-28401,
-28416,
-28423,
-28468,
-28475,
-28488,
-28495,
-28504,
-28511,
-28558,
-28565,
-28588,
-28588,
-28622,
-28629,
-28629,
-28647,
-28660,
-28672,
-28683,
-28683,
-28698,
-28705,
-28712,
-28712,
-28730,
-28761,
-28776,
+28217,
+28260,
+28260,
+28305,
+28305,
+28326,
+28361,
+28422,
+28439,
+28455,
+28465,
+28465,
+28465,
+28494,
+28500,
+28516,
+28524,
+28531,
+28538,
+28552,
+28576,
+28576,
+28581,
+28581,
+28581,
+28593,
+28593,
+28593,
+28648,
+28668,
+28675,
+28675,
+28685,
+28700,
+28700,
+28700,
+28707,
+28725,
+28725,
+28732,
+28747,
+28781,
+28781,
28800,
-28826,
-28832,
-28870,
-28882,
-28905,
-28926,
-28926,
-28933,
-28933,
-28933,
-28958,
-28965,
-28981,
-28981,
-28988,
-29022,
-29034,
-29034,
-29056,
-29070,
-29086,
+28812,
+28833,
+28858,
+28865,
+28891,
+28908,
+28942,
+28959,
+28959,
+28959,
+28975,
+28982,
+28989,
+28989,
+28996,
+29017,
+29035,
+29035,
+29047,
+29063,
+29087,
29093,
-29099,
-29099,
-29111,
-29118,
-29118,
-29138,
+29093,
+29114,
+29114,
+29121,
+29121,
29138,
-29155,
-29155,
-29188,
-29231,
-29231,
-29231,
-29245,
-29245,
-29251,
-29263,
-29284,
-29290,
-29313,
-29313,
-29349,
-29362,
-29362,
-29393,
-29393,
+29208,
+29213,
+29213,
+29213,
+29228,
+29238,
+29257,
+29257,
+29257,
+29257,
+29257,
+29300,
+29318,
+29337,
+29344,
+29382,
+29389,
29407,
29407,
-29447,
-29453,
-29453,
-29470,
-29470,
-29498,
-29530,
-29530,
-29570,
-29570,
-29576,
-29576,
-29597,
-29610,
-29610,
-29620,
-29620,
-29620,
-29636,
-29661,
-29665,
-29665,
-29665,
-29680,
+29414,
+29421,
+29457,
+29457,
+29471,
+29494,
+29510,
+29510,
+29522,
+29538,
+29544,
+29544,
+29544,
+29544,
+29558,
+29580,
+29589,
+29589,
+29589,
+29589,
+29626,
+29644,
+29671,
29680,
-29693,
-29693,
-29693,
-29693,
-29698,
-29705,
-29738,
-29747,
-29765,
-29765,
-29775,
-29795,
-29795,
-29818,
-29818,
-29833,
-29885,
-29885,
-29919,
-29919,
-29953,
-29980,
-29988,
-30004,
-30023,
-30027,
-30040,
-30057,
-30064,
-30064,
-30073,
-30098,
-30098,
-30110,
-30110,
-30110,
-30130,
-30138,
-30164,
-30164,
-30168,
-30181,
-30185,
-30210,
-30223,
-30223,
-30251,
-30307,
-30346,
-30346,
-30359,
-30365,
-30365,
-30375,
-30408,
-30408,
-30416,
-30416,
-30422,
-30422,
-30422,
-30422,
-30422,
-30422,
-30444,
-30469,
-30506,
-30506,
-30514,
-30514,
-30540,
-30561,
-30575,
-30601,
-30601,
-30601,
-30617,
-30617,
-30652,
-30663,
+29702,
+29713,
+29713,
+29713,
+29724,
+29731,
+29731,
+29757,
+29764,
+29771,
+29800,
+29815,
+29815,
+29831,
+29870,
+29896,
+29940,
+29947,
+29954,
+29954,
+29954,
+29992,
+30006,
+30035,
+30058,
+30079,
+30086,
+30099,
+30122,
+30166,
+30221,
+30238,
+30245,
+30245,
+30259,
+30266,
+30287,
+30316,
+30323,
+30332,
+30332,
+30341,
+30348,
+30355,
+30366,
+30385,
+30419,
+30426,
+30473,
+30518,
+30551,
+30579,
+30579,
+30596,
+30615,
+30615,
+30615,
+30622,
+30626,
+30643,
+30661,
+30661,
+30661,
+30661,
30667,
-30674,
-30688,
-30695,
-30725,
-30725,
-30749,
-30760,
-30778,
-30786,
-30786,
-30799,
-30805,
-30809,
-30809,
-30845,
-30845,
-30845,
-30871,
-30871,
-30911,
-30932,
-30932,
-30947,
-30953,
-30957,
+30699,
+30699,
+30721,
+30746,
+30746,
+30758,
+30783,
+30801,
+30824,
+30824,
+30843,
+30876,
+30909,
+30929,
30976,
-30976,
-30985,
-30991,
+30986,
30991,
-31008,
-31024,
-31055,
-31055,
-31072,
-31112,
-31120,
-31128,
-31137,
-31181,
-31205,
-31205,
-31205,
-31205,
-31205,
-31227,
-31227,
-31234,
-31273,
-31273,
-31273,
-31273,
-31281,
-31317,
-31327,
-31348,
-31384,
-31392,
-31409,
-31409,
-31417,
-31446,
-31446,
-31446,
-31446,
-31446,
-31463,
-31463,
-31463,
-31463,
-31463,
-31483,
-31490,
-31490,
-31500,
-31500,
-31500,
-31525,
-31584,
-31584,
-31594,
-31594,
-31594,
-31636,
-31647,
-31647,
-31667,
-31667,
-31688,
-31692,
-31692,
-31704,
-31719,
-31734,
-31734,
-31739,
-31739,
-31739,
-31755,
+31005,
+31026,
+31026,
+31045,
+31113,
+31153,
+31160,
+31167,
+31183,
+31210,
+31225,
+31231,
+31247,
+31247,
+31265,
+31288,
+31359,
+31365,
+31376,
+31376,
+31391,
+31391,
+31391,
+31395,
+31395,
+31408,
+31414,
+31434,
+31448,
+31474,
+31491,
+31511,
+31520,
+31548,
+31578,
+31578,
+31578,
+31578,
+31602,
+31609,
+31645,
+31652,
+31671,
+31677,
+31712,
+31726,
+31737,
+31737,
+31737,
+31744,
+31744,
+31744,
+31751,
+31751,
+31762,
+31762,
+31769,
+31776,
31786,
-31807,
-31807,
-31807,
-31807,
-31822,
-31834,
-31838,
-31856,
-31856,
-31876,
-31884,
-31908,
-31908,
-31908,
-31912,
-31932,
-31954,
-31960,
-31960,
-31990,
-31990,
-32000,
-32000,
-32029,
-32054,
-32094,
-32101,
-32101,
-32111,
-32111,
+31802,
+31802,
+31817,
+31832,
+31852,
+31852,
+31852,
+31859,
+31866,
+31889,
+31889,
+31896,
+31903,
+31903,
+31910,
+31920,
+31945,
+31952,
+31952,
+31969,
+31969,
+31985,
+31985,
+31985,
+31985,
+31985,
+31985,
+31985,
+32009,
+32025,
+32025,
+32058,
+32071,
+32114,
+32114,
+32128,
+32152,
+32159,
+32159,
+32159,
+32166,
+32187,
+32187,
+32200,
32200,
-32217,
32226,
-32230,
-32230,
-32230,
-32230,
-32244,
-32270,
-32270,
-32295,
-32311,
-32311,
-32311,
-32325,
-32329,
-32341,
-32350,
-32387,
-32404,
-32414,
-32422,
-32443,
-32449,
-32449,
+32226,
+32233,
+32233,
+32233,
+32242,
+32242,
+32242,
+32282,
+32282,
+32282,
+32282,
+32282,
+32282,
+32289,
+32305,
+32312,
+32312,
+32317,
+32357,
+32357,
+32378,
+32378,
+32393,
+32393,
+32400,
+32423,
+32423,
+32423,
+32431,
+32431,
+32431,
32449,
-32469,
-32489,
-32489,
-32496,
-32496,
-32502,
-32502,
-32507,
-32524,
-32542,
-32551,
-32571,
-32604,
-32620,
-32639,
-32663,
-32668,
-32674,
-32689,
-32710,
-32710,
-32710,
-32710,
-32720,
-32720,
-32720,
-32775,
-32775,
-32775,
-32775,
-32828,
-32864,
-32864,
-32864,
-32864,
-32880,
-32901,
-32928,
-32953,
-32964,
-32964,
-32976,
-32976,
-32976,
-32976,
-32976,
-32997,
-33013,
-33043,
-33043,
-33075,
-33107,
-33122,
-33168,
-33182,
-33193,
-33193,
-33218,
-33218,
-33234,
-33240,
-33264,
-33304,
-33347,
-33359,
-33359,
-33359,
-33359,
-33368,
-33384,
-33384,
-33428,
-33428,
-33428,
-33428,
-33450,
-33459,
+32470,
+32494,
+32494,
+32494,
+32501,
+32501,
+32543,
+32561,
+32581,
+32581,
+32629,
+32644,
+32662,
+32673,
+32673,
+32696,
+32705,
+32722,
+32722,
+32728,
+32763,
+32787,
+32803,
+32803,
+32818,
+32865,
+32865,
+32875,
+32882,
+32911,
+32911,
+32943,
+32973,
+33000,
+33018,
+33018,
+33024,
+33060,
+33060,
+33071,
+33071,
+33071,
+33071,
+33085,
+33110,
+33149,
+33149,
+33157,
+33157,
+33206,
+33206,
+33206,
+33206,
+33222,
+33242,
+33242,
+33252,
+33252,
+33252,
+33252,
+33271,
+33285,
+33301,
+33301,
+33301,
+33332,
+33360,
+33360,
+33360,
+33360,
+33398,
+33398,
+33398,
+33398,
+33412,
+33412,
+33412,
+33412,
+33412,
33459,
-33478,
-33489,
-33489,
-33489,
-33496,
-33496,
-33507,
-33541,
-33577,
-33577,
-33587,
-33587,
-33604,
-33616,
-33642,
-33642,
-33642,
-33642,
-33642,
-33642,
-33654,
-33662,
-33662,
-33662,
-33679,
-33679,
-33716,
-33716,
-33726,
-33726,
-33733,
-33733,
-33766,
-33766,
-33766,
-33770,
-33770,
-33782,
-33806,
-33815,
-33815,
-33834,
-33834,
-33834,
-33834,
-33850,
-33864,
-33885,
-33885,
-33895,
-33895,
-33895,
-33931,
+33482,
+33486,
+33486,
+33499,
+33514,
+33514,
+33545,
+33545,
+33545,
+33567,
+33567,
+33567,
+33584,
+33589,
+33605,
+33620,
+33635,
+33667,
+33695,
+33706,
+33722,
+33751,
+33758,
+33758,
+33764,
+33764,
+33764,
+33781,
+33793,
+33804,
+33804,
+33819,
+33826,
+33826,
+33826,
+33826,
+33826,
+33835,
+33835,
+33835,
+33848,
+33862,
+33862,
+33862,
+33866,
+33938,
+33938,
33938,
33938,
-33944,
+33955,
33971,
-33977,
-34000,
-34000,
-34032,
-34036,
-34036,
-34053,
-34053,
-34068,
-34082,
-34082,
-34099,
-34110,
-34110,
-34115,
-34148,
-34148,
-34148,
-34148,
-34161,
+33971,
+33971,
+33983,
+33983,
+33990,
+33990,
+34027,
+34050,
+34050,
+34054,
+34079,
+34079,
+34079,
+34109,
+34124,
+34140,
+34140,
+34140,
+34140,
+34152,
+34163,
+34163,
34175,
-34194,
-34194,
-34194,
-34249,
-34249,
-34253,
-34253,
-34253,
+34214,
+34214,
+34221,
+34221,
+34231,
+34231,
+34231,
34253,
34253,
-34264,
-34264,
-34264,
-34272,
-34272,
-34279,
-34284,
-34292,
-34317,
-34323,
-34323,
-34323,
-34360,
-34360,
-34380,
-34411,
-34411,
-34433,
-34433,
-34454,
-34454,
-34454,
-34477,
-34477,
-34481,
-34481,
-34498,
-34504,
-34504,
-34521,
-34521,
-34556,
-34566,
-34572,
-34593,
-34593,
-34617,
-34617,
-34617,
-34640,
-34640,
-34640,
-34658,
+34270,
+34270,
+34270,
+34303,
+34303,
+34319,
+34325,
+34335,
+34344,
+34357,
+34373,
+34393,
+34393,
+34431,
+34461,
+34471,
+34471,
+34471,
+34492,
+34527,
+34527,
+34535,
+34547,
+34547,
+34554,
+34558,
+34558,
+34558,
+34558,
+34613,
+34613,
+34613,
+34647,
34665,
-34680,
-34698,
-34698,
-34698,
-34723,
-34723,
-34723,
-34723,
-34729,
-34753,
-34768,
-34768,
-34768,
-34768,
-34768,
-34768,
-34768,
-34768,
-34786,
-34799,
-34824,
-34824,
-34839,
-34859,
-34897,
-34897,
-34897,
-34906,
-34945,
-34945,
-34987,
-34987,
-34987,
-34987,
+34691,
+34695,
+34713,
+34727,
+34760,
+34760,
+34760,
+34765,
+34765,
+34787,
+34787,
+34787,
+34814,
+34820,
+34834,
+34834,
+34866,
+34881,
+34881,
+34881,
+34881,
+34881,
+34881,
+34902,
+34907,
+34907,
+34917,
+34917,
+34917,
+34917,
+34928,
+34933,
+34960,
+34972,
+34972,
+34981,
34993,
-35016,
-35025,
-35035,
-35035,
+35003,
+35003,
+35003,
+35013,
+35013,
+35054,
+35067,
+35067,
+35067,
35074,
-35074,
-35080,
-35080,
-35091,
-35098,
-35119,
-35147,
-35147,
-35147,
-35159,
-35165,
-35165,
-35165,
-35177,
-35204,
-35211,
-35211,
-35211,
-35233,
-35233,
-35233,
-35241,
-35241,
-35241,
-35273,
-35273,
-35273,
-35296,
-35303,
-35303,
-35308,
-35308,
-35308,
-35336,
+35081,
+35105,
+35120,
+35120,
+35120,
+35120,
+35142,
+35148,
+35148,
+35173,
+35205,
+35205,
+35214,
+35234,
+35266,
+35266,
+35266,
+35276,
+35290,
+35320,
35344,
-35355,
-35360,
-35360,
-35385,
-35403,
-35403,
-35436,
-35436,
-35436,
-35447,
-35447,
-35470,
-35476,
-35517,
-35528,
-35537,
-35537,
-35537,
-35563,
-35611,
-35622,
-35622,
-35631,
-35631,
-35655,
-35655,
-35661,
-35661,
-35674,
-35687,
-35687,
-35693,
-35693,
-35702,
-35711,
-35711,
-35722,
-35722,
-35741,
-35759,
-35759,
-35775,
-35775,
-35775,
-35775,
-35782,
-35782,
-35845,
-35845,
-35865,
-35903,
+35373,
+35408,
+35435,
+35463,
+35500,
+35500,
+35500,
+35511,
+35516,
+35516,
+35516,
+35522,
+35522,
+35544,
+35544,
+35566,
+35566,
+35582,
+35594,
+35594,
+35594,
+35594,
+35594,
+35636,
+35636,
+35654,
+35660,
+35680,
+35708,
+35708,
+35729,
+35729,
+35729,
+35734,
+35751,
+35751,
+35766,
+35766,
+35791,
+35791,
+35809,
+35809,
+35809,
+35825,
+35875,
+35875,
+35888,
35927,
-35949,
-35955,
-35961,
-35961,
-35974,
-35998,
-36040,
-36040,
-36058,
-36058,
-36058,
-36093,
-36093,
-36093,
-36093,
-36135,
-36143,
-36160,
-36171,
-36180,
-36189,
-36196,
-36196,
-36196,
-36224,
-36255,
-36262,
-36337,
-36337,
-36337,
-36349,
-36356,
-36370,
-36401,
+35927,
+35933,
+35933,
+35942,
+35960,
+35960,
+35972,
+35991,
+35991,
+36005,
+36041,
+36041,
+36091,
+36091,
+36115,
+36136,
+36152,
+36168,
+36179,
+36209,
+36227,
+36236,
+36263,
+36263,
+36263,
+36263,
+36263,
+36281,
+36292,
+36292,
+36301,
+36301,
+36372,
+36372,
+36377,
36401,
36420,
-36420,
-36434,
36434,
-36462,
-36462,
-36474,
-36481,
-36481,
-36481,
-36481,
-36481,
-36481,
-36481,
-36488,
-36488,
-36488,
-36505,
-36544,
-36571,
-36571,
-36587,
+36442,
+36442,
+36442,
+36476,
+36515,
+36536,
+36570,
+36570,
+36580,
+36580,
+36580,
+36580,
+36580,
+36598,
+36598,
+36598,
36616,
-36616,
-36628,
-36680,
-36690,
-36690,
-36711,
-36732,
-36732,
-36736,
-36754,
-36754,
-36761,
-36761,
-36794,
-36812,
-36849,
-36860,
-36860,
-36898,
-36918,
-36927,
-36944,
-36957,
-36957,
-36962,
-36977,
+36635,
+36641,
+36641,
+36641,
+36641,
+36641,
+36641,
+36651,
+36685,
+36685,
+36689,
+36689,
+36689,
+36689,
+36689,
+36694,
+36723,
+36735,
+36757,
+36757,
+36757,
+36757,
+36757,
+36783,
+36783,
+36807,
+36835,
+36835,
+36866,
+36879,
+36885,
+36900,
+36919,
+36961,
+36978,
+36987,
37000,
-37017,
-37017,
-37017,
-37017,
-37032,
-37032,
-37038,
-37054,
-37054,
-37063,
-37063,
-37063,
-37088,
-37135,
-37145,
-37156,
+37044,
+37076,
+37087,
+37103,
+37117,
+37117,
+37128,
+37151,
37169,
-37181,
-37210,
-37254,
-37254,
-37285,
-37316,
-37333,
-37378,
-37391,
-37422,
-37444,
-37444,
-37444,
-37444,
-37444,
-37460,
-37460,
-37518,
-37518,
-37541,
-37576,
-37593,
-37610,
-37614,
-37619,
-37625,
-37625,
-37629,
-37649,
-37670,
-37698,
-37714,
-37727,
-37739,
-37739,
-37739,
-37762,
-37762,
-37790,
-37790,
-37807,
-37807,
-37807,
-37862,
-37878,
-37893,
-37900,
-37920,
-37951,
-37951,
+37196,
+37226,
+37226,
+37252,
+37252,
+37252,
+37275,
+37292,
+37292,
+37292,
+37292,
+37292,
+37292,
+37292,
+37292,
+37292,
+37324,
+37335,
+37335,
+37352,
+37358,
+37377,
+37399,
+37410,
+37445,
+37445,
+37451,
+37451,
+37451,
+37462,
+37510,
+37510,
+37555,
+37555,
+37555,
+37555,
+37555,
+37569,
+37620,
+37631,
+37648,
+37656,
+37666,
+37673,
+37697,
+37697,
+37723,
+37769,
+37769,
+37769,
+37788,
+37826,
+37851,
+37851,
+37851,
+37851,
+37873,
+37873,
+37873,
+37891,
+37891,
+37891,
+37904,
+37909,
+37909,
+37909,
+37909,
+37916,
+37943,
+37954,
+37954,
+37964,
37976,
-37985,
-37985,
-38021,
-38051,
-38065,
-38065,
-38065,
-38065,
-38081,
-38081,
-38112,
-38112,
-38150,
-38150,
-38150,
-38150,
-38150,
-38150,
-38150,
-38167,
-38178,
-38206,
-38238,
-38238,
-38261,
-38296,
-38296,
-38321,
-38321,
-38363,
-38389,
-38389,
-38389,
-38403,
-38403,
-38415,
-38431,
-38431,
-38445,
-38473,
-38525,
-38571,
-38578,
-38578,
-38578,
-38589,
-38589,
+37976,
+37989,
+37989,
+38018,
+38018,
+38018,
+38018,
+38025,
+38025,
+38037,
+38074,
+38091,
+38091,
+38091,
+38104,
+38104,
+38104,
+38136,
+38136,
+38163,
+38163,
+38199,
+38218,
+38218,
+38218,
+38218,
+38258,
+38258,
+38258,
+38258,
+38287,
+38308,
+38323,
+38323,
+38323,
+38340,
+38375,
+38419,
+38419,
+38419,
+38419,
+38419,
+38419,
+38435,
+38471,
+38471,
+38504,
+38526,
+38526,
+38582,
38589,
38589,
-38604,
-38618,
-38618,
-38618,
-38624,
-38624,
-38634,
-38640,
-38640,
-38647,
-38685,
-38685,
-38694,
-38714,
-38729,
-38729,
-38729,
-38755,
-38755,
+38609,
+38619,
+38633,
+38633,
+38667,
+38667,
+38667,
+38667,
+38680,
+38709,
+38709,
+38709,
+38709,
+38737,
+38737,
+38737,
38760,
38760,
-38778,
-38778,
-38814,
-38814,
-38830,
-38842,
-38857,
-38857,
-38867,
-38882,
-38882,
-38893,
-38893,
-38893,
-38911,
-38911,
-38911,
-38925,
-38925,
-38932,
-38939,
-38939,
-38945,
-38953,
-38953,
-38953,
-38960,
-38960,
-38994,
-39004,
-39004,
-39004,
-39004,
-39014,
-39019,
-39051,
-39073,
-39073,
-39095,
+38760,
+38760,
+38760,
+38779,
+38833,
+38833,
+38883,
+38883,
+38883,
+38889,
+38908,
+38956,
+38967,
+38988,
+38988,
+39028,
+39047,
+39047,
39095,
-39137,
-39162,
-39162,
-39167,
-39167,
-39188,
-39205,
-39210,
-39223,
-39223,
-39223,
-39237,
-39255,
-39280,
-39280,
-39311,
-39358,
-39406,
-39406,
-39406,
+39149,
+39158,
+39158,
+39158,
+39182,
+39233,
+39262,
+39277,
+39313,
+39313,
+39345,
+39362,
+39369,
+39369,
+39378,
+39395,
+39395,
39429,
-39444,
-39454,
-39487,
-39487,
-39503,
-39516,
-39516,
-39516,
-39522,
-39540,
-39540,
-39559,
-39559,
-39559,
-39569,
-39591,
-39591,
-39611,
-39611,
-39611,
-39611,
-39619,
-39619,
-39619,
-39619,
-39631,
-39646,
-39646,
-39651,
-39657,
-39657,
-39657,
-39657,
-39674,
-39729,
-39729,
-39758,
-39772,
-39789,
-39875,
-39887,
-39887,
-39887,
-39887,
-39944,
-39944,
-39983,
-39999,
-39999,
-40015,
-40019,
-40049,
-40064,
-40064,
-40073,
-40073,
-40080,
-40089,
-40089,
-40089,
-40089,
-40094,
-40094,
-40101,
-40112,
-40128,
-40155,
-40187,
-40187,
-40187,
-40194,
-40194,
-40221,
-40258,
-40258,
-40265,
-40272,
-40272,
-40279,
-40283,
-40290,
-40290,
-40307,
-40336,
-40370,
-40370,
-40370,
-40389,
-40389,
-40406,
-40429,
-40429,
-40429,
-40429,
-40429,
-40429,
-40429,
+39438,
+39453,
+39502,
+39502,
+39539,
+39539,
+39593,
+39618,
+39644,
+39689,
+39712,
+39712,
+39712,
+39736,
+39736,
+39736,
+39746,
+39759,
+39777,
+39777,
+39802,
+39802,
+39812,
+39812,
+39825,
+39825,
+39832,
+39832,
+39847,
+39847,
+39872,
+39911,
+39957,
+39991,
+39991,
+40009,
+40026,
+40026,
+40035,
+40035,
+40035,
+40035,
+40039,
+40039,
+40039,
+40061,
+40069,
+40086,
+40086,
+40091,
+40111,
+40150,
+40179,
+40199,
+40215,
+40215,
+40215,
+40238,
+40238,
+40238,
+40252,
+40252,
+40252,
+40259,
+40259,
+40321,
+40321,
+40328,
+40328,
+40346,
+40346,
+40369,
+40380,
+40388,
+40388,
+40388,
+40407,
+40423,
+40423,
+40423,
40436,
-40447,
-40447,
-40447,
-40464,
-40478,
-40487,
-40487,
-40520,
-40520,
-40526,
-40526,
-40531,
-40531,
-40549,
-40568,
-40574,
+40436,
+40443,
+40449,
+40457,
+40473,
+40473,
+40496,
+40502,
+40534,
+40556,
40574,
-40616,
-40623,
-40630,
+40595,
+40613,
+40613,
40630,
+40637,
+40637,
40644,
-40666,
-40666,
-40695,
-40703,
-40703,
-40711,
-40711,
-40718,
-40723,
-40736,
-40736,
-40736,
-40746,
-40785,
-40795,
-40804,
-40804,
-40816,
-40835,
-40851,
-40877,
-40891,
-40931,
-40938,
-40976,
-40986,
-41006,
-41006,
-41013,
-41025,
-41031,
-41045,
-41045,
-41097,
-41118,
-41118,
-41143,
-41157,
-41183,
-41194,
-41194,
-41236,
-41264,
-41286,
-41286,
-41327,
-41334,
-41334,
-41334,
-41334,
-41352,
-41352,
-41358,
-41358,
-41358,
-41375,
-41383,
+40650,
+40675,
+40686,
+40686,
+40686,
+40752,
+40781,
+40802,
+40815,
+40821,
+40838,
+40838,
+40838,
+40855,
+40887,
+40930,
+40949,
+40965,
+40969,
+40988,
+40988,
+40988,
+40988,
+40988,
+40988,
+41020,
+41036,
+41059,
+41074,
+41074,
+41093,
+41098,
+41098,
+41104,
+41156,
+41184,
+41184,
+41200,
+41223,
+41238,
+41244,
+41244,
+41244,
+41267,
+41267,
+41267,
+41273,
+41273,
+41273,
+41297,
+41297,
+41303,
+41324,
+41335,
+41354,
+41360,
+41360,
+41360,
+41360,
+41367,
+41367,
41383,
-41398,
-41423,
-41423,
-41467,
-41467,
-41474,
-41490,
-41490,
-41521,
-41521,
-41521,
-41559,
-41566,
-41576,
-41598,
-41643,
+41408,
+41449,
+41486,
+41514,
+41514,
+41514,
+41514,
+41514,
+41529,
+41548,
+41548,
+41589,
+41608,
+41608,
+41628,
+41628,
41667,
-41680,
-41703,
-41703,
-41703,
-41714,
-41752,
-41761,
-41768,
-41775,
-41789,
-41789,
-41825,
-41841,
-41841,
-41841,
-41871,
-41906,
-41906,
-41936,
+41701,
+41701,
+41719,
+41719,
+41732,
+41754,
+41785,
+41810,
+41845,
+41860,
+41860,
+41860,
+41873,
+41890,
+41921,
+41942,
+41942,
+41952,
41975,
-41990,
-41990,
-41990,
-41990,
-42030,
-42030,
-42056,
-42056,
-42066,
-42066,
-42097,
-42097,
-42124,
-42141,
-42141,
-42141,
-42147,
-42154,
-42161,
-42177,
-42177,
-42203,
-42210,
-42210,
-42210,
-42210,
-42210,
-42222,
-42222,
-42222,
-42244,
-42244,
-42300,
-42300,
-42322,
-42346,
-42356,
-42356,
-42387,
-42387,
-42387,
-42413,
-42413,
-42434,
-42434,
-42487,
-42507,
-42514,
-42528,
-42528,
-42528,
-42548,
-42582,
-42582,
-42588,
-42631,
-42649,
+42000,
+42000,
+42000,
+42021,
+42034,
+42034,
+42034,
+42034,
+42034,
+42049,
+42049,
+42096,
+42096,
+42096,
+42096,
+42107,
+42107,
+42122,
+42173,
+42208,
+42214,
+42231,
+42231,
+42238,
+42252,
+42252,
+42266,
+42292,
+42316,
+42331,
+42331,
+42331,
+42350,
+42365,
+42371,
+42378,
+42389,
+42395,
+42395,
+42435,
+42446,
+42446,
+42458,
+42458,
+42476,
+42476,
+42476,
+42486,
+42506,
+42510,
+42559,
+42565,
+42583,
+42600,
+42643,
+42650,
42656,
-42676,
-42684,
-42704,
-42718,
-42743,
-42764,
-42777,
-42783,
-42802,
-42829,
-42855,
-42869,
-42869,
-42869,
-42869,
-42879,
-42879,
-42891,
-42891,
-42919,
-42919,
-42934,
-42950,
-42950,
-42992,
-43012,
-43012,
-43021,
-43033,
-43033,
-43056,
-43066,
-43079,
-43079,
-43079,
+42668,
+42688,
+42698,
+42738,
+42761,
+42761,
+42800,
+42806,
+42847,
+42851,
+42877,
+42881,
+42917,
+42929,
+42945,
+42945,
+42945,
+42951,
+42951,
+42967,
+43009,
+43009,
+43028,
+43040,
+43040,
+43046,
+43046,
+43072,
43088,
-43095,
-43163,
-43163,
-43163,
-43163,
-43171,
-43171,
-43194,
-43217,
-43217,
-43223,
-43252,
-43252,
-43267,
-43281,
-43304,
-43322,
-43348,
-43359,
-43392,
-43402,
-43441,
-43441,
+43097,
+43139,
+43146,
+43172,
+43192,
+43192,
+43192,
+43220,
+43232,
+43238,
+43238,
+43256,
+43256,
+43256,
+43277,
+43295,
+43313,
+43325,
+43325,
+43349,
+43367,
+43380,
+43387,
+43425,
43441,
-43468,
-43468,
-43468,
-43485,
-43489,
-43519,
+43484,
+43484,
+43507,
+43507,
43526,
-43526,
-43564,
-43564,
-43564,
-43583,
-43583,
-43605,
-43609,
-43621,
-43640,
-43651,
-43651,
-43655,
-43662,
-43662,
-43685,
-43712,
-43728,
-43733,
-43752,
-43760,
-43775,
-43786,
-43786,
-43796,
-43811,
+43537,
+43572,
+43577,
+43577,
+43587,
+43591,
+43591,
+43619,
+43626,
+43646,
+43646,
+43674,
+43704,
+43704,
+43751,
+43781,
+43798,
+43824,
+43846,
43846,
43862,
43862,
-43892,
-43930,
-43930,
-43956,
+43878,
+43878,
+43884,
+43911,
+43911,
+43911,
+43911,
+43911,
+43925,
+43933,
+43943,
+43949,
+43949,
+43976,
+43976,
+43976,
43986,
-44006,
-44006,
-44016,
-44059,
-44059,
-44084,
-44091,
-44091,
-44105,
-44113,
-44128,
-44157,
-44167,
-44173,
-44195,
-44195,
-44195,
-44213,
-44213,
-44213,
-44238,
-44255,
-44316,
-44316,
+44000,
+44000,
+44012,
+44035,
+44053,
+44053,
+44053,
+44068,
+44090,
+44118,
+44130,
+44130,
+44130,
+44130,
+44142,
+44149,
+44155,
+44155,
+44155,
+44155,
+44174,
+44174,
+44174,
+44190,
+44190,
+44215,
+44215,
+44215,
+44231,
+44263,
+44273,
+44273,
+44273,
+44273,
+44296,
+44311,
+44311,
+44311,
+44327,
44327,
44327,
-44335,
-44335,
-44335,
-44335,
-44372,
-44372,
-44372,
-44372,
-44379,
-44402,
-44431,
-44454,
-44470,
-44486,
-44486,
-44512,
-44512,
-44525,
-44538,
-44555,
-44574,
-44574,
-44574,
-44583,
-44583,
-44583,
-44583,
-44597,
-44617,
-44627,
-44627,
-44666,
-44666,
-44666,
-44673,
-44673,
-44673,
-44736,
-44736,
-44736,
-44736,
-44743,
-44763,
-44787,
-44804,
-44819,
-44819,
-44835,
-44848,
-44886,
-44886,
-44915,
-44944,
-44949,
-44949,
-44949,
-44949,
-44976,
-44976,
-45008,
-45008,
-45028,
-45028,
+44345,
+44368,
+44368,
+44368,
+44368,
+44368,
+44380,
+44414,
+44414,
+44422,
+44439,
+44459,
+44459,
+44484,
+44484,
+44484,
+44503,
+44503,
+44520,
+44520,
+44520,
+44520,
+44524,
+44557,
+44557,
+44564,
+44584,
+44584,
+44606,
+44614,
+44614,
+44614,
+44614,
+44634,
+44648,
+44679,
+44685,
+44728,
+44778,
+44785,
+44792,
+44792,
+44803,
+44814,
+44829,
+44845,
+44863,
+44870,
+44895,
+44910,
+44919,
+44960,
+44960,
+44972,
+44972,
+44972,
+44972,
+44985,
+45017,
+45036,
45062,
45062,
-45069,
-45069,
-45095,
-45095,
-45095,
+45074,
+45088,
45105,
-45122,
-45143,
-45153,
-45153,
-45153,
-45153,
-45153,
-45153,
-45153,
-45153,
-45158,
-45158,
-45158,
+45136,
+45142,
+45142,
+45174,
45186,
-45198,
-45225,
-45225,
-45243,
-45270,
-45287,
-45287,
-45287,
-45316,
-45348,
-45365,
-45372,
-45381,
-45381,
-45402,
-45402,
+45193,
+45193,
+45203,
+45203,
+45203,
+45213,
+45232,
+45232,
+45236,
+45277,
+45297,
+45297,
+45297,
+45302,
+45315,
+45315,
+45361,
+45385,
45420,
-45420,
-45435,
-45435,
-45448,
-45448,
-45499,
-45507,
-45507,
-45529,
-45547,
-45547,
-45547,
-45556,
-45573,
-45583,
-45593,
-45609,
-45620,
-45620,
-45663,
-45688,
-45705,
-45705,
-45711,
-45729,
-45752,
-45766,
-45772,
-45782,
-45799,
-45811,
-45866,
-45866,
-45903,
-45903,
-45903,
-45903,
-45924,
-45974,
-45978,
-45994,
-45994,
+45455,
+45455,
+45455,
+45455,
+45464,
+45486,
+45490,
+45490,
+45508,
+45524,
+45524,
+45524,
+45543,
+45543,
+45543,
+45589,
+45613,
+45629,
+45641,
+45669,
+45681,
+45698,
+45698,
+45698,
+45698,
+45723,
+45723,
+45723,
+45735,
+45742,
+45763,
+45787,
+45791,
+45791,
+45818,
+45831,
+45843,
+45861,
+45861,
+45877,
+45877,
+45892,
+45892,
+45901,
+45916,
+45935,
+45935,
+45935,
+45953,
+45953,
+45967,
+45967,
45998,
-46045,
-46060,
-46083,
-46083,
-46114,
-46123,
-46130,
-46180,
-46186,
-46201,
-46201,
-46201,
-46259,
-46280,
-46291,
-46295,
-46301,
-46347,
-46347,
-46396,
-46412,
-46455,
-46455,
-46455,
-46460,
-46487,
-46509,
-46509,
-46509,
-46523,
-46565,
-46578,
-46578,
-46578,
-46584,
-46594,
-46594,
-46638,
-46659,
-46659,
-46671,
-46671,
-46691,
-46691,
-46691,
-46718,
-46718,
-46732,
+46007,
+46007,
+46011,
+46024,
+46047,
+46047,
+46047,
+46053,
+46053,
+46067,
+46078,
+46098,
+46126,
+46169,
+46194,
+46225,
+46240,
+46240,
+46256,
+46279,
+46279,
+46308,
+46308,
+46308,
+46330,
+46373,
+46383,
+46407,
+46407,
+46425,
+46425,
+46441,
+46476,
+46498,
+46512,
+46525,
+46525,
+46525,
+46540,
+46557,
+46574,
+46590,
+46609,
+46609,
+46632,
+46632,
+46647,
+46655,
+46697,
46742,
-46759,
-46759,
-46787,
-46803,
-46803,
-46816,
-46844,
-46867,
-46867,
-46898,
+46742,
+46742,
+46742,
+46742,
+46752,
+46780,
+46780,
+46807,
+46807,
+46807,
+46807,
+46820,
+46829,
+46864,
+46864,
+46894,
+46894,
46898,
-46920,
-46963,
-46991,
-47006,
-47016,
-47016,
-47028,
-47043,
-47047,
-47047,
-47047,
-47078,
-47093,
-47100,
-47120,
-47125,
-47139,
-47139,
-47143,
-47162,
-47162,
+46938,
+46938,
+46938,
+46945,
+46945,
+46971,
+46977,
+46999,
+47012,
+47026,
+47026,
+47044,
+47059,
+47059,
+47104,
+47104,
+47104,
+47104,
+47104,
+47104,
+47104,
+47121,
+47121,
+47121,
+47131,
+47160,
+47170,
47182,
47182,
-47204,
-47204,
-47223,
-47223,
-47234,
-47234,
-47234,
-47239,
-47239,
-47247,
-47247,
-47253,
-47287,
-47287,
-47287,
-47287,
-47287,
-47306,
-47346,
-47376,
-47376,
-47412,
-47412,
-47412,
-47412,
-47412,
-47412,
-47420,
-47429,
-47438,
-47438,
-47438,
-47438,
-47449,
-47449,
-47465,
+47182,
+47209,
+47209,
+47280,
+47302,
+47362,
+47374,
+47389,
+47398,
+47398,
+47418,
+47425,
+47435,
+47452,
+47459,
+47459,
+47459,
47465,
-47479,
-47498,
-47498,
-47498,
-47498,
-47510,
-47532,
-47540,
+47486,
+47486,
+47506,
+47522,
+47541,
47547,
-47553,
-47553,
-47553,
-47553,
-47569,
-47569,
-47589,
-47589,
-47589,
+47557,
+47603,
+47621,
+47631,
47631,
-47637,
-47637,
-47637,
-47637,
-47653,
-47653,
-47653,
-47672,
-47672,
-47672,
-47703,
-47703,
-47703,
-47711,
-47725,
-47725,
-47748,
-47778,
-47790,
-47790,
-47815,
-47815,
-47815,
-47842,
-47842,
-47858,
-47880,
-47880,
-47880,
-47880,
-47910,
-47910,
-47921,
-47948,
-47959,
-47959,
-47959,
-47979,
-47979,
+47662,
+47662,
+47683,
+47689,
+47706,
+47731,
+47736,
+47736,
+47736,
+47736,
+47750,
+47780,
+47780,
+47785,
+47792,
+47803,
+47810,
+47837,
+47837,
+47852,
+47852,
+47890,
+47890,
+47890,
+47902,
+47924,
+47968,
47984,
-48010,
-48019,
+48002,
+48002,
+48002,
+48002,
+48002,
+48002,
+48014,
+48020,
+48020,
+48020,
48035,
-48035,
-48054,
-48054,
-48089,
-48089,
-48105,
-48115,
-48121,
-48135,
-48159,
-48169,
-48169,
-48169,
-48169,
+48045,
+48045,
+48045,
+48053,
+48053,
+48092,
+48092,
+48117,
+48117,
+48143,
+48143,
+48150,
+48160,
48187,
48187,
48187,
-48227,
-48244,
-48256,
-48272,
-48272,
-48287,
-48287,
-48287,
-48287,
-48287,
-48309,
-48341,
-48341,
-48351,
-48351,
-48351,
-48380,
-48380,
-48380,
-48386,
-48414,
-48439,
-48455,
-48491,
-48505,
-48517,
-48517,
-48517,
-48517,
-48562,
-48577,
-48577,
-48589,
-48594,
-48631,
-48631,
-48644,
-48644,
-48644,
-48648,
+48203,
+48203,
+48239,
+48250,
+48250,
+48250,
+48250,
+48250,
+48269,
+48284,
+48288,
+48288,
+48288,
+48303,
+48303,
+48303,
+48303,
+48303,
+48322,
+48322,
+48322,
+48335,
+48347,
+48347,
+48347,
+48360,
+48360,
+48360,
+48360,
+48360,
+48379,
+48379,
+48392,
+48392,
+48392,
+48392,
+48409,
+48425,
+48459,
+48459,
+48466,
+48483,
+48504,
+48504,
+48536,
+48536,
+48536,
+48550,
+48564,
+48606,
+48626,
48660,
-48667,
-48685,
-48685,
-48695,
-48695,
-48695,
-48695,
-48710,
-48710,
-48710,
-48727,
-48753,
-48753,
-48769,
-48769,
-48775,
-48788,
-48788,
-48802,
-48830,
-48834,
-48873,
-48873,
-48882,
-48886,
-48898,
-48915,
-48915,
-48950,
-49002,
-49019,
-49019,
-49029,
-49029,
-49068,
-49068,
-49068,
-49090,
-49090,
-49106,
-49106,
-49106,
-49113,
-49148,
-49163,
-49163,
-49206,
-49229,
-49253,
-49281,
-49281,
-49281,
-49281,
+48677,
+48677,
+48677,
+48689,
+48689,
+48689,
+48697,
+48697,
+48728,
+48739,
+48757,
+48757,
+48777,
+48793,
+48793,
+48815,
+48815,
+48829,
+48852,
+48860,
+48860,
+48899,
+48899,
+48912,
+48963,
+48963,
+48992,
+48992,
+48992,
+48992,
+49006,
+49014,
+49042,
+49042,
+49055,
+49055,
+49055,
+49071,
+49077,
+49108,
+49108,
+49120,
+49120,
+49120,
+49120,
+49127,
+49127,
+49131,
+49145,
+49162,
+49162,
+49179,
+49207,
+49207,
+49207,
+49207,
+49207,
+49207,
+49207,
+49207,
+49207,
+49218,
+49218,
+49235,
+49250,
+49260,
+49270,
+49270,
+49286,
49295,
-49307,
-49311,
-49327,
-49343,
-49360,
-49403,
+49295,
+49295,
+49295,
+49337,
+49347,
+49358,
+49358,
+49390,
49403,
49403,
-49429,
-49429,
-49434,
-49434,
-49434,
-49434,
-49444,
-49444,
-49460,
-49460,
-49496,
-49503,
-49538,
-49574,
-49574,
-49574,
-49574,
+49413,
+49423,
+49423,
+49423,
+49455,
+49471,
+49471,
+49477,
+49477,
+49477,
+49494,
+49512,
+49521,
+49521,
+49552,
+49582,
49612,
-49612,
-49651,
-49661,
-49686,
-49686,
-49695,
-49710,
-49710,
-49725,
-49742,
-49742,
-49742,
-49742,
-49742,
-49757,
-49757,
-49762,
-49815,
-49835,
-49863,
-49863,
-49869,
-49888,
-49907,
-49907,
-49917,
-49940,
-49940,
-49946,
-49963,
-49998,
-50017,
-50031,
-50052,
-50074,
-50074,
-50085,
-50085,
-50105,
-50105,
-50123,
-50123,
-50136,
-50152,
-50192,
-50192,
-50212,
-50212,
-50226,
-50226,
-50259,
-50259,
-50259,
-50282,
-50287,
-50315,
-50320,
+49641,
+49653,
+49653,
+49653,
+49675,
+49680,
+49690,
+49724,
+49724,
+49755,
+49773,
+49795,
+49795,
+49795,
+49795,
+49795,
+49801,
+49822,
+49822,
+49850,
+49850,
+49878,
+49897,
+49897,
+49897,
+49897,
+49897,
+49919,
+49942,
+49947,
+49956,
+49956,
+49956,
+49975,
+49975,
+49990,
+50000,
+50000,
+50000,
+50008,
+50034,
+50034,
+50050,
+50050,
+50059,
+50059,
+50075,
+50075,
+50075,
+50104,
+50112,
+50112,
+50112,
+50112,
+50149,
+50158,
+50158,
+50198,
+50232,
+50248,
+50262,
+50262,
+50272,
+50272,
+50281,
+50281,
+50281,
+50288,
+50295,
+50295,
+50305,
50320,
-50320,
-50320,
-50379,
-50396,
-50412,
-50412,
-50412,
-50412,
-50443,
-50466,
-50466,
-50489,
-50489,
-50503,
-50503,
+50363,
+50363,
+50400,
+50410,
+50410,
+50423,
+50435,
+50448,
+50453,
+50467,
+50467,
+50467,
+50485,
+50485,
50503,
-50503,
-50521,
-50529,
-50529,
-50556,
-50575,
-50575,
-50581,
-50581,
-50581,
-50585,
-50585,
-50598,
-50598,
-50598,
-50598,
-50598,
-50611,
-50636,
-50636,
-50646,
-50661,
-50661,
-50661,
-50680,
-50680,
-50713,
-50713,
-50729,
-50753,
-50753,
-50759,
-50791,
-50806,
-50806,
-50806,
-50806,
-50806,
-50814,
-50831,
-50831,
-50831,
-50878,
-50897,
-50897,
-50921,
-50943,
-50949,
-50960,
-50981,
-50991,
-51008,
-51020,
-51020,
-51035,
-51045,
-51045,
-51085,
-51110,
-51123,
-51123,
-51142,
-51176,
-51204,
-51204,
-51214,
-51214,
-51214,
-51214,
-51232,
+50513,
+50535,
+50535,
+50542,
+50583,
+50589,
+50597,
+50602,
+50627,
+50640,
+50682,
+50689,
+50708,
+50712,
+50712,
+50712,
+50728,
+50746,
+50774,
+50774,
+50790,
+50802,
+50802,
+50802,
+50834,
+50847,
+50865,
+50880,
+50880,
+50880,
+50880,
+50899,
+50908,
+50923,
+50955,
+50993,
+51005,
+51005,
+51016,
+51025,
+51043,
+51064,
+51064,
+51081,
+51109,
+51126,
+51178,
+51178,
+51178,
+51187,
+51220,
+51220,
51239,
51239,
-51279,
-51279,
-51279,
-51279,
-51279,
-51295,
-51295,
-51314,
-51340,
-51358,
-51383,
-51414,
-51434,
-51434,
-51434,
-51440,
+51239,
+51258,
+51274,
+51274,
+51311,
+51311,
+51311,
+51325,
+51336,
+51336,
+51336,
+51336,
+51336,
+51336,
+51336,
+51336,
+51349,
+51349,
+51369,
+51375,
+51375,
+51375,
+51375,
+51375,
+51398,
+51417,
+51417,
+51427,
+51427,
51440,
-51459,
51465,
-51484,
-51502,
-51502,
-51519,
-51536,
-51536,
-51551,
-51551,
-51557,
-51557,
-51557,
-51564,
-51573,
-51573,
-51573,
-51580,
-51580,
-51594,
-51594,
-51610,
-51610,
-51625,
-51625,
-51669,
-51669,
-51669,
-51720,
-51720,
-51720,
-51720,
-51730,
-51730,
-51730,
-51730,
+51465,
+51465,
+51465,
+51465,
+51478,
+51478,
+51485,
+51503,
+51511,
+51517,
+51528,
+51550,
+51550,
+51569,
+51569,
+51586,
+51586,
+51586,
+51595,
+51601,
+51608,
+51633,
+51650,
+51650,
+51650,
+51650,
+51650,
+51650,
+51670,
+51670,
+51690,
+51714,
+51714,
+51732,
51750,
-51793,
-51800,
-51810,
-51821,
-51827,
+51750,
+51782,
+51791,
+51799,
+51799,
+51805,
+51820,
+51820,
+51820,
51852,
-51865,
-51869,
+51856,
+51856,
+51856,
+51856,
51869,
-51875,
-51911,
-51911,
-51911,
-51934,
-51953,
-51953,
-51953,
-51967,
-51967,
-51967,
-51980,
-51985,
-51985,
-51985,
-51985,
-51985,
-51985,
-51996,
-52044,
-52044,
-52044,
-52065,
-52065,
-52079,
-52093,
-52105,
-52105,
-52112,
-52136,
-52136,
+51884,
+51884,
+51925,
+51936,
+51936,
+51941,
+51954,
+51954,
+51954,
+51954,
+51976,
+51976,
+51999,
+51999,
+52008,
+52038,
+52038,
+52055,
+52055,
+52070,
+52087,
+52094,
+52129,
+52145,
+52145,
52158,
-52167,
-52194,
-52211,
+52165,
+52198,
+52225,
+52225,
52232,
-52266,
+52245,
+52262,
+52262,
+52262,
+52269,
+52269,
+52269,
+52281,
+52281,
52290,
-52321,
-52321,
-52338,
-52371,
-52371,
-52371,
-52371,
-52376,
-52401,
-52415,
-52415,
-52425,
-52425,
-52435,
-52435,
-52443,
-52443,
-52455,
-52491,
-52506,
-52547,
-52567,
-52567,
-52584,
-52588,
-52598,
-52638,
-52643,
-52664,
-52664,
-52664,
-52664,
-52664,
-52693,
-52701,
-52701,
-52740,
-52775,
-52775,
-52813,
-52824,
-52849,
-52849,
-52862,
-52877,
-52890,
-52890,
-52890,
-52906,
-52931,
-52952,
-52952,
-52952,
-52952,
-52968,
-52977,
-52995,
-52995,
-52995,
-53010,
-53010,
-53039,
-53039,
-53039,
-53056,
-53056,
-53065,
-53077,
-53095,
-53113,
-53142,
-53142,
-53151,
-53151,
-53167,
-53167,
-53192,
-53192,
-53198,
-53198,
-53198,
-53226,
-53226,
+52290,
+52290,
+52290,
+52316,
+52316,
+52341,
+52379,
+52417,
+52417,
+52426,
+52433,
+52446,
+52450,
+52463,
+52467,
+52467,
+52467,
+52479,
+52487,
+52502,
+52522,
+52522,
+52558,
+52574,
+52574,
+52574,
+52574,
+52612,
+52612,
+52633,
+52655,
+52714,
+52722,
+52731,
+52736,
+52765,
+52778,
+52778,
+52819,
+52874,
+52891,
+52891,
+52903,
+52903,
+52903,
+52926,
+52965,
+52982,
+53003,
+53003,
+53023,
+53031,
+53048,
+53062,
+53062,
+53109,
+53115,
+53115,
+53115,
+53125,
+53125,
+53125,
+53132,
+53140,
+53156,
+53156,
+53165,
+53176,
+53183,
53226,
-53232,
-53276,
-53288,
-53288,
-53301,
-53301,
-53301,
-53301,
-53301,
-53301,
-53301,
-53301,
+53256,
+53256,
+53275,
+53293,
+53293,
+53293,
+53293,
+53293,
53313,
-53336,
-53345,
-53363,
-53384,
-53384,
-53413,
-53413,
-53421,
-53421,
-53428,
-53450,
-53472,
-53510,
-53510,
-53510,
-53540,
-53540,
-53546,
-53558,
-53558,
-53558,
-53558,
-53558,
+53323,
+53323,
+53323,
+53323,
+53330,
+53355,
+53355,
+53362,
+53368,
+53374,
+53374,
+53374,
+53374,
+53374,
+53374,
+53374,
+53381,
+53381,
+53381,
+53381,
+53391,
+53400,
+53412,
+53412,
+53412,
+53440,
+53440,
+53448,
+53448,
+53466,
+53481,
+53481,
+53481,
+53481,
+53481,
+53481,
+53491,
+53505,
+53521,
+53550,
+53559,
+53559,
53570,
-53570,
-53591,
-53611,
-53650,
-53664,
-53671,
-53710,
-53722,
-53722,
-53741,
-53771,
-53780,
-53827,
-53833,
-53863,
-53868,
-53880,
-53893,
-53893,
-53907,
-53919,
-53939,
-53939,
-53956,
-54004,
-54004,
-54004,
-54021,
-54021,
-54045,
-54045,
-54060,
-54060,
-54060,
-54060,
-54060,
-54060,
-54077,
-54077,
-54091,
-54115,
-54124,
-54175,
-54175,
-54175,
-54194,
-54194,
-54221,
-54272,
-54302,
-54314,
-54324,
-54324,
-54324,
-54336,
-54349,
-54369,
-54369,
-54369,
-54431,
-54431,
-54451,
-54479,
-54526,
-54526,
-54568,
-54577,
-54577,
-54577,
-54587,
-54609,
-54609,
-54616,
-54637,
-54658,
-54665,
-54665,
-54681,
-54692,
-54692,
-54705,
-54705,
-54738,
-54750,
-54764,
-54764,
-54770,
-54770,
-54779,
-54779,
-54779,
-54810,
-54810,
-54843,
-54874,
-54874,
-54874,
-54874,
-54900,
-54913,
-54913,
-54929,
-54956,
-54985,
-54991,
-55048,
-55048,
-55069,
-55069,
-55105,
-55105,
-55112,
-55127,
-55127,
-55133,
-55153,
-55171,
-55203,
-55215,
-55250,
-55262,
-55262,
-55272,
-55272,
-55272,
-55286,
-55286,
-55296,
-55336,
-55336,
-55390,
-55390,
-55390,
-55390,
-55421,
-55421,
-55428,
-55460,
-55487,
-55487,
-55505,
-55505,
-55521,
+53577,
+53577,
+53628,
+53644,
+53665,
+53665,
+53665,
+53675,
+53675,
+53675,
+53675,
+53698,
+53698,
+53719,
+53719,
+53731,
+53753,
+53753,
+53759,
+53777,
+53793,
+53814,
+53838,
+53849,
+53884,
+53884,
+53884,
+53899,
+53899,
+53915,
+53915,
+53925,
+53953,
+53983,
+53993,
+53993,
+54029,
+54053,
+54053,
+54063,
+54063,
+54063,
+54075,
+54094,
+54094,
+54094,
+54104,
+54110,
+54127,
+54127,
+54127,
+54127,
+54158,
+54158,
+54195,
+54208,
+54215,
+54232,
+54232,
+54249,
+54259,
+54278,
+54278,
+54278,
+54284,
+54284,
+54284,
+54294,
+54294,
+54294,
+54310,
+54359,
+54372,
+54372,
+54372,
+54372,
+54377,
+54383,
+54415,
+54415,
+54415,
+54426,
+54447,
+54474,
+54499,
+54499,
+54509,
+54514,
+54514,
+54514,
+54536,
+54547,
+54547,
+54553,
+54578,
+54590,
+54590,
+54603,
+54603,
+54603,
+54619,
+54626,
+54645,
+54645,
+54660,
+54676,
+54704,
+54704,
+54704,
+54721,
+54721,
+54721,
+54729,
+54729,
+54755,
+54755,
+54755,
+54755,
+54755,
+54755,
+54771,
+54812,
+54836,
+54836,
+54846,
+54919,
+54919,
+54937,
+54962,
+54962,
+54962,
+55003,
+55023,
+55023,
+55037,
+55037,
+55037,
+55044,
+55050,
+55050,
+55061,
+55061,
+55061,
+55061,
+55061,
+55092,
+55113,
+55130,
+55142,
+55185,
+55196,
+55196,
+55196,
+55196,
+55196,
+55202,
+55261,
+55278,
+55278,
+55298,
+55298,
+55315,
+55315,
+55354,
+55354,
+55354,
+55382,
+55389,
+55405,
+55410,
+55410,
+55416,
+55416,
+55416,
+55416,
+55416,
+55416,
+55416,
+55416,
+55422,
+55458,
+55465,
+55465,
+55479,
+55508,
+55508,
+55514,
55521,
-55525,
-55530,
-55541,
-55551,
-55551,
-55551,
-55564,
-55564,
-55585,
-55585,
-55585,
-55585,
-55610,
-55661,
-55661,
+55540,
+55540,
+55540,
+55540,
+55553,
+55563,
+55577,
+55577,
+55595,
+55595,
+55617,
+55617,
+55617,
+55621,
+55640,
+55640,
+55640,
+55640,
+55663,
+55681,
55681,
-55698,
-55716,
-55716,
-55725,
-55734,
-55751,
-55812,
-55823,
-55832,
-55832,
-55832,
-55871,
-55889,
-55889,
-55905,
-55905,
-55905,
-55948,
-55956,
-55971,
-55971,
-55971,
-56009,
-56037,
-56037,
-56037,
-56044,
-56044,
-56044,
-56044,
-56044,
-56044,
+55726,
+55746,
+55746,
+55762,
+55762,
+55774,
+55825,
+55838,
+55854,
+55864,
+55864,
+55864,
+55886,
+55897,
+55917,
+55917,
+55931,
+55961,
+55961,
+55961,
+55985,
+56003,
+56003,
+56003,
+56025,
+56025,
56074,
56074,
56074,
-56078,
-56119,
-56131,
-56152,
-56159,
-56186,
-56248,
-56252,
-56252,
-56256,
-56256,
-56256,
-56256,
-56283,
-56295,
-56342,
-56367,
-56367,
-56367,
-56382,
-56394,
-56415,
-56415,
-56421,
-56421,
-56421,
-56486,
-56499,
-56499,
-56531,
-56531,
-56531,
-56560,
-56597,
-56604,
-56612,
-56621,
-56656,
-56656,
-56656,
-56671,
-56671,
-56671,
-56684,
-56684,
-56684,
-56684,
-56684,
-56684,
-56684,
-56702,
-56710,
-56718,
-56738,
-56738,
-56755,
-56770,
+56105,
+56118,
+56141,
+56141,
+56141,
+56141,
+56141,
+56169,
+56203,
+56203,
+56203,
+56203,
+56221,
+56225,
+56258,
+56272,
+56278,
+56321,
+56321,
+56339,
+56372,
+56372,
+56397,
+56411,
+56428,
+56437,
+56437,
+56458,
+56469,
+56538,
+56544,
+56562,
+56562,
+56579,
+56579,
+56593,
+56593,
+56593,
+56613,
+56613,
+56619,
+56670,
+56676,
+56705,
+56705,
+56705,
+56723,
+56733,
+56733,
+56733,
+56733,
+56739,
+56739,
+56739,
+56758,
+56758,
+56758,
+56775,
56785,
-56821,
-56821,
-56832,
-56832,
-56832,
-56832,
-56880,
-56906,
-56914,
-56914,
-56914,
-56914,
-56914,
-56914,
-56922,
-56922,
-56931,
-56940,
-56940,
-56950,
-56972,
-56990,
-57000,
-57006,
-57006,
-57006,
-57030,
-57054,
-57063,
-57095,
-57095,
-57095,
-57095,
-57100,
-57100,
-57100,
-57100,
-57100,
-57129,
-57129,
-57129,
-57147,
-57147,
-57184,
-57203,
-57203,
-57215,
+56793,
+56793,
+56819,
+56837,
+56862,
+56862,
+56862,
+56868,
+56868,
+56917,
+56917,
+56942,
+56942,
+56968,
+57007,
+57007,
+57039,
+57043,
+57043,
+57043,
+57043,
+57049,
+57049,
+57075,
+57075,
+57103,
+57118,
+57143,
+57150,
+57165,
+57180,
+57180,
+57187,
+57234,
+57234,
+57252,
+57258,
+57258,
57258,
-57286,
-57308,
-57308,
-57308,
-57335,
-57352,
-57352,
-57382,
-57403,
-57415,
-57450,
-57457,
-57478,
-57499,
-57506,
-57506,
-57523,
-57545,
-57545,
+57271,
+57285,
+57285,
+57285,
+57294,
+57294,
+57294,
+57304,
+57321,
+57343,
+57374,
+57386,
+57386,
+57428,
+57436,
+57449,
+57449,
+57455,
+57471,
+57482,
+57491,
+57528,
+57550,
+57560,
+57560,
+57560,
57566,
-57579,
-57589,
-57597,
-57632,
-57659,
-57667,
-57696,
-57696,
-57705,
-57743,
-57751,
-57798,
-57818,
-57830,
-57857,
-57865,
-57865,
-57895,
-57940,
-57976,
-57976,
-57976,
-57976,
-57976,
-57976,
-57976,
-57976,
-57976,
-58011,
-58016,
-58016,
-58052,
+57584,
+57584,
+57611,
+57627,
+57627,
+57656,
+57656,
+57656,
+57656,
+57675,
+57692,
+57727,
+57727,
+57727,
+57727,
+57733,
+57744,
+57780,
+57790,
+57790,
+57790,
+57804,
+57810,
+57810,
+57810,
+57831,
+57855,
+57863,
+57874,
+57887,
+57887,
+57896,
+57938,
+57938,
+57938,
+57938,
+57963,
+57963,
+57963,
+57967,
+57967,
+57990,
+57990,
+57990,
+58012,
+58023,
+58023,
58066,
-58066,
-58066,
-58066,
-58089,
-58089,
-58089,
-58105,
-58105,
-58123,
-58160,
-58179,
-58179,
-58179,
-58179,
-58179,
-58187,
-58187,
-58187,
-58210,
-58227,
-58227,
-58254,
-58254,
-58254,
-58254,
-58254,
-58254,
-58271,
-58290,
-58305,
-58318,
-58336,
-58336,
-58353,
-58353,
-58353,
-58365,
-58365,
-58365,
-58377,
-58425,
-58425,
-58446,
-58446,
-58446,
-58446,
-58456,
-58456,
+58119,
+58119,
+58144,
+58154,
+58167,
+58189,
+58203,
+58203,
+58217,
+58217,
+58234,
+58234,
+58234,
+58246,
+58259,
+58285,
+58322,
+58322,
+58362,
+58378,
+58386,
+58393,
+58430,
+58430,
+58430,
+58430,
+58451,
+58451,
58470,
-58495,
-58495,
-58495,
-58495,
-58495,
-58508,
-58508,
+58479,
+58479,
+58479,
58530,
-58564,
-58574,
-58574,
-58574,
-58615,
-58658,
-58658,
-58686,
-58686,
+58544,
+58544,
+58570,
+58570,
+58570,
+58583,
+58583,
+58592,
+58592,
+58606,
+58618,
+58618,
+58628,
+58648,
+58648,
+58663,
58686,
-58686,
-58686,
-58686,
-58703,
-58703,
-58738,
-58767,
-58767,
-58767,
-58767,
-58774,
-58774,
-58774,
-58781,
-58781,
-58781,
-58781,
-58781,
-58781,
-58781,
-58795,
-58795,
-58812,
-58836,
-58836,
-58844,
-58844,
-58865,
-58865,
-58871,
-58881,
-58908,
-58908,
-58908,
-58927,
-58927,
-58927,
-58941,
-58941,
-58941,
-58941,
-58941,
-58941,
-58941,
-58959,
-58959,
-58959,
-58959,
-58966,
-58966,
-58980,
-58980,
-59006,
-59016,
-59016,
-59032,
-59055,
-59067,
-59067,
-59092,
-59092,
-59097,
-59116,
-59135,
-59154,
-59154,
-59164,
-59181,
-59209,
-59268,
-59268,
-59281,
-59281,
-59294,
-59310,
-59329,
-59329,
-59329,
-59360,
-59367,
+58702,
+58717,
+58727,
+58734,
+58744,
+58744,
+58776,
+58776,
+58810,
+58810,
+58810,
+58821,
+58834,
+58845,
+58845,
+58857,
+58874,
+58913,
+58913,
+58913,
+58939,
+58945,
+58955,
+58968,
+58992,
+58992,
+59002,
+59002,
+59035,
+59064,
+59076,
+59120,
+59150,
+59169,
+59169,
+59176,
+59176,
+59193,
+59200,
+59232,
+59232,
+59247,
+59261,
+59284,
+59312,
+59338,
+59338,
+59345,
+59355,
59367,
-59378,
59385,
-59385,
-59385,
-59385,
-59385,
-59385,
-59385,
-59385,
-59385,
-59409,
-59413,
-59413,
-59413,
-59420,
-59420,
-59449,
-59449,
-59449,
-59467,
-59467,
-59486,
+59392,
+59419,
+59419,
+59431,
+59438,
59501,
-59507,
-59507,
-59533,
-59540,
-59553,
-59553,
-59553,
-59553,
-59553,
-59553,
-59572,
-59572,
-59592,
-59601,
-59618,
-59654,
-59659,
-59659,
-59659,
-59659,
-59659,
-59669,
-59687,
-59717,
-59717,
-59717,
-59717,
-59717,
-59744,
+59515,
+59546,
+59566,
+59580,
+59587,
+59594,
+59619,
+59638,
+59652,
+59652,
+59696,
+59709,
+59716,
+59716,
+59716,
+59723,
+59764,
+59764,
59771,
-59803,
-59813,
-59836,
-59876,
-59899,
-59899,
-59899,
-59899,
-59919,
-59919,
-59927,
+59822,
+59859,
+59859,
+59866,
+59891,
+59898,
+59923,
+59937,
+59949,
59956,
-59975,
-59975,
-59975,
-59993,
-60046,
-60068,
+59956,
+59963,
+59985,
+59992,
+59992,
+59992,
+60017,
+60041,
+60054,
60087,
60087,
-60117,
-60117,
-60117,
-60117,
-60127,
-60127,
-60127,
-60142,
-60163,
-60163,
-60179,
-60202,
-60211,
-60245,
-60245,
-60245,
-60245,
-60263,
-60282,
-60294,
-60294,
-60294,
-60318,
-60318,
-60318,
-60318,
-60327,
-60327,
-60327,
-60390,
-60390,
-60395,
-60395,
-60395,
-60395,
-60410,
-60424,
-60444,
-60502,
-60502,
-60502,
-60529,
-60546,
-60573,
-60573,
-60588,
-60609,
-60609,
-60613,
-60613,
-60613,
-60659,
-60700,
-60714,
-60714,
-60714,
-60723,
-60739,
-60739,
-60739,
-60753,
-60753,
-60753,
-60759,
-60759,
-60766,
-60781,
-60810,
-60835,
-60835,
-60835,
-60835,
-60882,
-60891,
-60891,
-60909,
-60927,
-60927,
-60927,
-60927,
-60927,
-60927,
-60927,
-60927,
-60953,
-60959,
-60970,
-60970,
-60991,
-60991,
-61001,
-61037,
-61074,
-61074,
-61093,
-61102,
-61102,
-61112,
-61124,
-61132,
-61141,
-61141,
-61141,
-61141,
-61172,
-61172,
-61172,
-61184,
-61200,
-61200,
-61200,
-61222,
-61237,
-61247,
-61247,
-61261,
-61261,
-61269,
-61269,
-61269,
-61269,
-61269,
-61269,
-61274,
-61274,
-61292,
-61320,
-61320,
-61327,
-61355,
-61368,
-61368,
-61368,
-61379,
-61386,
-61386,
-61386,
-61403,
-61425,
-61453,
-61469,
-61480,
-61487,
-61487,
-61487,
-61487,
-61487,
-61487,
-61487,
-61514,
-61514,
-61522,
-61532,
-61532,
-61532,
-61568,
-61587,
-61599,
-61622,
-61622,
-61622,
-61627,
-61627,
-61627,
-61647,
-61647,
-61652,
-61652,
-61652,
-61652,
-61676,
-61692,
-61692,
-61692,
-61732,
-61732,
-61732,
-61732,
-61732,
-61732,
-61755,
-61755,
-61755,
-61755,
-61755,
-61788,
-61788,
-61788,
-61788,
-61788,
-61826,
-61826,
-61836,
-61849,
-61889,
-61934,
-61934,
-61934,
-61949,
-61949,
-61949,
-61955,
-61955,
-61955,
-61955,
-61955,
-61955,
-61955,
-61966,
-61974,
-61974,
-61974,
-61981,
-61981,
-61981,
-61998,
-62018,
+60094,
+60118,
+60164,
+60178,
+60178,
+60178,
+60207,
+60207,
+60216,
+60234,
+60247,
+60265,
+60272,
+60279,
+60279,
+60279,
+60313,
+60313,
+60320,
+60345,
+60374,
+60382,
+60394,
+60394,
+60394,
+60394,
+60394,
+60449,
+60449,
+60458,
+60483,
+60483,
+60496,
+60503,
+60519,
+60526,
+60540,
+60554,
+60554,
+60570,
+60578,
+60592,
+60592,
+60599,
+60607,
+60624,
+60631,
+60638,
+60638,
+60708,
+60715,
+60722,
+60729,
+60729,
+60729,
+60736,
+60736,
+60736,
+60747,
+60765,
+60789,
+60832,
+60839,
+60839,
+60839,
+60858,
+60858,
+60858,
+60858,
+60873,
+60880,
+60902,
+60924,
+60931,
+60938,
+60945,
+60952,
+60982,
+60989,
+61009,
+61066,
+61078,
+61078,
+61078,
+61078,
+61105,
+61105,
+61144,
+61165,
+61165,
+61165,
+61180,
+61180,
+61180,
+61224,
+61231,
+61258,
+61268,
+61275,
+61295,
+61295,
+61295,
+61302,
+61316,
+61316,
+61351,
+61369,
+61410,
+61428,
+61450,
+61450,
+61463,
+61493,
+61511,
+61552,
+61579,
+61603,
+61617,
+61617,
+61624,
+61624,
+61624,
+61631,
+61656,
+61682,
+61689,
+61707,
+61714,
+61721,
+61735,
+61742,
+61753,
+61760,
+61774,
+61800,
+61838,
+61850,
+61856,
+61863,
+61900,
+61917,
+61932,
+61939,
+61946,
+61960,
+61979,
+62000,
+62026,
+62033,
+62040,
+62052,
+62052,
62061,
-62080,
-62088,
-62122,
-62133,
-62149,
-62166,
-62182,
+62068,
+62077,
+62084,
+62096,
+62140,
+62140,
+62147,
+62153,
+62153,
62182,
-62188,
-62188,
-62188,
-62197,
-62205,
-62211,
-62211,
-62211,
-62234,
-62234,
+62195,
+62195,
+62195,
+62213,
+62213,
62239,
-62247,
-62267,
-62267,
-62286,
-62286,
-62286,
-62286,
-62286,
-62308,
-62308,
-62308,
-62308,
-62323,
-62334,
-62375,
-62383,
-62393,
-62414,
-62427,
-62494,
-62504,
-62525,
-62525,
-62525,
-62525,
-62525,
-62525,
-62563,
-62563,
-62571,
-62583,
-62583,
-62583,
-62594,
-62608,
-62636,
-62648,
-62648,
-62648,
-62648,
-62680,
-62693,
-62693,
+62265,
+62279,
+62304,
+62313,
+62320,
+62327,
+62352,
+62359,
+62366,
+62371,
+62404,
+62434,
+62477,
+62477,
+62484,
+62499,
+62515,
+62522,
+62529,
+62544,
+62565,
+62565,
+62588,
+62588,
+62593,
+62618,
+62618,
+62624,
+62624,
+62624,
+62624,
+62642,
+62660,
+62684,
+62688,
+62688,
62702,
62702,
-62702,
-62720,
-62732,
-62757,
-62772,
-62778,
-62793,
-62813,
-62830,
-62847,
-62862,
-62888,
-62888,
-62900,
-62924,
-62934,
-62934,
-62934,
-62953,
-63001,
-63006,
-63006,
-63006,
-63006,
-63006,
-63012,
-63012,
-63025,
-63025,
-63025,
-63057,
-63063,
-63063,
-63081,
-63081,
-63098,
-63118,
-63135,
-63135,
-63135,
-63135,
-63154,
-63170,
-63183,
-63183,
-63183,
-63183,
-63183,
-63183,
-63202,
-63202,
-63202,
-63202,
-63231,
-63242,
-63248,
-63248,
-63265,
-63265,
-63265,
-63265,
-63265,
-63277,
-63287,
-63311,
-63321,
-63336,
-63336,
-63348,
+62716,
+62738,
+62763,
+62763,
+62782,
+62812,
+62829,
+62858,
+62858,
+62887,
+62887,
+62908,
+62915,
+62929,
+62968,
+62982,
+62982,
+62996,
+63014,
+63024,
+63054,
+63065,
+63082,
+63082,
+63107,
+63143,
+63159,
+63176,
+63176,
+63213,
+63250,
+63250,
+63291,
+63324,
63348,
-63366,
-63366,
-63366,
-63366,
-63366,
-63373,
-63373,
-63373,
+63355,
63384,
63384,
-63389,
-63394,
-63407,
-63407,
-63425,
-63444,
-63492,
-63515,
-63542,
-63542,
-63542,
-63569,
-63569,
-63586,
-63586,
-63613,
-63613,
-63626,
-63654,
-63659,
-63659,
-63659,
-63693,
-63693,
-63710,
-63710,
-63737,
-63741,
-63741,
-63778,
-63778,
-63778,
-63784,
-63806,
-63833,
-63846,
-63879,
-63887,
-63887,
-63887,
-63887,
-63916,
-63926,
-63933,
-63952,
-63956,
-63990,
-64002,
-64017,
-64028,
-64028,
-64045,
-64097,
-64130,
-64130,
-64140,
-64148,
-64154,
-64168,
+63390,
+63397,
+63432,
+63439,
+63439,
+63459,
+63497,
+63497,
+63519,
+63519,
+63535,
+63549,
+63582,
+63601,
+63601,
+63608,
+63619,
+63655,
+63662,
+63678,
+63678,
+63678,
+63684,
+63718,
+63745,
+63765,
+63773,
+63779,
+63779,
+63811,
+63818,
+63859,
+63886,
+63892,
+63947,
+63947,
+63988,
+64025,
+64034,
+64058,
+64067,
+64090,
+64106,
+64106,
+64106,
+64111,
+64111,
+64129,
+64129,
+64135,
+64152,
+64189,
+64189,
+64189,
+64189,
+64196,
64196,
-64218,
-64225,
-64225,
-64231,
-64256,
-64277,
-64294,
-64308,
-64313,
-64320,
-64320,
-64325,
-64325,
-64345,
-64345,
-64345,
-64345,
-64345,
-64386,
-64386,
-64393,
-64399,
-64405,
-64420,
+64209,
+64222,
+64222,
+64235,
+64235,
+64263,
+64270,
+64270,
+64270,
+64296,
+64314,
+64321,
+64321,
+64321,
+64321,
+64321,
+64328,
+64347,
+64359,
+64359,
+64359,
+64359,
+64359,
+64388,
64427,
-64435,
-64435,
-64435,
-64445,
-64445,
-64445,
-64472,
-64472,
+64434,
+64434,
+64461,
+64468,
+64499,
+64506,
64513,
-64528,
-64528,
-64539,
-64562,
-64562,
-64568,
-64568,
+64513,
+64513,
+64513,
+64513,
+64522,
+64522,
+64558,
64568,
-64586,
-64624,
-64650,
-64650,
-64662,
-64662,
-64668,
-64677,
-64677,
-64677,
-64677,
-64677,
-64677,
-64677,
-64698,
-64715,
+64602,
+64615,
+64621,
+64627,
+64627,
+64627,
+64627,
+64627,
+64654,
+64654,
+64661,
+64661,
+64675,
+64675,
+64675,
+64675,
+64685,
+64685,
+64704,
+64730,
64746,
-64760,
-64774,
-64794,
-64794,
-64819,
-64836,
-64836,
-64862,
-64874,
-64880,
-64899,
-64916,
-64916,
-64916,
-64948,
-64965,
-64965,
-64990,
-65011,
+64761,
+64768,
+64768,
+64811,
+64811,
+64811,
+64811,
+64811,
+64832,
+64844,
+64844,
+64859,
+64878,
+64888,
+64902,
+64933,
+64933,
+64976,
+64987,
+65004,
+65004,
+65013,
+65013,
+65023,
+65023,
+65047,
+65047,
+65047,
+65047,
+65054,
65060,
-65067,
-65081,
-65081,
-65081,
-65097,
-65097,
-65113,
-65133,
-65152,
-65152,
-65179,
-65196,
-65234,
-65253,
-65272,
-65272,
-65279,
-65279,
-65318,
-65318,
-65364,
-65364,
-65424,
-65493,
-65493,
-65499,
-65499,
-65499,
+65078,
+65104,
+65104,
+65116,
+65127,
+65127,
+65137,
+65156,
+65178,
+65178,
+65178,
+65214,
+65214,
+65214,
+65238,
+65238,
+65266,
+65266,
+65266,
+65266,
+65274,
+65294,
+65294,
+65294,
+65294,
+65306,
+65306,
+65306,
+65363,
+65363,
+65363,
+65363,
+65390,
+65402,
+65408,
+65408,
+65408,
+65408,
+65408,
+65408,
+65454,
+65454,
+65454,
+65464,
+65464,
+65484,
+65491,
+65505,
65518,
-65525,
-65525,
-65534,
-65534,
-65534,
-65534,
-65541,
-65566,
-65595,
-65595,
-65595,
-65613,
-65681,
-65690,
-65690,
+65518,
+65518,
+65530,
+65554,
+65572,
+65592,
+65639,
+65639,
+65648,
+65655,
+65665,
+65665,
+65665,
+65699,
+65699,
65711,
-65728,
-65747,
-65762,
-65785,
-65785,
-65809,
-65809,
-65820,
-65826,
-65835,
-65861,
-65883,
-65912,
-65918,
-65918,
-65936,
-65936,
-65936,
+65731,
+65731,
+65731,
+65731,
+65767,
+65787,
+65787,
+65787,
+65808,
+65828,
+65866,
+65878,
+65878,
+65889,
+65889,
+65930,
+65930,
+65930,
+65930,
+65930,
+65930,
+65930,
65936,
-65941,
-65941,
65951,
-65967,
+65957,
+65957,
65973,
65979,
-65979,
-66008,
-66008,
-66008,
-66013,
-66013,
-66030,
-66030,
-66045,
-66045,
-66045,
-66052,
-66052,
-66052,
-66052,
-66094,
-66098,
-66105,
-66105,
-66143,
-66143,
-66191,
-66196,
-66196,
-66226,
-66226,
-66253,
-66268,
-66268,
-66305,
-66305,
-66305,
-66317,
-66324,
-66324,
-66324,
-66330,
-66330,
-66346,
-66346,
-66346,
-66369,
-66408,
-66408,
-66408,
-66426,
-66426,
-66426,
-66435,
-66443,
-66443,
-66443,
-66443,
-66443,
-66443,
-66443,
-66443,
-66450,
-66450,
-66450,
-66466,
-66471,
-66492,
-66507,
-66507,
-66530,
-66543,
-66564,
-66576,
-66576,
-66576,
-66591,
-66628,
-66628,
-66628,
-66628,
-66628,
-66667,
-66691,
-66691,
-66698,
-66748,
-66760,
-66777,
-66777,
-66795,
-66817,
-66817,
+66004,
+66004,
+66050,
+66050,
+66097,
+66113,
+66140,
+66140,
+66149,
+66175,
+66204,
+66213,
+66213,
+66229,
+66229,
+66263,
+66271,
+66293,
+66293,
+66320,
+66320,
+66339,
+66339,
+66339,
+66339,
+66339,
+66349,
+66355,
+66363,
+66363,
+66407,
+66407,
+66407,
+66416,
+66416,
+66425,
+66425,
+66444,
+66470,
+66470,
+66490,
+66490,
+66490,
+66506,
+66506,
+66521,
+66521,
+66557,
+66557,
+66557,
+66557,
+66557,
+66557,
+66565,
+66565,
+66565,
+66596,
+66632,
+66641,
+66641,
+66641,
+66641,
+66641,
+66655,
+66655,
+66663,
+66663,
+66663,
+66674,
+66684,
+66703,
+66717,
+66734,
+66734,
+66774,
+66800,
66836,
-66854,
-66854,
-66854,
-66866,
-66888,
-66904,
-66914,
-66924,
+66853,
+66863,
+66863,
66924,
66924,
-66953,
-66968,
-66999,
-66999,
-67011,
-67011,
-67011,
-67031,
-67031,
-67031,
-67042,
-67092,
-67107,
-67126,
-67132,
-67143,
-67151,
-67160,
-67160,
-67166,
-67180,
-67180,
-67180,
-67180,
-67180,
-67195,
-67195,
-67195,
-67195,
-67195,
-67206,
-67211,
-67217,
-67217,
-67234,
-67234,
-67276,
-67276,
-67276,
-67287,
-67287,
-67287,
-67297,
-67310,
-67343,
-67360,
-67370,
-67370,
-67386,
-67427,
-67460,
-67480,
-67480,
-67480,
+66937,
+66951,
+66970,
+66970,
+66970,
+67005,
+67005,
+67005,
+67039,
+67067,
+67067,
+67090,
+67097,
+67097,
+67113,
+67119,
+67119,
+67150,
+67170,
+67170,
+67182,
+67188,
+67253,
+67268,
+67295,
+67311,
+67311,
+67311,
+67319,
+67335,
+67340,
+67356,
+67356,
+67368,
+67368,
+67368,
+67377,
+67383,
+67383,
+67383,
+67383,
+67383,
+67396,
+67396,
+67408,
+67426,
+67456,
+67470,
+67494,
+67494,
+67494,
+67494,
+67506,
+67506,
+67506,
+67506,
+67506,
67511,
67529,
67529,
-67546,
-67579,
-67617,
-67617,
-67634,
-67634,
-67658,
-67658,
-67665,
-67679,
-67679,
-67696,
-67732,
-67748,
-67748,
-67748,
-67758,
-67758,
-67758,
-67758,
-67758,
-67758,
-67765,
-67780,
-67791,
-67791,
-67791,
-67791,
-67812,
-67822,
-67822,
-67844,
-67844,
-67844,
-67858,
-67884,
-67884,
-67884,
-67897,
-67897,
-67905,
-67905,
-67939,
-67950,
-67950,
-67950,
-67950,
-67965,
-67977,
-67977,
-67977,
-67977,
-68005,
-68025,
-68025,
-68025,
-68036,
-68036,
-68046,
-68060,
-68106,
-68124,
-68140,
-68162,
-68162,
-68162,
-68162,
-68174,
-68212,
-68212,
-68212,
-68212,
-68239,
-68239,
-68265,
-68265,
-68272,
-68290,
-68290,
-68323,
-68323,
-68332,
-68332,
-68332,
-68332,
-68342,
-68359,
-68359,
-68359,
-68387,
-68387,
-68387,
-68387,
-68387,
-68402,
-68402,
-68402,
-68417,
-68440,
+67551,
+67557,
+67565,
+67581,
+67587,
+67604,
+67604,
+67611,
+67611,
+67611,
+67621,
+67621,
+67628,
+67628,
+67672,
+67693,
+67693,
+67705,
+67712,
+67724,
+67724,
+67724,
+67724,
+67740,
+67749,
+67771,
+67781,
+67781,
+67781,
+67808,
+67808,
+67808,
+67815,
+67862,
+67873,
+67873,
+67873,
+67882,
+67882,
+67888,
+67906,
+67912,
+67931,
+67931,
+67931,
+67941,
+67973,
+67973,
+68011,
+68045,
+68045,
+68062,
+68062,
+68068,
+68068,
+68080,
+68091,
+68091,
+68127,
+68151,
+68151,
+68172,
+68172,
+68172,
+68172,
+68179,
+68189,
+68204,
+68224,
+68233,
+68251,
+68251,
+68258,
+68258,
+68258,
+68270,
+68270,
+68270,
+68307,
+68307,
+68326,
+68326,
+68366,
+68366,
+68366,
+68385,
+68385,
+68385,
+68391,
+68391,
+68391,
+68420,
+68427,
+68427,
+68427,
+68427,
+68437,
+68437,
+68437,
+68437,
68445,
-68454,
-68454,
-68461,
-68461,
-68482,
-68482,
-68482,
-68512,
-68553,
-68563,
-68563,
-68563,
-68563,
+68445,
+68462,
+68462,
+68462,
+68475,
+68475,
+68475,
+68488,
+68497,
+68504,
+68504,
+68527,
+68550,
68563,
68563,
-68583,
-68583,
-68618,
-68627,
-68627,
-68645,
-68645,
-68645,
-68660,
-68666,
-68676,
-68676,
-68697,
-68697,
-68697,
-68702,
-68715,
-68752,
-68767,
-68787,
-68787,
-68808,
-68808,
-68808,
-68827,
-68857,
-68857,
-68871,
-68895,
-68895,
-68910,
-68924,
-68955,
-68968,
-68989,
+68582,
+68582,
+68582,
+68582,
+68622,
+68622,
+68651,
+68656,
+68669,
+68682,
+68682,
+68693,
+68693,
+68701,
+68701,
+68701,
+68701,
+68701,
+68701,
+68729,
+68743,
+68743,
+68757,
+68757,
+68773,
+68789,
+68801,
+68833,
+68833,
+68833,
+68833,
+68840,
+68866,
+68866,
+68866,
+68881,
+68909,
+68925,
+68946,
68989,
68989,
-69014,
-69014,
-69035,
-69035,
-69035,
-69062,
-69062,
-69069,
-69077,
-69077,
-69092,
-69107,
-69127,
-69127,
-69127,
-69145,
-69157,
-69157,
-69164,
-69164,
-69171,
-69171,
+69005,
+69015,
+69029,
+69044,
+69076,
+69076,
+69095,
+69095,
+69102,
+69125,
+69125,
+69125,
+69125,
+69139,
+69161,
+69161,
+69166,
+69172,
+69172,
69178,
-69178,
-69256,
-69270,
-69270,
-69322,
-69322,
-69336,
-69344,
-69344,
-69375,
-69394,
-69452,
-69452,
-69452,
-69452,
-69465,
-69488,
-69508,
-69508,
-69514,
-69514,
-69524,
-69552,
-69552,
-69552,
-69552,
-69569,
-69575,
-69595,
-69595,
-69602,
-69643,
+69186,
+69215,
+69215,
+69243,
+69243,
+69243,
+69273,
+69273,
+69273,
+69273,
+69283,
+69299,
+69299,
+69299,
+69299,
+69299,
+69340,
+69381,
+69388,
+69398,
+69398,
+69398,
+69398,
+69398,
+69438,
+69438,
+69438,
+69445,
+69445,
+69476,
+69476,
+69476,
+69481,
+69503,
+69541,
+69541,
+69541,
+69573,
+69593,
+69593,
+69593,
+69609,
+69619,
69661,
-69667,
-69681,
-69681,
-69692,
-69699,
-69699,
-69721,
-69721,
-69721,
-69740,
-69740,
-69760,
-69766,
-69774,
-69774,
-69783,
-69815,
-69838,
-69848,
-69848,
-69848,
-69848,
-69848,
-69861,
-69871,
-69871,
-69881,
-69924,
-69940,
-69947,
-69947,
-69977,
-69989,
-69989,
-70005,
+69661,
+69700,
+69706,
+69736,
+69736,
+69770,
+69770,
+69776,
+69799,
+69840,
+69840,
+69875,
+69894,
+69894,
+69917,
+69933,
+69949,
+69949,
+69949,
+69954,
+69965,
+69965,
+69965,
+69965,
+69965,
+69979,
+69986,
70005,
+70010,
70016,
-70016,
-70058,
-70058,
-70068,
-70098,
-70098,
-70110,
-70126,
-70137,
-70146,
-70165,
-70177,
-70177,
+70035,
+70035,
+70072,
+70082,
+70119,
+70158,
+70168,
70177,
-70177,
-70183,
-70183,
-70183,
-70196,
-70223,
-70223,
-70239,
-70258,
-70258,
-70258,
+70202,
+70230,
+70242,
+70242,
+70275,
+70282,
+70282,
+70282,
+70296,
+70296,
70296,
70296,
-70306,
-70314,
-70330,
-70345,
-70369,
-70369,
-70369,
-70369,
-70369,
-70413,
-70430,
-70430,
-70463,
-70463,
-70479,
-70479,
-70479,
-70486,
-70520,
-70546,
-70559,
-70559,
-70570,
-70619,
-70685,
-70723,
-70742,
-70742,
+70296,
+70302,
+70302,
+70302,
+70302,
+70302,
+70324,
+70324,
+70341,
+70367,
+70392,
+70425,
+70467,
+70467,
+70504,
+70504,
+70522,
+70522,
+70522,
+70561,
+70561,
+70580,
+70601,
+70612,
+70612,
+70663,
+70663,
+70669,
+70669,
+70669,
+70669,
+70698,
+70698,
+70722,
+70734,
+70750,
70756,
-70784,
-70784,
-70784,
-70791,
+70794,
+70794,
70809,
-70816,
-70823,
-70830,
-70837,
-70837,
-70856,
-70863,
+70819,
+70819,
+70819,
+70853,
70870,
-70877,
-70877,
-70877,
-70884,
-70903,
-70915,
-70925,
-70925,
-70925,
-70954,
-70968,
-70975,
-70975,
-70975,
-70982,
-70989,
-71010,
-71027,
-71036,
-71036,
-71065,
-71065,
-71079,
-71104,
-71111,
-71119,
-71162,
+70906,
+70917,
+70922,
+70935,
+70950,
+70977,
+70990,
+71014,
+71024,
+71041,
+71076,
+71076,
+71090,
+71090,
+71100,
+71125,
+71125,
+71131,
+71131,
+71137,
+71157,
+71169,
+71181,
71181,
71181,
-71196,
-71238,
-71269,
-71276,
-71281,
-71281,
-71298,
-71311,
-71311,
-71352,
-71352,
-71359,
-71359,
+71193,
+71201,
+71210,
+71216,
+71243,
+71253,
+71253,
+71290,
+71306,
71372,
-71395,
-71395,
-71395,
-71404,
+71391,
+71391,
+71405,
+71423,
+71423,
71428,
71428,
-71428,
-71449,
-71449,
-71471,
-71478,
-71478,
-71478,
-71478,
-71487,
-71487,
-71494,
-71494,
-71525,
-71532,
-71532,
-71544,
-71544,
-71544,
-71567,
-71584,
-71584,
-71591,
-71591,
-71618,
-71631,
-71638,
-71648,
-71648,
-71655,
-71677,
-71684,
-71699,
-71706,
-71706,
-71713,
-71713,
-71740,
-71763,
-71768,
-71784,
-71812,
-71830,
-71864,
-71882,
-71882,
-71882,
-71910,
-71928,
-71939,
-71977,
-71984,
-71984,
-71999,
-71999,
-71999,
-72023,
-72023,
-72023,
-72037,
-72037,
-72037,
-72081,
-72112,
-72158,
-72177,
-72229,
-72229,
-72253,
-72263,
-72263,
-72278,
-72283,
-72283,
-72283,
-72283,
-72294,
+71443,
+71460,
+71460,
+71460,
+71460,
+71460,
+71460,
+71460,
+71460,
+71460,
+71460,
+71511,
+71511,
+71521,
+71535,
+71543,
+71548,
+71548,
+71553,
+71553,
+71573,
+71573,
+71596,
+71625,
+71625,
+71625,
+71639,
+71667,
+71674,
+71674,
+71698,
+71705,
+71705,
+71705,
+71725,
+71732,
+71750,
+71773,
+71773,
+71773,
+71780,
+71787,
+71805,
+71805,
+71805,
+71835,
+71869,
+71880,
+71885,
+71892,
+71914,
+71921,
+71950,
+71976,
+71993,
+71993,
+72005,
+72012,
+72019,
+72026,
+72062,
+72093,
+72100,
+72125,
+72146,
+72146,
+72146,
+72195,
+72233,
+72270,
72294,
-72315,
-72330,
-72350,
-72350,
-72375,
-72388,
-72388,
-72388,
-72408,
-72434,
-72462,
-72482,
-72524,
-72530,
-72530,
-72585,
-72600,
-72636,
-72672,
-72679,
+72307,
+72317,
+72345,
+72377,
+72384,
+72413,
+72426,
+72426,
+72449,
+72449,
+72463,
+72463,
+72479,
+72479,
+72486,
+72505,
+72511,
+72531,
+72538,
+72558,
+72565,
+72565,
+72565,
+72591,
+72598,
+72608,
+72640,
+72658,
72686,
-72717,
-72749,
-72749,
-72749,
-72749,
-72756,
-72762,
-72798,
-72824,
-72843,
-72867,
-72867,
-72885,
-72897,
+72700,
+72736,
+72743,
+72743,
+72743,
+72743,
+72771,
+72803,
+72819,
+72832,
+72832,
+72857,
+72864,
+72874,
72897,
-72903,
-72916,
-72938,
-72983,
-72983,
-73006,
-73020,
-73036,
-73065,
-73084,
-73103,
-73110,
-73110,
+72910,
+72918,
+72918,
+72941,
+72964,
+72964,
+72976,
+72976,
+72990,
+73023,
+73023,
+73030,
+73038,
+73044,
+73070,
+73079,
+73079,
+73086,
+73093,
+73120,
+73139,
+73146,
73146,
73153,
-73153,
-73160,
-73160,
-73177,
-73184,
-73191,
-73205,
-73248,
-73290,
-73304,
-73355,
-73355,
-73355,
+73164,
+73213,
+73262,
+73277,
+73277,
+73292,
+73325,
+73325,
73355,
73361,
-73361,
-73367,
-73367,
-73374,
73390,
-73408,
-73408,
-73420,
-73431,
-73438,
-73448,
-73448,
-73455,
-73455,
-73482,
-73482,
-73493,
-73516,
-73554,
-73591,
-73600,
-73600,
-73607,
-73632,
-73646,
-73674,
-73680,
-73690,
-73697,
-73704,
-73727,
-73744,
-73761,
-73767,
-73774,
-73801,
-73819,
-73826,
-73826,
-73826,
+73390,
+73407,
+73414,
+73414,
+73421,
+73440,
+73479,
+73487,
+73502,
+73511,
+73527,
+73549,
+73556,
+73576,
+73576,
+73576,
+73586,
+73595,
+73595,
+73602,
+73602,
+73621,
+73663,
+73670,
+73684,
+73691,
+73724,
+73743,
+73771,
+73783,
+73783,
+73783,
+73783,
+73800,
+73800,
+73805,
+73811,
+73828,
+73828,
73833,
-73840,
-73859,
-73888,
-73912,
-73919,
-73930,
-73937,
+73853,
+73870,
+73875,
+73875,
+73894,
+73935,
73959,
-73959,
-73966,
-73990,
+73979,
74000,
74000,
-74012,
-74019,
-74045,
-74045,
-74070,
-74077,
-74077,
-74094,
-74119,
-74139,
-74153,
-74169,
-74176,
-74229,
-74263,
-74277,
-74314,
-74314,
-74344,
-74358,
-74365,
-74411,
-74441,
-74455,
-74461,
-74475,
-74489,
-74489,
-74489,
-74489,
-74503,
-74524,
-74543,
-74550,
-74568,
-74580,
-74596,
-74610,
+74006,
+74013,
+74013,
+74013,
+74042,
+74055,
+74062,
+74069,
+74069,
+74069,
+74069,
+74076,
+74082,
+74107,
+74114,
+74121,
+74141,
+74146,
+74166,
+74166,
+74184,
+74205,
+74219,
+74259,
+74259,
+74259,
+74288,
+74329,
+74329,
+74336,
+74336,
+74376,
+74383,
+74383,
+74383,
+74390,
+74410,
+74417,
+74417,
+74424,
+74431,
+74453,
+74467,
+74481,
+74514,
+74537,
+74552,
+74552,
+74552,
+74561,
+74561,
+74571,
+74571,
+74571,
+74578,
+74597,
+74597,
74621,
-74628,
-74657,
-74684,
+74641,
+74641,
+74648,
+74685,
74709,
74709,
-74716,
-74744,
-74744,
-74783,
-74845,
-74850,
-74887,
-74904,
-74904,
-74918,
+74724,
+74758,
+74758,
+74772,
+74782,
+74805,
+74811,
+74841,
+74899,
+74912,
+74925,
74933,
-74961,
-74961,
-74995,
-75002,
+74940,
+74959,
+74975,
+74982,
+74989,
75002,
-75023,
-75023,
-75030,
-75072,
-75079,
-75079,
-75110,
-75117,
-75138,
-75170,
-75179,
-75193,
-75213,
-75220,
-75227,
-75238,
-75246,
-75253,
-75278,
-75285,
-75292,
-75292,
-75311,
-75311,
-75341,
-75358,
-75358,
-75392,
-75421,
-75438,
-75450,
-75456,
-75474,
-75480,
-75501,
-75514,
-75521,
-75521,
-75546,
-75574,
-75600,
-75623,
-75623,
-75642,
-75655,
-75662,
-75694,
-75701,
-75724,
-75724,
-75740,
-75769,
-75801,
-75808,
-75826,
-75826,
-75841,
-75865,
-75879,
-75879,
-75879,
-75910,
-75919,
-75938,
-75945,
-75952,
-76008,
-76018,
-76057,
-76064,
-76071,
-76078,
-76078,
-76100,
-76100,
-76100,
+75036,
+75036,
+75076,
+75083,
+75119,
+75133,
+75155,
+75169,
+75174,
+75195,
+75195,
+75224,
+75224,
+75224,
+75239,
+75269,
+75284,
+75284,
+75312,
+75329,
+75383,
+75383,
+75404,
+75451,
+75451,
+75473,
+75473,
+75482,
+75488,
+75488,
+75488,
+75517,
+75527,
+75534,
+75534,
+75558,
+75581,
+75604,
+75644,
+75666,
+75666,
+75673,
+75706,
+75706,
+75725,
+75757,
+75764,
+75764,
+75783,
+75807,
+75827,
+75866,
+75899,
+75906,
+75913,
+75913,
+75943,
+75955,
+75967,
+75995,
+76031,
+76072,
+76072,
+76079,
+76095,
+76112,
+76112,
+76119,
+76126,
+76126,
76133,
-76177,
-76177,
-76187,
-76222,
-76222,
-76222,
-76246,
-76286,
-76309,
-76318,
-76346,
-76346,
-76346,
-76354,
-76371,
-76371,
-76412,
-76421,
-76436,
-76446,
-76453,
-76475,
-76506,
-76513,
-76520,
-76543,
-76570,
-76577,
+76144,
+76144,
+76166,
+76186,
+76186,
+76203,
+76203,
+76234,
+76234,
+76249,
+76263,
+76305,
+76316,
+76325,
+76343,
+76361,
+76368,
+76368,
+76368,
+76434,
+76466,
+76473,
+76481,
+76481,
+76499,
+76536,
+76536,
+76536,
+76536,
+76567,
+76567,
+76567,
+76574,
+76574,
+76582,
+76582,
+76582,
+76582,
+76593,
+76608,
+76608,
+76608,
+76608,
76615,
-76615,
-76639,
-76672,
-76706,
-76713,
-76720,
-76736,
-76736,
-76736,
-76768,
-76775,
-76788,
-76805,
-76827,
-76843,
-76850,
-76857,
-76880,
-76895,
-76902,
-76929,
-76969,
-76976,
-76982,
-77036,
-77043,
-77043,
-77050,
-77050,
-77057,
-77071,
-77087,
-77100,
+76632,
+76661,
+76668,
+76694,
+76701,
+76701,
+76701,
+76718,
+76738,
+76772,
+76780,
+76780,
+76780,
+76780,
+76794,
+76808,
+76808,
+76808,
+76825,
+76841,
+76867,
+76885,
+76912,
+76912,
+76912,
+76939,
+76939,
+76957,
+76957,
+76973,
+77001,
+77015,
+77015,
+77027,
+77027,
+77060,
+77070,
+77070,
+77093,
+77104,
77114,
-77128,
-77142,
-77159,
-77192,
-77206,
-77213,
-77226,
-77226,
-77292,
-77292,
-77310,
-77310,
-77326,
-77346,
-77375,
-77402,
-77402,
-77425,
-77456,
-77467,
-77467,
-77474,
-77484,
-77484,
-77491,
-77505,
-77505,
-77520,
-77520,
-77541,
-77555,
-77569,
-77576,
-77576,
-77589,
-77603,
+77129,
+77129,
+77129,
+77136,
+77136,
+77136,
+77184,
+77199,
+77221,
+77229,
+77236,
+77236,
+77249,
+77276,
+77309,
+77332,
+77362,
+77362,
+77388,
+77398,
+77404,
+77404,
+77450,
+77460,
+77487,
+77487,
+77504,
+77519,
+77539,
+77549,
+77549,
+77556,
+77556,
+77572,
+77572,
+77580,
77610,
-77649,
-77681,
-77681,
-77688,
-77724,
-77751,
-77758,
-77792,
-77792,
-77792,
-77798,
-77813,
-77820,
-77853,
-77860,
-77860,
-77897,
-77945,
-77954,
-77954,
-77980,
-77993,
-78011,
-78011,
-78011,
-78027,
-78054,
-78085,
-78085,
-78105,
-78112,
-78119,
-78152,
-78173,
-78188,
-78188,
-78195,
-78223,
-78242,
-78249,
-78300,
-78300,
-78332,
-78339,
-78339,
-78354,
-78354,
-78394,
-78394,
-78418,
-78425,
-78448,
-78455,
-78489,
-78507,
-78532,
+77631,
+77631,
+77631,
+77631,
+77650,
+77659,
+77659,
+77659,
+77670,
+77670,
+77682,
+77682,
+77682,
+77730,
+77730,
+77730,
+77738,
+77738,
+77738,
+77738,
+77738,
+77748,
+77748,
+77761,
+77789,
+77808,
+77808,
+77824,
+77824,
+77824,
+77824,
+77824,
+77824,
+77835,
+77835,
+77867,
+77895,
+77895,
+77914,
+77914,
+77933,
+77966,
+78003,
+78039,
+78057,
+78071,
+78098,
+78122,
+78122,
+78128,
+78159,
+78159,
+78169,
+78201,
+78201,
+78208,
+78226,
+78247,
+78257,
+78268,
+78268,
+78280,
+78280,
+78280,
+78280,
+78293,
+78319,
+78319,
+78342,
+78356,
+78372,
+78381,
+78381,
+78396,
+78396,
+78396,
+78396,
+78434,
+78453,
+78453,
+78459,
+78477,
+78477,
+78477,
+78477,
+78487,
+78492,
+78492,
78532,
-78549,
-78563,
-78585,
-78592,
-78606,
-78613,
-78613,
-78620,
-78648,
-78692,
-78714,
+78542,
+78570,
+78587,
+78603,
+78633,
+78644,
+78644,
+78644,
+78644,
+78650,
+78693,
+78693,
+78735,
78758,
-78805,
-78825,
-78839,
-78885,
-78934,
-78979,
+78787,
+78824,
+78838,
+78838,
+78838,
+78838,
+78838,
+78838,
+78849,
+78869,
+78869,
+78869,
+78869,
+78891,
+78891,
+78891,
+78891,
+78898,
+78898,
+78898,
+78918,
+78944,
+78944,
+78958,
+78965,
+78965,
+78972,
78984,
-79016,
-79016,
-79030,
-79050,
+78998,
+78998,
+78998,
+79034,
79057,
-79070,
-79070,
-79070,
-79070,
-79070,
-79077,
-79095,
+79064,
+79084,
+79090,
+79090,
+79090,
79102,
-79102,
-79110,
-79148,
-79176,
-79183,
-79195,
-79195,
-79195,
-79202,
-79202,
-79254,
-79268,
-79268,
-79276,
-79300,
-79315,
-79332,
-79332,
-79340,
-79359,
-79378,
-79390,
+79116,
+79123,
+79132,
+79155,
+79180,
+79180,
+79194,
+79194,
+79217,
+79217,
+79217,
+79224,
+79243,
+79243,
+79243,
+79250,
+79257,
+79264,
+79301,
+79331,
+79339,
+79339,
+79339,
+79346,
+79353,
+79361,
+79368,
+79375,
+79397,
79404,
-79429,
-79441,
-79453,
-79462,
-79462,
-79485,
-79492,
-79492,
-79492,
-79492,
-79492,
-79512,
-79530,
-79542,
-79552,
-79552,
-79560,
-79588,
-79595,
-79623,
-79652,
-79661,
-79661,
-79696,
-79721,
-79721,
-79731,
-79731,
-79738,
-79749,
-79749,
-79778,
-79796,
-79796,
-79804,
-79804,
-79811,
-79811,
-79811,
-79846,
-79857,
-79865,
-79890,
-79890,
-79890,
-79897,
-79916,
-79916,
-79923,
-79948,
-79987,
-79987,
-79987,
-79987,
-80003,
+79415,
+79428,
+79428,
+79436,
+79448,
+79455,
+79455,
+79487,
+79504,
+79511,
+79534,
+79548,
+79566,
+79573,
+79583,
+79602,
+79633,
+79648,
+79670,
+79677,
+79677,
+79684,
+79684,
+79706,
+79706,
+79725,
+79764,
+79764,
+79770,
+79793,
+79793,
+79809,
+79809,
+79809,
+79809,
+79830,
+79837,
+79843,
+79876,
+79899,
+79899,
+79899,
+79936,
+79942,
+79952,
+79967,
+79998,
80047,
-80060,
-80068,
-80098,
-80098,
-80098,
-80098,
-80098,
-80127,
-80136,
-80136,
-80136,
-80157,
-80177,
-80177,
-80212,
-80237,
-80237,
+80088,
+80137,
+80144,
+80164,
+80171,
+80178,
+80178,
+80178,
+80185,
+80192,
+80239,
80247,
-80265,
-80278,
-80278,
-80278,
-80290,
-80308,
-80341,
-80348,
-80356,
-80356,
-80356,
-80387,
-80387,
-80403,
-80418,
-80447,
-80447,
-80453,
-80453,
-80453,
-80479,
-80479,
-80495,
-80495,
-80495,
-80495,
-80495,
-80507,
-80507,
-80507,
-80507,
-80507,
-80507,
-80513,
-80542,
-80573,
-80573,
-80579,
-80579,
-80579,
-80610,
-80620,
-80620,
-80620,
-80636,
-80636,
-80636,
-80663,
-80672,
-80672,
-80672,
-80689,
-80734,
-80734,
-80734,
-80743,
-80771,
-80780,
-80780,
-80789,
-80789,
-80820,
-80828,
+80302,
+80302,
+80326,
+80350,
+80357,
+80357,
+80385,
+80396,
+80417,
+80455,
+80455,
+80455,
+80480,
+80514,
+80531,
+80543,
+80543,
+80543,
+80571,
+80618,
+80618,
+80625,
+80685,
+80690,
+80711,
+80718,
+80741,
+80755,
+80776,
+80776,
+80776,
+80776,
+80790,
+80790,
+80797,
+80815,
+80838,
+80856,
+80863,
80870,
-80897,
-80908,
-80934,
-80947,
-80947,
-80959,
-80996,
-81025,
-81025,
-81025,
-81037,
-81037,
-81037,
-81037,
-81037,
-81037,
-81044,
-81057,
-81057,
-81091,
-81099,
-81109,
-81126,
-81142,
-81142,
-81157,
-81157,
-81189,
-81189,
-81217,
-81248,
-81248,
-81255,
+80877,
+80877,
+80877,
+80885,
+80904,
+80948,
+80965,
+80986,
+81006,
+81006,
+81027,
+81041,
+81041,
+81062,
+81062,
+81087,
+81094,
+81094,
+81094,
+81108,
+81117,
+81124,
+81143,
+81150,
+81173,
+81192,
+81210,
+81210,
+81227,
+81266,
81279,
-81289,
-81289,
-81316,
-81316,
-81316,
-81334,
-81334,
-81345,
-81350,
-81378,
-81391,
-81415,
-81426,
-81446,
-81446,
-81488,
-81523,
-81523,
-81533,
-81533,
-81551,
-81580,
-81593,
-81605,
-81605,
-81605,
-81605,
-81612,
-81631,
-81661,
-81681,
-81697,
-81733,
-81733,
-81733,
-81745,
-81770,
-81770,
-81781,
-81781,
-81781,
-81794,
-81805,
-81805,
-81805,
-81837,
-81837,
-81848,
-81866,
-81866,
-81866,
-81866,
-81872,
+81302,
+81302,
+81309,
+81309,
+81337,
+81348,
+81355,
+81362,
+81386,
+81411,
+81421,
+81421,
+81456,
+81480,
+81504,
+81529,
+81555,
+81590,
+81597,
+81604,
+81621,
+81621,
+81628,
+81628,
+81652,
+81680,
+81680,
+81707,
+81714,
+81738,
+81738,
+81763,
+81776,
+81801,
+81808,
+81830,
+81844,
+81865,
81872,
-81880,
-81891,
-81891,
-81912,
-81912,
-81937,
-81937,
-81943,
-81959,
-81971,
-82016,
-82029,
-82071,
-82071,
-82071,
-82071,
-82071,
-82082,
-82082,
-82094,
-82101,
-82101,
-82108,
-82121,
-82141,
-82154,
-82154,
-82154,
-82154,
-82166,
-82166,
-82173,
-82204,
-82230,
-82249,
-82298,
-82320,
-82348,
-82348,
-82348,
-82373,
-82389,
-82389,
-82405,
-82405,
+81884,
+81884,
+81896,
+81896,
+81896,
+81903,
+81903,
+81917,
+81924,
+81939,
+81995,
+82003,
+82026,
+82056,
+82056,
+82056,
+82078,
+82078,
+82086,
+82109,
+82150,
+82165,
+82165,
+82186,
+82186,
+82186,
+82186,
+82186,
+82208,
+82208,
+82226,
+82226,
+82239,
+82284,
+82291,
+82301,
+82322,
+82339,
+82361,
+82368,
+82396,
82412,
-82426,
-82433,
-82433,
+82425,
+82425,
+82425,
82440,
-82463,
-82492,
-82499,
-82499,
-82525,
-82542,
-82560,
+82457,
+82489,
+82503,
+82522,
+82522,
+82541,
+82550,
+82567,
+82567,
82576,
-82600,
-82613,
-82613,
-82628,
-82642,
-82664,
-82713,
-82747,
-82747,
-82754,
-82763,
-82787,
-82808,
-82808,
-82828,
-82835,
-82842,
-82863,
-82880,
-82880,
-82880,
-82891,
-82891,
-82918,
-82923,
-82958,
-82965,
-82972,
-82972,
-82972,
-82972,
-82979,
-82989,
-83011,
-83021,
-83021,
-83021,
-83028,
-83028,
-83035,
-83059,
-83066,
-83066,
-83066,
-83082,
-83082,
-83082,
-83100,
-83100,
-83100,
-83126,
-83126,
-83126,
-83126,
-83157,
-83157,
-83157,
-83157,
-83168,
-83186,
-83210,
-83210,
-83210,
-83229,
-83235,
-83243,
-83279,
-83307,
-83316,
-83325,
-83353,
-83374,
-83374,
-83384,
-83405,
+82594,
+82601,
+82601,
+82616,
+82616,
+82616,
+82616,
+82634,
+82634,
+82634,
+82655,
+82662,
+82676,
+82676,
+82703,
+82737,
+82744,
+82774,
+82816,
+82839,
+82839,
+82869,
+82894,
+82913,
+82929,
+82941,
+82954,
+82954,
+82954,
+82978,
+82983,
+82983,
+83017,
+83024,
+83024,
+83024,
+83024,
+83024,
+83031,
+83049,
+83092,
+83111,
+83118,
+83131,
+83138,
+83162,
+83182,
+83202,
+83209,
+83209,
+83216,
+83216,
+83216,
+83251,
+83251,
+83251,
+83251,
+83258,
+83272,
+83314,
+83314,
+83314,
+83354,
+83366,
+83366,
+83397,
+83412,
+83419,
83419,
-83425,
-83455,
-83471,
-83483,
-83490,
-83510,
-83515,
-83515,
-83549,
-83555,
-83555,
-83595,
-83595,
-83595,
-83595,
-83602,
-83668,
-83696,
-83696,
-83696,
-83696,
-83696,
-83702,
-83718,
-83734,
-83734,
-83771,
-83810,
-83818,
-83836,
-83836,
-83836,
-83867,
-83867,
-83874,
-83874,
-83900,
-83923,
-83923,
-83958,
-83982,
-84022,
-84029,
-84044,
-84044,
-84051,
-84051,
-84067,
-84084,
-84134,
-84149,
-84192,
-84198,
-84205,
-84211,
-84241,
-84259,
-84270,
-84288,
-84310,
-84339,
-84346,
-84353,
-84400,
-84400,
-84400,
-84400,
-84421,
-84428,
-84444,
-84487,
-84507,
-84539,
-84575,
-84575,
-84587,
-84587,
-84602,
-84614,
-84621,
-84628,
-84642,
-84653,
-84653,
-84663,
-84690,
-84699,
-84706,
-84731,
-84738,
-84767,
+83434,
+83440,
+83464,
+83464,
+83497,
+83497,
+83497,
+83524,
+83542,
+83556,
+83611,
+83611,
+83611,
+83611,
+83616,
+83616,
+83667,
+83675,
+83681,
+83704,
+83730,
+83730,
+83749,
+83767,
+83784,
+83789,
+83823,
+83823,
+83858,
+83872,
+83872,
+83877,
+83893,
+83893,
+83912,
+83912,
+83934,
+83934,
+83941,
+83957,
+83957,
+83968,
+83984,
+83990,
+84001,
+84016,
+84023,
+84048,
+84073,
+84073,
+84098,
+84140,
+84140,
+84140,
+84160,
+84203,
+84233,
+84233,
+84245,
+84268,
+84304,
+84304,
+84304,
+84309,
+84315,
+84340,
+84376,
+84388,
+84437,
+84455,
+84462,
+84482,
+84502,
+84516,
+84516,
+84516,
+84532,
+84542,
+84542,
+84542,
+84588,
+84588,
+84608,
+84635,
+84635,
+84635,
+84649,
+84681,
+84698,
+84735,
+84756,
+84774,
+84774,
84774,
-84781,
-84799,
-84816,
-84823,
-84836,
-84843,
-84850,
-84872,
+84774,
+84797,
+84797,
+84815,
+84832,
+84832,
+84832,
+84842,
+84842,
+84869,
+84869,
+84869,
84879,
-84886,
-84886,
-84886,
-84893,
-84900,
-84921,
-84946,
-84953,
-84967,
-84974,
-84981,
-84988,
-85004,
-85004,
-85004,
-85022,
-85050,
-85050,
-85050,
-85057,
-85071,
-85071,
-85115,
-85135,
-85135,
-85154,
-85174,
-85190,
-85217,
-85243,
-85250,
-85250,
-85276,
-85284,
-85295,
-85313,
-85313,
-85330,
-85330,
-85330,
-85330,
-85337,
-85344,
-85354,
-85374,
-85381,
-85393,
-85400,
-85414,
-85429,
-85452,
-85459,
-85496,
-85520,
-85520,
-85534,
-85534,
-85540,
-85547,
-85547,
-85547,
-85594,
+84899,
+84906,
+84906,
+84906,
+84920,
+84925,
+84950,
+84965,
+84982,
+84982,
+84994,
+84999,
+85011,
+85041,
+85041,
+85062,
+85062,
+85062,
+85062,
+85086,
+85096,
+85096,
+85121,
+85121,
+85140,
+85140,
+85178,
+85178,
+85196,
+85215,
+85235,
+85235,
+85235,
+85257,
+85257,
+85257,
+85266,
+85279,
+85293,
+85293,
+85293,
+85299,
+85325,
+85325,
+85331,
+85358,
+85358,
+85358,
+85366,
+85379,
+85391,
+85419,
+85419,
+85436,
+85442,
+85465,
+85471,
+85495,
+85495,
+85495,
+85505,
+85505,
+85517,
+85517,
+85517,
+85517,
+85561,
+85577,
+85577,
85594,
-85611,
-85611,
-85633,
-85679,
-85716,
-85732,
-85732,
-85767,
-85782,
-85791,
-85804,
-85818,
-85828,
-85828,
-85828,
-85855,
-85855,
-85855,
-85878,
-85902,
-85909,
-85923,
-85930,
-85973,
-85996,
-86028,
+85599,
+85599,
+85621,
+85635,
+85651,
+85681,
+85689,
+85689,
+85689,
+85689,
+85708,
+85708,
+85718,
+85718,
+85733,
+85733,
+85733,
+85754,
+85774,
+85789,
+85789,
+85811,
+85811,
+85821,
+85821,
+85821,
+85861,
+85882,
+85882,
+85920,
+85920,
+85935,
+85942,
+85962,
+85970,
+85970,
+85994,
+85994,
+86024,
+86035,
86070,
-86117,
-86117,
-86137,
-86144,
-86144,
-86152,
-86159,
-86181,
-86195,
-86195,
-86202,
-86220,
-86239,
-86239,
-86239,
-86246,
+86098,
+86103,
+86113,
+86134,
+86165,
+86176,
+86176,
+86176,
+86176,
+86176,
+86176,
+86176,
+86189,
+86189,
+86189,
+86189,
+86189,
+86207,
+86217,
+86228,
+86248,
86265,
-86272,
-86272,
-86296,
-86303,
-86317,
-86340,
-86340,
-86356,
-86368,
-86386,
-86419,
-86419,
-86448,
-86475,
-86482,
-86482,
-86497,
-86520,
-86520,
-86520,
-86530,
-86530,
-86544,
-86576,
-86576,
-86583,
-86583,
-86637,
-86651,
-86668,
-86668,
-86668,
-86679,
-86679,
-86679,
-86701,
-86735,
-86772,
-86772,
-86779,
-86779,
-86798,
-86841,
-86848,
-86848,
-86848,
-86882,
-86903,
-86903,
-86912,
-86924,
-86924,
-86924,
-86950,
-86957,
-86973,
-86982,
-86989,
-86989,
-87009,
-87036,
-87036,
-87036,
-87045,
-87058,
-87094,
-87094,
-87094,
-87120,
-87120,
-87168,
-87174,
-87174,
-87195,
-87211,
-87239,
-87239,
-87239,
-87239,
-87282,
-87282,
-87307,
-87307,
-87307,
-87307,
-87312,
-87338,
-87345,
-87354,
-87382,
-87390,
-87422,
-87440,
-87447,
-87457,
-87472,
-87472,
-87489,
-87489,
-87512,
-87556,
-87556,
-87575,
-87599,
-87599,
-87610,
-87610,
-87610,
-87631,
-87668,
-87680,
-87680,
-87680,
-87693,
-87719,
-87736,
-87787,
-87818,
-87825,
-87831,
-87831,
-87831,
-87831,
+86290,
+86329,
+86329,
+86329,
+86329,
+86329,
+86329,
+86346,
+86346,
+86346,
+86346,
+86375,
+86375,
+86394,
+86394,
+86394,
+86402,
+86418,
+86444,
+86455,
+86455,
+86499,
+86499,
+86518,
+86518,
+86539,
+86554,
+86554,
+86554,
+86581,
+86581,
+86581,
+86591,
+86611,
+86611,
+86650,
+86650,
+86650,
+86693,
+86693,
+86693,
+86716,
+86732,
+86752,
+86752,
+86767,
+86767,
+86767,
+86777,
+86794,
+86794,
+86803,
+86803,
+86803,
+86803,
+86822,
+86827,
+86827,
+86861,
+86880,
+86880,
+86908,
+86908,
+86908,
+86936,
+86936,
+86936,
+86936,
+86945,
+86945,
+86967,
+86990,
+87003,
+87015,
+87029,
+87061,
+87080,
+87080,
+87098,
+87129,
+87129,
+87129,
+87173,
+87184,
+87209,
+87209,
+87262,
+87279,
+87331,
+87331,
+87331,
+87362,
+87378,
+87387,
+87387,
+87398,
+87398,
+87405,
+87405,
+87425,
+87425,
+87425,
+87425,
+87425,
+87449,
+87449,
+87454,
+87516,
+87567,
+87577,
+87577,
+87577,
+87595,
+87616,
+87652,
+87657,
+87657,
+87657,
+87666,
+87676,
+87732,
+87748,
+87748,
+87772,
+87772,
+87793,
+87793,
+87793,
+87793,
+87806,
+87806,
+87812,
+87836,
+87836,
87843,
-87880,
-87892,
-87909,
-87909,
-87909,
-87929,
-87951,
-87951,
-87973,
-87973,
-87997,
-88019,
-88031,
-88031,
-88040,
-88040,
-88060,
-88067,
-88074,
-88081,
-88111,
-88137,
-88144,
-88144,
-88156,
-88163,
-88163,
-88192,
-88192,
-88192,
-88192,
-88192,
-88192,
-88192,
-88192,
-88211,
-88218,
-88218,
-88245,
-88245,
-88271,
-88286,
-88293,
-88306,
-88336,
-88336,
-88336,
-88336,
-88348,
-88370,
-88370,
-88370,
-88394,
-88394,
+87843,
+87843,
+87843,
+87859,
+87859,
+87902,
+87918,
+87918,
+87928,
+87941,
+87975,
+87975,
+88007,
+88007,
+88050,
+88065,
+88108,
+88128,
+88141,
+88146,
+88167,
+88174,
+88181,
+88197,
+88219,
+88219,
+88244,
+88244,
+88262,
+88278,
+88278,
+88285,
+88304,
+88325,
+88325,
+88338,
+88338,
+88349,
+88365,
+88365,
+88365,
+88365,
+88371,
88394,
-88409,
-88409,
-88434,
-88448,
-88462,
-88484,
-88512,
-88525,
-88551,
-88584,
-88592,
-88599,
-88611,
-88667,
-88667,
-88684,
-88696,
-88696,
-88728,
-88728,
-88728,
-88744,
-88744,
-88771,
-88792,
-88814,
-88814,
-88814,
-88832,
-88832,
-88832,
-88842,
-88849,
-88849,
-88854,
+88414,
+88414,
+88414,
+88423,
+88452,
+88464,
+88485,
+88505,
+88552,
+88552,
+88552,
+88552,
+88563,
+88563,
+88578,
+88585,
+88585,
+88604,
+88629,
+88629,
+88635,
+88646,
+88676,
+88689,
+88706,
+88706,
+88706,
+88733,
+88740,
+88754,
+88774,
+88791,
+88835,
+88851,
+88851,
+88851,
+88861,
88868,
-88876,
-88916,
-88916,
-88941,
-88941,
-88976,
-88976,
-88985,
-88993,
-89008,
+88893,
+88905,
+88924,
+88930,
+88930,
+88937,
+88953,
+88966,
+88987,
89008,
-89008,
-89027,
-89027,
-89027,
-89040,
-89064,
-89064,
-89064,
-89064,
-89105,
-89113,
-89120,
-89142,
-89142,
-89142,
-89150,
-89197,
+89028,
+89050,
+89069,
+89069,
+89069,
+89069,
+89096,
+89107,
+89114,
+89114,
+89114,
+89139,
+89163,
+89178,
+89191,
+89191,
89197,
-89197,
-89204,
-89210,
-89210,
-89230,
-89248,
-89275,
-89303,
-89303,
-89310,
-89310,
-89321,
-89321,
-89339,
-89374,
-89374,
-89374,
-89391,
-89417,
-89442,
-89442,
-89451,
-89461,
-89461,
-89461,
-89471,
-89471,
-89525,
-89525,
-89541,
-89541,
-89561,
-89592,
-89602,
-89614,
-89636,
-89636,
-89650,
-89684,
-89684,
-89707,
-89733,
-89733,
-89733,
-89746,
-89746,
-89746,
-89746,
-89746,
-89785,
-89785,
-89785,
-89802,
-89802,
-89802,
-89812,
-89819,
-89819,
-89826,
-89826,
-89826,
-89826,
-89826,
-89826,
-89826,
-89844,
-89851,
+89217,
+89217,
+89239,
+89249,
+89249,
+89302,
+89302,
+89312,
+89328,
+89328,
+89328,
+89328,
+89328,
+89328,
+89344,
+89344,
+89344,
+89344,
+89351,
+89351,
+89361,
+89377,
+89377,
+89377,
+89377,
+89384,
+89403,
+89403,
+89409,
+89433,
+89433,
+89440,
+89466,
+89478,
+89518,
+89565,
+89565,
+89581,
+89581,
+89593,
+89598,
+89631,
+89646,
+89646,
+89646,
+89646,
+89669,
+89669,
+89694,
+89694,
+89718,
+89743,
+89743,
+89774,
+89774,
+89811,
+89831,
+89855,
+89855,
+89855,
89866,
-89876,
-89917,
-89929,
-89948,
-89973,
-89987,
-90013,
-90013,
-90020,
-90020,
-90051,
-90060,
-90070,
-90070,
-90077,
-90088,
-90096,
-90096,
-90096,
-90096,
-90116,
-90142,
-90156,
-90168,
-90175,
-90186,
-90192,
-90212,
-90238,
-90265,
-90277,
-90301,
-90301,
-90301,
-90306,
-90306,
-90384,
-90384,
-90398,
-90418,
-90438,
-90467,
-90474,
-90486,
-90504,
-90513,
-90513,
-90513,
-90529,
-90538,
+89879,
+89886,
+89893,
+89893,
+89902,
+89902,
+89912,
+89928,
+89928,
+89938,
+89966,
+89966,
+89966,
+89966,
+89966,
+89988,
+90001,
+90001,
+90001,
+90019,
+90036,
+90036,
+90036,
+90067,
+90067,
+90104,
+90122,
+90136,
+90177,
+90199,
+90206,
+90206,
+90216,
+90240,
+90240,
+90271,
+90300,
+90322,
+90322,
+90346,
+90346,
+90380,
+90391,
+90403,
+90412,
+90424,
+90424,
+90424,
+90446,
+90446,
+90446,
+90458,
+90458,
+90458,
+90490,
+90490,
+90546,
90546,
-90557,
+90554,
+90564,
+90564,
90564,
-90585,
90592,
-90604,
-90622,
-90627,
-90642,
-90642,
-90652,
-90659,
-90659,
-90666,
-90666,
-90666,
-90686,
-90706,
-90743,
-90743,
-90750,
-90750,
-90750,
-90770,
-90786,
-90830,
-90849,
-90856,
-90856,
-90856,
-90881,
-90896,
-90910,
-90956,
-90969,
-90991,
-90999,
-91007,
-91021,
-91036,
-91036,
-91054,
+90592,
+90592,
+90592,
+90592,
+90600,
+90616,
+90626,
+90650,
+90658,
+90668,
+90692,
+90701,
+90701,
+90701,
+90701,
+90718,
+90725,
+90725,
+90749,
+90749,
+90767,
+90779,
+90779,
+90779,
+90779,
+90797,
+90797,
+90828,
+90869,
+90880,
+90880,
+90909,
+90916,
+90916,
+90928,
+90928,
+90928,
+90928,
+90928,
+90928,
+90928,
+90928,
+90928,
+90937,
+90937,
+90937,
+90946,
+90946,
+90960,
+91009,
+91009,
+91017,
91059,
-91101,
-91120,
-91159,
-91177,
+91078,
+91078,
+91086,
+91127,
+91145,
+91145,
+91145,
+91155,
+91168,
+91178,
+91185,
+91185,
+91205,
+91205,
+91205,
91217,
-91236,
+91225,
+91246,
+91268,
91268,
-91285,
-91293,
-91300,
-91300,
-91300,
-91300,
-91310,
-91348,
+91281,
+91291,
+91291,
+91305,
+91320,
+91333,
+91333,
+91333,
+91345,
+91345,
+91345,
+91345,
91379,
-91386,
-91386,
-91408,
-91415,
-91438,
-91455,
-91455,
-91474,
-91474,
-91485,
-91485,
-91492,
-91513,
-91546,
-91546,
-91553,
-91553,
-91553,
-91566,
-91566,
-91566,
-91581,
-91596,
-91596,
-91615,
-91615,
-91629,
-91629,
+91399,
+91411,
+91411,
+91442,
+91442,
+91467,
+91482,
+91501,
+91543,
+91543,
+91561,
+91573,
+91598,
+91610,
91637,
-91637,
-91644,
-91658,
-91673,
-91688,
-91705,
-91705,
-91723,
-91741,
-91759,
-91759,
-91759,
-91759,
-91771,
-91825,
-91825,
-91842,
+91680,
+91680,
+91680,
+91680,
+91711,
+91711,
+91711,
+91730,
+91744,
+91744,
+91762,
+91762,
+91839,
+91847,
+91847,
91860,
-91870,
-91870,
-91870,
-91888,
-91888,
-91914,
-91940,
-91955,
-91962,
-91962,
-91994,
-92009,
-92036,
-92036,
-92043,
-92054,
-92054,
-92086,
-92086,
-92086,
-92095,
-92125,
-92125,
-92138,
-92138,
-92147,
-92173,
-92234,
-92249,
-92256,
-92277,
-92293,
-92322,
-92322,
-92322,
-92322,
-92322,
-92322,
-92328,
-92339,
-92348,
-92348,
-92348,
+91894,
+91912,
+91928,
+91937,
+91954,
+91966,
+91978,
+91990,
+92021,
+92021,
+92021,
+92039,
+92072,
+92105,
+92105,
+92105,
+92126,
+92133,
+92165,
+92202,
+92244,
+92250,
+92250,
+92261,
+92261,
+92304,
+92315,
+92315,
+92315,
+92341,
+92341,
92357,
-92400,
-92400,
-92400,
-92415,
-92425,
-92432,
-92432,
-92432,
-92432,
-92438,
-92462,
-92492,
-92499,
-92499,
-92499,
-92499,
-92520,
-92534,
-92560,
-92560,
-92587,
-92587,
-92596,
-92613,
-92642,
-92676,
-92699,
-92699,
-92699,
-92712,
-92712,
-92712,
-92732,
+92373,
+92396,
+92405,
+92405,
+92405,
+92411,
+92411,
+92430,
+92441,
+92441,
+92441,
+92451,
+92451,
+92451,
+92470,
+92497,
+92526,
+92526,
+92526,
+92526,
+92558,
+92576,
+92576,
+92576,
+92576,
+92588,
+92595,
+92595,
+92622,
+92633,
+92650,
+92650,
+92662,
+92679,
+92708,
+92708,
+92716,
+92716,
+92716,
92732,
-92754,
-92769,
-92795,
-92845,
-92857,
-92857,
-92879,
-92879,
-92879,
-92898,
-92931,
-92943,
-92952,
-92952,
-92952,
-92961,
-92961,
-92969,
-92969,
-92969,
-92969,
-93001,
-93001,
-93001,
-93001,
-93017,
-93017,
-93033,
-93054,
-93054,
-93061,
-93061,
-93061,
-93070,
-93070,
-93070,
-93099,
-93099,
-93112,
-93112,
-93121,
-93153,
-93153,
-93153,
+92759,
+92771,
+92771,
+92790,
+92790,
+92837,
+92891,
+92908,
+92920,
+92920,
+92950,
+92984,
+93000,
+93000,
+93011,
+93011,
+93035,
+93047,
+93077,
+93077,
+93089,
+93089,
+93089,
+93101,
+93101,
+93101,
+93114,
+93148,
+93148,
+93169,
93187,
-93208,
-93214,
-93220,
-93231,
-93231,
-93231,
-93231,
-93231,
-93256,
-93256,
-93256,
-93262,
-93262,
-93270,
-93270,
-93270,
-93270,
-93270,
-93277,
-93326,
-93344,
-93362,
-93362,
-93362,
-93362,
-93376,
-93408,
-93408,
-93415,
-93415,
-93415,
-93427,
-93427,
-93427,
-93433,
-93445,
-93464,
-93503,
-93513,
-93525,
-93525,
-93547,
-93564,
-93595,
-93595,
-93623,
-93653,
-93662,
-93662,
-93678,
-93678,
-93678,
-93742,
-93763,
-93770,
-93777,
-93790,
-93796,
-93814,
-93823,
-93830,
-93843,
+93207,
+93219,
+93233,
+93233,
+93240,
+93249,
+93249,
+93274,
+93296,
+93333,
+93356,
+93356,
+93356,
+93368,
+93437,
+93465,
+93491,
+93501,
+93519,
+93560,
+93560,
+93560,
+93574,
+93587,
+93619,
+93648,
+93688,
+93700,
+93712,
+93739,
+93739,
+93779,
+93779,
+93797,
+93826,
93856,
-93864,
-93908,
-93935,
-93935,
-93935,
-93944,
-93952,
-93952,
+93895,
+93911,
+93911,
+93943,
+93943,
+93968,
+93968,
+93968,
+93968,
+93968,
+93977,
+93977,
+93977,
+93986,
93997,
-94035,
-94054,
-94054,
-94065,
-94065,
-94079,
-94125,
-94138,
-94155,
-94170,
-94182,
-94208,
-94243,
-94253,
-94271,
-94283,
-94295,
-94312,
-94326,
-94326,
-94364,
-94382,
-94382,
+94008,
+94008,
+94031,
+94049,
+94064,
+94064,
+94074,
+94082,
+94099,
+94099,
+94109,
+94128,
+94145,
+94163,
+94169,
+94169,
+94181,
+94181,
+94181,
+94181,
+94181,
+94181,
+94181,
+94203,
+94203,
+94203,
+94203,
+94221,
+94221,
+94221,
+94221,
+94221,
+94241,
+94241,
+94241,
+94241,
+94241,
+94257,
+94270,
+94270,
+94289,
+94289,
+94311,
+94311,
+94311,
+94338,
+94352,
+94352,
+94352,
+94366,
+94366,
+94388,
+94388,
+94388,
+94398,
+94398,
+94398,
94410,
-94432,
-94432,
-94453,
-94453,
-94479,
-94487,
-94514,
-94529,
-94529,
-94540,
-94540,
-94547,
-94601,
-94601,
-94631,
-94669,
-94669,
-94680,
-94680,
-94706,
-94742,
-94782,
-94782,
-94792,
-94802,
-94824,
-94824,
-94834,
-94834,
-94851,
-94871,
-94878,
-94878,
-94906,
-94906,
-94913,
-94957,
-94980,
-94989,
-94995,
-95008,
-95024,
-95068,
-95089,
-95089,
-95099,
-95099,
-95140,
-95146,
-95146,
-95146,
-95173,
-95185,
-95185,
-95185,
-95185,
-95185,
-95208,
-95208,
-95208,
+94410,
+94436,
+94436,
+94452,
+94483,
+94489,
+94501,
+94528,
+94548,
+94571,
+94571,
+94584,
+94604,
+94604,
+94604,
+94604,
+94614,
+94614,
+94614,
+94626,
+94655,
+94670,
+94691,
+94697,
+94712,
+94712,
+94736,
+94743,
+94767,
+94803,
+94862,
+94907,
+94907,
+94907,
+94907,
+94907,
+94914,
+94924,
+94951,
+94951,
+94951,
+94951,
+94962,
+94962,
+94969,
+94969,
+94988,
+94988,
+94988,
+95002,
+95021,
+95021,
+95058,
+95058,
+95058,
+95085,
+95085,
+95096,
+95112,
+95112,
+95112,
+95125,
+95125,
+95152,
+95152,
+95183,
+95183,
95208,
-95214,
-95214,
-95214,
-95248,
-95254,
-95261,
-95288,
-95288,
-95300,
-95326,
-95326,
-95344,
-95360,
-95360,
-95360,
-95360,
-95360,
-95360,
-95369,
-95369,
-95381,
-95393,
-95414,
-95414,
-95414,
-95414,
-95420,
-95427,
-95474,
-95474,
-95474,
-95516,
-95516,
-95516,
-95562,
-95569,
-95611,
-95611,
-95611,
-95652,
-95664,
-95664,
-95671,
-95671,
-95716,
-95716,
-95741,
-95741,
+95213,
+95213,
+95253,
+95271,
+95291,
+95332,
+95332,
+95332,
+95332,
+95357,
+95373,
+95383,
+95383,
+95397,
+95407,
+95407,
+95407,
+95407,
+95407,
+95428,
+95435,
+95435,
+95442,
+95442,
+95450,
+95478,
+95492,
+95492,
+95492,
+95492,
+95492,
+95492,
+95521,
+95521,
+95521,
+95589,
+95589,
+95599,
+95623,
+95623,
+95637,
+95651,
+95662,
+95702,
+95702,
+95702,
+95711,
+95718,
+95718,
+95734,
95741,
-95757,
-95781,
-95781,
-95781,
-95781,
-95792,
-95810,
-95836,
-95836,
-95836,
-95841,
-95860,
-95860,
-95871,
-95871,
-95871,
-95923,
-95923,
-95938,
+95751,
+95751,
+95764,
+95771,
+95771,
+95788,
+95800,
+95804,
+95804,
+95809,
+95826,
+95826,
+95859,
+95859,
+95859,
+95875,
+95875,
+95919,
+95919,
+95919,
+95929,
+95929,
95956,
-95968,
-95990,
-96000,
-96007,
-96017,
-96017,
-96017,
-96029,
-96047,
-96064,
-96064,
-96078,
-96078,
-96078,
-96085,
-96085,
-96097,
-96097,
-96106,
-96106,
-96128,
-96152,
-96152,
-96152,
-96152,
-96201,
-96217,
-96237,
-96237,
-96237,
+95964,
+95978,
+95992,
+96019,
+96019,
+96019,
+96056,
+96056,
+96056,
+96056,
+96075,
+96075,
+96100,
+96100,
+96158,
+96176,
96247,
-96255,
-96287,
-96293,
-96301,
-96325,
-96331,
-96331,
-96349,
-96359,
-96375,
-96406,
-96406,
-96412,
-96440,
-96451,
-96451,
-96463,
-96463,
-96488,
-96507,
-96519,
-96519,
-96531,
-96537,
-96558,
-96570,
-96585,
-96604,
-96622,
-96638,
-96638,
-96638,
-96668,
-96668,
-96668,
-96668,
-96668,
-96702,
-96702,
-96725,
-96735,
-96735,
-96735,
-96747,
-96758,
-96777,
-96777,
-96777,
-96777,
-96795,
-96795,
-96804,
-96816,
-96844,
-96844,
-96844,
-96892,
-96904,
-96916,
-96916,
-96935,
-96935,
-96972,
-96972,
-96972,
-96972,
-96989,
-97005,
-97013,
-97013,
-97013,
-97013,
-97013,
-97043,
-97061,
-97061,
-97071,
-97108,
-97124,
-97124,
-97178,
-97178,
-97178,
-97178,
+96247,
+96275,
+96317,
+96317,
+96317,
+96337,
+96337,
+96337,
+96348,
+96348,
+96348,
+96383,
+96383,
+96403,
+96449,
+96449,
+96458,
+96470,
+96481,
+96481,
+96525,
+96536,
+96543,
+96543,
+96564,
+96564,
+96572,
+96605,
+96643,
+96643,
+96653,
+96659,
+96673,
+96677,
+96685,
+96685,
+96697,
+96706,
+96706,
+96706,
+96740,
+96756,
+96766,
+96782,
+96782,
+96792,
+96839,
+96849,
+96866,
+96866,
+96902,
+96945,
+96945,
+96953,
+96953,
+97000,
+97015,
+97034,
+97038,
+97046,
+97056,
+97104,
+97117,
+97155,
+97155,
+97155,
97178,
-97183,
-97215,
-97235,
-97242,
-97242,
-97273,
-97273,
-97325,
-97325,
-97325,
-97325,
-97366,
-97366,
-97366,
-97377,
-97377,
-97383,
-97390,
-97422,
-97422,
-97434,
-97459,
-97490,
-97490,
-97530,
+97199,
+97199,
+97217,
+97247,
+97262,
+97269,
+97269,
+97269,
+97269,
+97277,
+97289,
+97322,
+97339,
+97389,
+97409,
+97409,
+97409,
+97432,
+97448,
+97448,
+97448,
+97448,
+97456,
+97510,
97530,
97530,
-97530,
-97530,
-97541,
-97541,
-97541,
-97541,
-97541,
-97558,
-97571,
-97571,
-97597,
-97608,
-97622,
-97639,
-97639,
-97639,
-97646,
-97646,
-97646,
-97646,
-97668,
-97668,
-97685,
-97711,
-97744,
-97764,
-97764,
-97776,
-97788,
-97817,
-97817,
-97817,
-97817,
-97833,
-97846,
-97846,
-97866,
-97866,
-97866,
-97878,
-97878,
-97878,
-97901,
-97925,
-97931,
-97949,
-97949,
-97957,
-97965,
-97965,
-97965,
-97965,
-97965,
-97980,
-97991,
-98004,
-98023,
-98034,
-98034,
-98045,
-98045,
-98045,
-98056,
-98085,
-98085,
-98085,
-98106,
-98132,
-98141,
-98141,
-98166,
-98183,
-98183,
-98189,
-98189,
-98195,
-98252,
-98252,
-98252,
-98274,
-98278,
-98288,
-98288,
-98309,
-98330,
-98330,
-98336,
-98356,
-98356,
-98411,
-98427,
-98427,
-98448,
-98448,
-98448,
-98448,
-98464,
-98464,
-98495,
-98510,
-98510,
-98510,
-98510,
-98510,
-98510,
-98525,
-98553,
-98553,
-98580,
-98610,
-98610,
-98626,
-98626,
-98637,
-98637,
-98652,
-98662,
-98662,
-98662,
-98662,
-98662,
-98678,
-98691,
-98706,
-98716,
-98732,
-98732,
-98759,
-98774,
-98778,
-98792,
-98792,
-98801,
-98819,
-98819,
-98844,
-98866,
-98886,
-98886,
-98886,
-98886,
-98906,
-98915,
-98915,
-98915,
-98947,
-98947,
-98947,
-98947,
-98995,
-99001,
-99031,
-99031,
-99031,
-99035,
-99035,
-99035,
-99053,
-99053,
-99059,
-99059,
-99059,
-99059,
-99081,
-99097,
-99109,
-99109,
-99116,
-99116,
-99134,
-99134,
-99144,
-99144,
-99187,
-99193,
-99193,
-99193,
-99193,
-99193,
-99234,
-99268,
-99296,
-99313,
-99322,
-99353,
-99353,
-99359,
-99359,
-99359,
-99368,
-99379,
-99379,
-99379,
-99385,
-99385,
-99400,
-99400,
-99404,
-99404,
-99404,
-99422,
-99422,
-99422,
-99447,
-99469,
+97544,
+97561,
+97581,
+97581,
+97616,
+97616,
+97647,
+97656,
+97660,
+97660,
+97660,
+97683,
+97706,
+97754,
+97775,
+97780,
+97787,
+97787,
+97799,
+97813,
+97813,
+97855,
+97855,
+97855,
+97855,
+97879,
+97919,
+97919,
+97934,
+97945,
+97971,
+97999,
+98016,
+98016,
+98024,
+98024,
+98046,
+98046,
+98053,
+98060,
+98060,
+98060,
+98079,
+98079,
+98089,
+98112,
+98122,
+98151,
+98151,
+98165,
+98172,
+98172,
+98182,
+98211,
+98226,
+98257,
+98275,
+98310,
+98328,
+98343,
+98343,
+98360,
+98360,
+98388,
+98409,
+98418,
+98423,
+98423,
+98444,
+98444,
+98469,
+98469,
+98505,
+98515,
+98515,
+98536,
+98536,
+98536,
+98546,
+98552,
+98552,
+98559,
+98559,
+98576,
+98594,
+98607,
+98607,
+98632,
+98632,
+98663,
+98663,
+98676,
+98692,
+98692,
+98692,
+98707,
+98727,
+98744,
+98744,
+98775,
+98775,
+98811,
+98833,
+98853,
+98877,
+98928,
+98928,
+98932,
+98962,
+98984,
+98996,
+98996,
+99017,
+99017,
+99017,
+99030,
+99030,
+99030,
+99051,
+99100,
+99120,
+99120,
+99125,
+99149,
+99149,
+99149,
+99158,
+99158,
+99170,
+99179,
+99215,
+99246,
+99287,
+99305,
+99316,
+99316,
+99333,
+99342,
+99367,
+99367,
+99376,
+99376,
+99376,
+99412,
+99412,
+99429,
+99429,
99469,
-99469,
-99497,
-99522,
-99544,
-99544,
-99544,
-99544,
-99562,
-99583,
-99603,
-99603,
-99609,
-99609,
-99609,
-99619,
-99654,
-99673,
+99473,
+99483,
+99506,
+99506,
+99506,
+99506,
+99535,
+99541,
+99541,
+99554,
+99567,
+99567,
+99579,
+99579,
+99579,
+99594,
+99617,
+99657,
+99657,
+99657,
+99668,
+99668,
+99668,
99673,
-99683,
-99683,
-99720,
-99731,
-99747,
-99754,
-99795,
-99805,
-99817,
-99817,
-99841,
-99854,
-99872,
-99885,
-99885,
-99907,
-99939,
-99944,
-99961,
-99988,
-100011,
-100011,
-100011,
-100011,
-100011,
-100011,
-100011,
-100011,
-100011,
-100087,
-100103,
-100103,
-100125,
-100149,
-100157,
-100157,
-100169,
-100169,
-100169,
-100169,
-100184,
+99679,
+99679,
+99679,
+99700,
+99759,
+99772,
+99780,
+99780,
+99780,
+99786,
+99803,
+99803,
+99809,
+99820,
+99839,
+99847,
+99859,
+99859,
+99859,
+99881,
+99881,
+99903,
+99903,
+99903,
+99903,
+99903,
+99909,
+99909,
+99909,
+99929,
+99954,
+99964,
+99964,
+99964,
+99980,
+99980,
+99980,
+100021,
+100029,
+100035,
+100041,
+100045,
+100063,
+100104,
+100136,
+100136,
+100136,
+100144,
+100180,
+100186,
100196,
-100196,
-100196,
-100196,
-100204,
-100204,
-100217,
-100246,
-100258,
-100284,
-100300,
-100315,
-100338,
-100355,
-100355,
-100361,
-100361,
-100361,
-100387,
-100387,
-100387,
-100387,
-100404,
-100422,
-100428,
-100428,
-100437,
-100443,
-100458,
-100491,
-100529,
-100542,
-100555,
-100559,
-100559,
-100559,
-100575,
-100593,
-100593,
-100593,
-100593,
-100593,
-100615,
-100615,
-100623,
-100641,
-100647,
-100666,
-100690,
-100690,
-100708,
-100724,
-100737,
-100741,
-100770,
-100789,
-100810,
-100810,
-100810,
-100827,
-100827,
-100885,
-100885,
-100885,
-100885,
-100908,
-100918,
-100939,
-100939,
-100939,
-100953,
-100957,
-100987,
-101008,
-101008,
-101008,
-101008,
-101008,
-101008,
-101034,
-101050,
-101050,
-101070,
-101070,
-101079,
-101079,
-101087,
-101087,
-101087,
-101095,
-101116,
-101129,
-101148,
-101148,
-101148,
-101148,
-101148,
-101148,
-101162,
-101215,
-101215,
-101215,
-101215,
-101236,
-101241,
-101267,
-101267,
-101272,
-101272,
-101272,
-101281,
-101296,
-101296,
-101296,
-101296,
-101296,
-101296,
-101296,
-101325,
-101330,
-101330,
-101378,
-101378,
+100238,
+100254,
+100272,
+100296,
+100309,
+100341,
+100341,
+100393,
+100425,
+100425,
+100425,
+100449,
+100449,
+100449,
+100482,
+100482,
+100482,
+100501,
+100535,
+100556,
+100556,
+100573,
+100588,
+100618,
+100618,
+100635,
+100653,
+100653,
+100653,
+100695,
+100695,
+100695,
+100742,
+100742,
+100781,
+100816,
+100816,
+100816,
+100874,
+100874,
+100915,
+100915,
+100923,
+100923,
+100948,
+100948,
+100962,
+100962,
+100962,
+100966,
+100971,
+100979,
+100979,
+100979,
+100979,
+100993,
+101014,
+101029,
+101047,
+101054,
+101086,
+101086,
+101086,
+101094,
+101115,
+101121,
+101140,
+101150,
+101180,
+101180,
+101180,
+101201,
+101201,
+101213,
+101218,
+101226,
+101234,
+101253,
+101260,
+101275,
+101284,
+101284,
+101300,
+101320,
+101364,
+101372,
+101372,
+101380,
+101380,
+101392,
+101392,
101392,
101399,
-101406,
-101419,
-101419,
-101469,
-101469,
-101469,
-101494,
-101511,
-101528,
-101528,
-101535,
-101535,
-101539,
-101551,
-101551,
-101571,
-101571,
-101586,
-101608,
-101620,
-101630,
-101630,
-101630,
-101670,
-101670,
-101679,
-101696,
-101728,
-101741,
-101747,
-101758,
-101790,
-101790,
-101804,
-101804,
+101415,
+101415,
+101433,
+101441,
+101451,
+101458,
+101458,
+101466,
+101498,
+101518,
+101553,
+101553,
+101589,
+101615,
+101629,
+101629,
+101629,
+101645,
+101680,
+101680,
+101680,
+101698,
+101719,
+101727,
+101756,
+101767,
+101772,
+101789,
+101805,
+101805,
101816,
101816,
-101852,
-101862,
-101876,
-101876,
-101925,
-101939,
+101816,
+101816,
+101816,
+101840,
+101848,
+101868,
+101868,
+101868,
+101884,
+101903,
+101903,
+101903,
+101909,
+101909,
+101926,
+101932,
101959,
-101978,
-101988,
+101959,
+101977,
+101984,
101988,
101988,
101988,
-102026,
+102001,
+102007,
+102011,
+102011,
+102011,
+102022,
+102044,
102054,
-102120,
+102054,
+102061,
+102061,
+102061,
+102061,
+102061,
+102093,
+102113,
+102129,
+102147,
+102147,
102155,
-102166,
-102184,
-102184,
-102198,
-102211,
-102221,
+102174,
+102217,
102237,
-102248,
-102254,
-102254,
-102277,
-102277,
-102288,
+102259,
+102272,
+102279,
102297,
-102314,
-102324,
-102382,
-102382,
-102397,
-102404,
-102418,
-102418,
-102431,
-102431,
-102447,
-102455,
-102455,
-102468,
-102468,
-102502,
-102523,
-102532,
-102542,
-102562,
-102598,
-102598,
-102617,
-102617,
-102658,
-102658,
-102675,
-102694,
-102711,
-102750,
-102750,
-102760,
+102320,
+102351,
+102351,
+102351,
+102365,
+102369,
+102394,
+102420,
+102420,
+102465,
+102492,
+102492,
+102492,
+102492,
+102492,
+102512,
+102512,
+102516,
+102534,
+102534,
+102534,
+102534,
+102576,
+102597,
+102615,
+102615,
+102632,
+102661,
+102674,
+102700,
+102700,
+102727,
+102753,
102760,
-102774,
-102786,
-102833,
-102844,
-102866,
-102881,
-102913,
-102928,
-102952,
-102982,
-103002,
-103021,
-103048,
-103064,
-103083,
-103098,
-103098,
-103098,
-103132,
-103138,
-103152,
-103152,
-103152,
-103174,
-103185,
-103185,
-103197,
-103228,
-103228,
-103228,
-103262,
-103262,
-103296,
-103296,
-103296,
-103317,
-103330,
-103330,
-103343,
-103357,
-103357,
-103411,
-103418,
-103422,
-103436,
-103447,
-103478,
-103478,
-103513,
-103522,
-103557,
-103562,
-103594,
-103607,
-103635,
-103635,
-103635,
-103649,
-103658,
-103664,
-103678,
-103699,
-103699,
-103712,
-103726,
-103730,
-103730,
-103734,
-103756,
-103756,
-103763,
-103782,
+102782,
+102802,
+102802,
+102832,
+102857,
+102868,
+102868,
+102868,
+102868,
+102882,
+102905,
+102956,
+102986,
+102986,
+102986,
+102986,
+102986,
+102997,
+102997,
+102997,
+103003,
+103013,
+103013,
+103013,
+103013,
+103025,
+103043,
+103059,
+103097,
+103097,
+103104,
+103122,
+103126,
+103137,
+103141,
+103141,
+103165,
+103198,
+103204,
+103227,
+103250,
+103263,
+103267,
+103267,
+103275,
+103308,
+103327,
+103344,
+103344,
+103344,
+103350,
+103350,
+103350,
+103379,
+103406,
+103406,
+103406,
+103424,
+103439,
+103484,
+103490,
+103506,
+103533,
+103533,
+103550,
+103581,
+103601,
+103601,
+103601,
+103613,
+103666,
+103666,
+103666,
+103681,
+103681,
+103702,
+103702,
+103702,
+103733,
+103749,
103786,
-103805,
-103818,
-103832,
-103836,
-103836,
-103848,
-103855,
-103855,
-103855,
-103878,
-103878,
-103878,
-103878,
-103903,
-103903,
-103918,
-103940,
-103945,
-103945,
-103962,
-103973,
-103973,
-103973,
-103987,
-104026,
-104026,
+103786,
+103798,
+103807,
+103820,
+103820,
+103838,
+103838,
+103861,
+103872,
+103880,
+103880,
+103887,
+103894,
+103894,
+103902,
+103922,
+103941,
+103949,
+103949,
+103970,
+103970,
+103976,
+103976,
+103992,
+104021,
104041,
-104075,
-104079,
-104089,
-104105,
-104109,
-104109,
-104109,
-104109,
-104127,
-104172,
-104188,
-104188,
-104203,
-104203,
-104225,
-104239,
-104254,
-104276,
+104068,
+104073,
+104073,
+104073,
+104083,
+104083,
+104083,
+104093,
+104103,
+104121,
+104121,
+104121,
+104121,
+104121,
+104148,
+104154,
+104166,
+104166,
+104166,
+104189,
+104189,
+104189,
+104189,
+104201,
+104201,
+104201,
+104241,
+104269,
+104281,
+104281,
104301,
-104338,
-104349,
-104371,
-104390,
-104390,
-104407,
-104421,
-104434,
-104441,
-104441,
-104441,
-104441,
-104441,
-104441,
-104441,
+104331,
+104331,
+104331,
+104348,
+104348,
+104365,
+104393,
+104415,
+104429,
+104436,
+104442,
+104442,
104448,
-104461,
-104493,
-104511,
-104519,
-104519,
-104527,
-104552,
-104562,
-104581,
-104598,
-104598,
-104598,
-104598,
-104615,
+104466,
+104474,
+104474,
+104474,
+104490,
+104490,
+104508,
+104524,
+104536,
+104536,
+104544,
+104576,
+104576,
+104596,
+104622,
+104622,
+104639,
104648,
-104675,
-104691,
-104701,
-104737,
-104737,
-104737,
-104737,
-104737,
-104737,
-104737,
-104737,
-104754,
-104775,
-104779,
-104792,
-104796,
-104801,
-104801,
-104816,
-104829,
-104829,
-104845,
-104865,
-104869,
-104869,
-104887,
-104887,
-104887,
-104887,
-104902,
+104665,
+104665,
+104665,
+104672,
+104672,
+104687,
+104703,
+104719,
+104727,
+104751,
+104751,
+104777,
+104815,
+104893,
+104912,
+104912,
+104939,
+104951,
+104951,
+104951,
+104963,
+104967,
104967,
-104977,
-104977,
-104984,
-104995,
-105048,
-105048,
-105055,
-105055,
-105055,
-105055,
-105063,
-105063,
-105063,
-105100,
-105130,
-105178,
-105178,
-105206,
-105206,
+104999,
+105032,
+105036,
+105050,
+105050,
+105050,
+105066,
+105066,
+105087,
+105087,
+105117,
+105117,
+105117,
+105165,
+105200,
105228,
-105245,
-105245,
-105245,
-105245,
-105245,
-105245,
-105245,
-105245,
-105245,
-105245,
-105245,
-105257,
-105257,
-105257,
-105257,
-105306,
-105306,
-105328,
+105234,
+105253,
+105253,
+105253,
+105287,
+105310,
105333,
-105333,
-105351,
-105370,
-105378,
-105378,
-105388,
-105410,
-105410,
+105348,
+105348,
+105364,
+105364,
+105371,
+105381,
+105391,
+105406,
+105406,
105415,
-105438,
-105438,
-105438,
-105438,
-105438,
-105446,
-105482,
-105486,
-105516,
-105516,
-105516,
-105526,
-105544,
-105544,
-105558,
+105422,
+105448,
+105448,
+105455,
+105455,
+105466,
+105490,
+105504,
+105504,
+105543,
+105551,
+105551,
105558,
-105570,
-105603,
-105610,
-105610,
-105610,
-105624,
-105670,
-105670,
-105670,
+105565,
+105575,
+105575,
+105575,
+105575,
+105581,
+105643,
+105643,
+105653,
+105653,
+105664,
+105664,
+105680,
105680,
-105690,
-105698,
-105709,
-105709,
-105709,
-105729,
-105729,
-105737,
-105742,
-105764,
-105805,
-105836,
-105846,
-105846,
-105890,
-105890,
-105902,
-105920,
-105957,
-105968,
-105968,
-105968,
-105975,
-105975,
+105680,
+105701,
+105718,
+105726,
+105726,
+105751,
+105760,
+105803,
+105803,
+105803,
+105803,
+105803,
+105803,
+105803,
+105809,
+105842,
+105842,
+105848,
+105848,
+105866,
+105873,
+105873,
+105882,
+105882,
+105886,
+105886,
+105886,
+105912,
+105919,
+105940,
+105947,
+105956,
+105963,
+105963,
+105963,
+105963,
+105963,
+105963,
+105970,
+105996,
105996,
105996,
105996,
-106001,
-106001,
-106019,
-106019,
-106043,
-106064,
-106107,
-106153,
-106190,
-106208,
-106208,
-106208,
-106220,
-106220,
-106220,
-106220,
-106220,
-106254,
-106254,
-106254,
-106264,
-106296,
+106035,
+106035,
+106035,
+106050,
+106071,
+106082,
+106123,
+106146,
+106167,
+106167,
+106187,
+106197,
+106197,
+106197,
+106197,
+106226,
+106250,
+106250,
+106269,
+106275,
+106281,
+106281,
+106281,
+106304,
+106304,
106304,
-106309,
-106328,
106333,
-106348,
-106366,
-106384,
-106384,
-106408,
-106408,
-106424,
-106424,
-106424,
-106443,
-106459,
-106474,
-106474,
-106499,
-106522,
-106545,
-106558,
-106625,
-106630,
-106642,
-106665,
-106684,
-106697,
-106703,
-106703,
-106737,
-106743,
-106743,
-106766,
-106782,
-106782,
-106782,
-106782,
-106788,
-106816,
-106816,
-106834,
-106857,
-106863,
-106889,
-106906,
-106925,
-106925,
-106935,
-106961,
-106971,
-106971,
-107004,
-107004,
-107023,
-107023,
-107023,
-107029,
-107035,
-107041,
-107096,
-107119,
-107123,
-107144,
-107144,
-107165,
-107185,
-107185,
-107234,
-107259,
-107278,
-107294,
-107308,
-107319,
-107319,
-107319,
-107319,
-107333,
-107372,
-107385,
-107385,
-107385,
-107385,
-107405,
-107405,
-107405,
-107405,
-107405,
-107421,
-107427,
-107432,
-107432,
-107432,
-107441,
-107446,
-107446,
-107466,
-107466,
-107466,
-107466,
-107518,
-107528,
-107528,
-107528,
-107544,
-107561,
-107567,
-107567,
-107572,
-107582,
-107594,
-107635,
-107675,
-107675,
-107675,
-107697,
-107703,
-107703,
-107741,
-107751,
-107751,
-107768,
-107773,
-107796,
-107796,
-107828,
-107828,
-107828,
-107828,
-107848,
-107863,
-107873,
-107880,
-107880,
-107886,
-107922,
-107958,
-107981,
-107981,
-107981
+106355,
+106373,
+106382,
+106382,
+106382,
+106412,
+106419,
+106464,
+106464,
+106464,
+106464,
+106468,
+106489,
+106489,
+106496,
+106528,
+106528,
+106549,
+106549,
+106576,
+106582,
+106591,
+106591,
+106597,
+106597,
+106597,
+106615,
+106651,
+106726,
+106726,
+106736,
+106779,
+106793,
+106793,
+106818,
+106818,
+106818,
+106824,
+106853,
+106868,
+106872,
+106872,
+106872,
+106879,
+106879,
+106897,
+106913,
+106930,
+106940,
+106940,
+106952,
+106980,
+106993,
+107006,
+107006,
+107047,
+107087,
+107087,
+107094,
+107113,
+107139,
+107139,
+107139,
+107139,
+107192,
+107229,
+107237,
+107237,
+107237,
+107263,
+107295,
+107312,
+107337,
+107344,
+107351,
+107371,
+107371,
+107387,
+107429,
+107436,
+107450,
+107471,
+107514,
+107514,
+107553,
+107560,
+107573,
+107573,
+107647,
+107666,
+107671,
+107671,
+107678,
+107678,
+107704,
+107711,
+107711,
+107746,
+107746,
+107776,
+107776,
+107781,
+107827,
+107859,
+107879,
+107879,
+107879,
+107879,
+107925,
+107948,
+107955,
+107959,
+108004,
+108014,
+108038,
+108045,
+108045,
+108079,
+108103,
+108110,
+108139,
+108154,
+108173,
+108188,
+108208,
+108221,
+108231,
+108231,
+108231,
+108239,
+108275,
+108315,
+108329,
+108346,
+108346,
+108375,
+108375,
+108409,
+108409,
+108457,
+108468,
+108468,
+108468,
+108468,
+108468,
+108484,
+108492,
+108492,
+108492,
+108518,
+108535,
+108535,
+108547,
+108594,
+108594,
+108600,
+108600,
+108619,
+108639,
+108655,
+108663,
+108686,
+108686,
+108706,
+108744,
+108794,
+108824,
+108824,
+108830,
+108837
};
static const char *tldData[] = {
-"misasa.tottori.jp\0is-into-cartoons.com\0"
-"pistoia.it\0indian.museum\0"
-"traeumtgerade.de\0"
-"co.id\0"
-"arq.br\0co.hu\0salem.museum\0"
-"fukuchiyama.kyoto.jp\0"
-"laz.it\0ts.it\0\xd0\xb1\xd0\xb3\0"
-"tickets\0"
-"pn.it\0gorlice.pl\0"
-"co.il\0"
-"co.im\0communications.museum\0de.com\0"
-"magazine.aero\0co.in\0li.it\0"
-"aibetsu.hokkaido.jp\0"
-"lk3.ru\0"
-"co.ir\0uwu.ai\0"
-"trysil.no\0is-gone.com\0"
-"co.it\0notteroy.no\0lviv.ua\0dhl\0"
-"co.je\0endofinternet.net\0"
-"dupont\0kerryproperties\0"
-"unjarga.no\0"
-"asia\0"
-"co.jp\0vercel.dev\0"
-"fuel.aero\0ibara.okayama.jp\0"
+"frankfurt.museum\0"
+"writesthisblog.com\0"
+"mil.gh\0leadpages.co\0"
+"co.bi\0"
+"london\0"
+"co.bn\0"
+"jevnaker.no\0"
+"kihoku.ehime.jp\0cc.ga.us\0lib.tx.us\0fi.cloudplatform.fi\0loginto.me\0"
+"aisai.aichi.jp\0co.ca\0"
+"mil.gt\0mn.us\0bplaced.de\0"
+"co.bw\0wiw.gov.pl\0"
+"co.ci\0avocat.fr\0attorney\0"
+"eco\0goupile.fr\0"
+"anani.br\0"
+"co.cl\0sagae.yamagata.jp\0"
+"co.cm\0*.sendai.jp\0college\0"
+"mil.hn\0sec.ps\0"
+"development.run\0"
+"co.cr\0nakama.fukuoka.jp\0from-wi.com\0noticeable.news\0"
+"mil.id\0kijo.miyazaki.jp\0"
+"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"name\0"
+"press.ma\0"
+"co.cz\0"
+"co.dk\0"
+"uruma.okinawa.jp\0za.bz\0"
+"savannahga.museum\0"
+"mil.in\0"
+"edu\0termez.su\0vps-host.net\0"
+"mil.iq\0dtv\0"
+"s3-website.ap-south-1.amazonaws.com\0"
+"deporte.bo\0"
+"*.bzz.dapps.earth\0"
+"allfinanz\0"
"ciencia.bo\0"
-"marche.it\0co.ke\0\xc3\xa5mot.no\0"
-"shimodate.ibaraki.jp\0"
-"jor.br\0"
-"celtic.museum\0contractors\0mycd.eu\0"
-"moscow\0"
-"tosa.kochi.jp\0"
-"aizumisato.fukushima.jp\0rocher\0"
-"diy\0"
-"takanezawa.tochigi.jp\0co.kr\0travel.tt\0"
+"journalism.museum\0dnsup.net\0"
+"minamata.kumamoto.jp\0is-a-socialist.com\0"
+"mil.jo\0zapto.org\0"
+"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
+"digital\0"
+"vestv\xc3\xa5g\xc3\xb8y.no\0"
+"association.museum\0"
+"cloudns.pro\0"
+"mil.kg\0"
+"capital\0"
+"aikawa.kanagawa.jp\0inf.ua\0"
+"cc.nj.us\0"
+"gloppen.no\0"
+"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0mil.km\0dvr\0"
+"hanamigawa.chiba.jp\0from-pa.com\0"
+"student.aero\0"
+"o.bg\0mil.kr\0jeju.kr\0"
+"co.gg\0"
+"jx.cn\0\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0"
+"mil.kz\0"
+"humanities.museum\0"
+"co.gl\0"
+"kusatsu.gunma.jp\0"
+"promo\0"
+"bauern.museum\0chiropractic.museum\0"
+"weibo\0is-a-caterer.com\0"
+"kamoenai.hokkaido.jp\0mil.lv\0"
+"mil.mg\0"
+"co.gy\0"
+"fundacio.museum\0"
+"shibecha.hokkaido.jp\0"
+"beardu.no\0"
+"florist\0is-slick.com\0"
+"missoula.museum\0"
+"lib.nh.us\0"
+"co.id\0tgory.pl\0"
+"co.hu\0"
+"mil.mv\0"
+"uwajima.ehime.jp\0mil.ng\0narvik.no\0"
+"tkmaxx\0sells-it.net\0"
+"sa.au\0mil.my\0mil.ni\0"
+"\xe9\x95\xb7\xe9\x87\x8e.jp\0mil.mz\0"
+"co.il\0"
+"co.im\0opole.pl\0"
+"co.in\0"
+"mil.no\0"
+"of.london\0"
+"co.ir\0oyodo.nara.jp\0"
+"7.bg\0"
+"co.it\0onrender.com\0"
+"co.je\0"
+"sumy.ua\0"
+"boavista.br\0mil.nz\0"
+"sera.hiroshima.jp\0"
+"targi.pl\0download\0"
+"fujiyoshida.yamanashi.jp\0vaapste.no\0"
+"glug.org.uk\0"
+"co.jp\0football\0"
+"aju.br\0"
+"co.ke\0mil.pe\0"
+"sa.cr\0fineart.museum\0sel.no\0theworkpc.com\0"
+"ise.mie.jp\0iheya.okinawa.jp\0snoasa.no\0"
+"aomori.aomori.jp\0mil.ph\0\xd1\x80\xd1\x84\0"
+"shimogo.fukushima.jp\0"
+"shiso.hyogo.jp\0"
+"inashiki.ibaraki.jp\0"
+"baths.museum\0mil.pl\0"
+"sasaguri.fukuoka.jp\0"
+"scotland.museum\0"
+"mil.qa\0"
+"co.kr\0"
"co.lc\0"
-"gorizia.it\0"
-"shima.mie.jp\0"
-"village.museum\0"
-"ujitawara.kyoto.jp\0"
-"rj.gov.br\0"
-"*.moonscale.io\0"
-"reise\0"
-"yamakita.kanagawa.jp\0co.ma\0oster\xc3\xb8y.no\0\xe8\xb0\xb7\xe6\xad\x8c\0"
-"sampa.br\0"
+"accident-investigation.aero\0nt.edu.au\0"
+"tushu\0"
+"public.museum\0mil.py\0boutir.com\0qc.com\0"
+"ca-central-1.elasticbeanstalk.com\0"
+"cechire.com\0"
+"ama.aichi.jp\0"
+"doshi.yamanashi.jp\0cipriani\0"
+"co.ma\0"
+"airbus\0mine.nu\0"
"co.ls\0"
-"express\0"
"co.me\0"
-"mamurogawa.yamagata.jp\0"
"co.mg\0"
-"engineer\0"
-"algard.no\0"
-"sasayama.hyogo.jp\0memset.net\0"
-"pi.leg.br\0"
-"meme\0"
-"co.na\0"
-"*.otap.co\0"
-"fjaler.no\0\xd9\x83\xd9\x88\xd9\x85\0"
-"co.mu\0"
-"kids.museum\0"
-"childrensgarden.museum\0co.mw\0"
-"okawa.fukuoka.jp\0mishima.shizuoka.jp\0historisch.museum\0"
-"df.gov.br\0co.ni\0"
-"co.mz\0locker\0"
-"co.nl\0"
-"akashi.hyogo.jp\0sorreisa.no\0"
-"kibichuo.okayama.jp\0co.no\0"
-"lutsk.ua\0"
-"toyota.aichi.jp\0"
-"ulsan.kr\0uppo.gov.pl\0\xd0\xb5\xd1\x8e\0"
-"co.nz\0"
-"writesthisblog.com\0"
-"co.om\0fastvps.site\0co.place\0"
-"tr.eu.org\0"
-"jewish.museum\0menu\0"
-"music.museum\0freemyip.com\0"
-"handson.museum\0degree\0"
-"is-a-caterer.com\0"
-"steiermark.museum\0valle.no\0"
-"android\0"
-"toscana.it\0nara.nara.jp\0for-some.biz\0"
-"dnp\0"
-"building.museum\0"
-"paderborn.museum\0berg.no\0"
-"fuchu.toyama.jp\0"
-"co.pl\0"
-"co.pn\0hepforge.org\0"
-"dog\0"
-"skierva.no\0"
-"\xec\x82\xbc\xec\x84\xb1\0"
-"shinto.gunma.jp\0"
-"nakagawa.tokushima.jp\0co.pw\0"
-"blogdns.com\0"
-"dot\0"
-"so.it\0cleaning\0"
-"himi.toyama.jp\0gs.fm.no\0"
-"monzaebrianza.it\0hobby-site.com\0"
-"co.business\0"
-"mydatto.net\0"
-"platter-app.dev\0"
-"lib.as.us\0earth\0"
-"\xe6\x8b\x9b\xe8\x81\x98\0futurehosting.at\0"
-"como.it\0walmart\0"
-"nishio.aichi.jp\0"
-"ueno.gunma.jp\0"
-"no.com\0co.ro\0"
-"kawara.fukuoka.jp\0arao.kumamoto.jp\0"
-"nf.ca\0"
-"co.rs\0"
-"aya.miyazaki.jp\0"
+"elverum.no\0"
+"misato.akita.jp\0otoyo.kochi.jp\0corporation.museum\0historicalsociety.museum\0"
+"emb.kw\0co.na\0s\xc3\xa1l\xc3\xa1t.no\0uk0.bigv.io\0"
+"\xc3\xb8rland.no\0"
+"f.se\0"
+"co.mu\0mil.ru\0"
+"vi.it\0co.mw\0mil.rw\0"
+"mil.sh\0"
+"co.ni\0exposed\0"
+"co.mz\0"
+"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0navy\0"
+"zj.cn\0ebino.miyazaki.jp\0co.nl\0"
+"kolobrzeg.pl\0"
+"izu.shizuoka.jp\0co.no\0"
+"apple\0"
+"kami.miyagi.jp\0"
+"ooguy.com\0"
+"mil.st\0"
+"wang\0"
+"!city.yokohama.jp\0"
+"mil.sy\0"
+"co.nz\0mil.tj\0"
+"kaho.fukuoka.jp\0co.om\0mil.tm\0lib.ri.us\0panel.gg\0"
+"mil.to\0"
+"tiffany\0"
+"sakai.osaka.jp\0"
+"chosei.chiba.jp\0mil.tr\0"
+"educational.museum\0"
+"losangeles.museum\0"
+"veg\xc3\xa5rshei.no\0h\xc3\xa4kkinen.fi\0"
+"yamamoto.miyagi.jp\0"
+"mil.tw\0"
+"stjordalshalsen.no\0"
+"iwakura.aichi.jp\0kusatsu.shiga.jp\0mil.tz\0"
+"sp.leg.br\0co.pl\0"
+"x.bg\0nyuzen.toyama.jp\0co.pn\0"
+"natal.br\0"
+"\xe6\xbe\xb3\xe9\x96\x80\0bofa\0"
+"mil.vc\0"
+"mil.ve\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0dattoweb.com\0"
+"co.pw\0"
+"sa.it\0"
+"hekinan.aichi.jp\0mil.uy\0fan\0"
+"funabashi.chiba.jp\0"
+"kamijima.ehime.jp\0"
+"from-sc.com\0"
+"barsy.site\0"
+"torino.it\0"
+"tjome.no\0"
+"us-east-1.amazonaws.com\0"
+"forsand.no\0music\0"
+"taiki.hokkaido.jp\0community-pro.de\0"
+"krasnik.pl\0"
+"hobby-site.com\0"
+"egyptian.museum\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0"
+"co.ro\0"
+"jus.br\0"
+"toyama.jp\0tsu.mie.jp\0shiftcrypto.dev\0"
+"ikeda.gifu.jp\0co.rs\0k12.pr.us\0"
+"myphotos.cc\0"
+"nagasaki.jp\0"
"co.rw\0"
-"vic.gov.au\0spot\0"
-"eat\0"
-"anjo.aichi.jp\0mo-i-rana.no\0"
-"katsuyama.fukui.jp\0akabira.hokkaido.jp\0"
-"homebuilt.aero\0kinghost.net\0"
-"stor-elvdal.no\0"
-"horten.no\0"
-"diamonds\0is-an-engineer.com\0"
-"co.st\0loginline.io\0"
-"griw.gov.pl\0"
-"fukudomi.saga.jp\0mashiko.tochigi.jp\0nowaruda.pl\0"
-"ozu.kumamoto.jp\0"
-"encyclopedic.museum\0co.th\0"
-"co.sz\0co.tj\0"
-"reggiocalabria.it\0est-le-patron.com\0"
-"aizuwakamatsu.fukushima.jp\0"
-"friulive-giulia.it\0yamagata.ibaraki.jp\0co.tm\0"
-"environmentalconservation.museum\0"
-"dunlop\0"
-"yamanashi.yamanashi.jp\0burghof.museum\0co.ua\0"
-"muroran.hokkaido.jp\0blogspot.com.cy\0"
-"co.tt\0"
-"kadena.okinawa.jp\0barrel-of-knowledge.info\0"
-"softbank\0"
-"rodoy.no\0co.ug\0eco\0"
-"takasu.hokkaido.jp\0"
-"\xc3\xb8yer.no\0loginto.me\0"
+"yusui.kagoshima.jp\0"
+"aparecida.br\0cupcake.is\0"
+"shingo.aomori.jp\0bergen.no\0\xe5\xbe\xae\xe5\x8d\x9a\0"
+"esq\0net.eu.org\0paas.datacenter.fi\0no-ip.ca\0"
+"toyoura.hokkaido.jp\0nhlfan.net\0"
+"uk.primetel.cloud\0"
+"us-east-1.elasticbeanstalk.com\0"
+"mock.pstmn.io\0"
+"tottori.jp\0hofu.yamaguchi.jp\0bievat.no\0"
+"co.st\0"
+"hi.cn\0warabi.saitama.jp\0mil.ye\0"
+"soja.okayama.jp\0co.th\0"
+"user.srcf.net\0"
+"presidio.museum\0co.sz\0co.tj\0smile\0"
+"co.tm\0"
+"gs.ol.no\0"
+"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0"
+"muos\xc3\xa1t.no\0"
+"hitra.no\0mil.za\0for-better.biz\0co.ua\0"
+"ggee\0"
+"flesberg.no\0co.tt\0"
+"co.ug\0"
"co.tz\0"
-"yashio.saitama.jp\0kautokeino.no\0co.uk\0realtor\0"
-"ohira.tochigi.jp\0ky.us\0"
-"aktyubinsk.su\0blogspot.com.ee\0"
-"pe.leg.br\0"
-"b\xc3\xb8mlo.no\0blogspot.com.eg\0"
-"freemasonry.museum\0"
-"co.us\0s3-website.ca-central-1.amazonaws.com\0"
-"siracusa.it\0"
-"co.ve\0ftpaccess.cc\0"
-"kunneppu.hokkaido.jp\0sumida.tokyo.jp\0"
-"hachijo.tokyo.jp\0"
-"takahama.aichi.jp\0co.vi\0"
-"kochi.kochi.jp\0co.uz\0edgeapp.net\0"
-"budejju.no\0blogspot.com.ar\0"
-"toyoake.aichi.jp\0silk.museum\0"
-"edu\0yabu.hyogo.jp\0kashihara.nara.jp\0wloclawek.pl\0square7.de\0"
-"dtv\0misconfused.org\0blogspot.com.au\0"
-"ichikawa.chiba.jp\0setouchi.okayama.jp\0\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0photography\0"
-"pesaro-urbino.it\0cartoonart.museum\0missoula.museum\0cloudaccess.host\0"
-"fin.ci\0"
-"k12.sc.us\0"
-"basel.museum\0"
-"servehttp.com\0"
-"k12.oh.us\0"
-"l.se\0"
-"garden.museum\0dynathome.net\0blogspot.com.br\0"
-"maniwa.okayama.jp\0"
-"trentinosued-tirol.it\0"
-"uwu.nu\0"
-"imperia.it\0milano.it\0onojo.fukuoka.jp\0"
-"muko.kyoto.jp\0tr\xc3\xa6na.no\0"
-"mimata.miyazaki.jp\0exposed\0blogspot.com.by\0"
-"belluno.it\0"
-"sicily.it\0"
-"amazon\0"
-"hs.zone\0"
-"blogspot.com.co\0"
-"bomlo.no\0dvr\0"
-"casino.hu\0nishinoshima.shimane.jp\0omaha.museum\0in-dsl.org\0"
-"fin.ec\0is-a-hard-worker.com\0"
-"ap-southeast-1.elasticbeanstalk.com\0dscloud.me\0"
-"country\0eu.com\0"
-"luxe\0ddnss.org\0"
-"corvette.museum\0"
-"miyake.nara.jp\0"
-"dontexist.org\0"
-"kahoku.ishikawa.jp\0linkyard-cloud.ch\0"
-"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0*.sendai.jp\0agakhan\0dyndns-wiki.com\0"
-"microsoft\0"
-"\xd1\x80\xd1\x84\0"
-"filegear-gb.me\0"
-"\xe1\x83\x92\xe1\x83\x94\0is-a-conservative.com\0"
-"shakotan.hokkaido.jp\0loginline.services\0"
-"trani-andria-barletta.it\0\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0"
-"sa.gov.au\0"
-"oslo.no\0\xd9\x85\xd8\xb5\xd8\xb1\0plumbing\0square7.ch\0virtualserver.io\0"
+"andoy.no\0co.uk\0lacaixa\0"
+"iwafune.tochigi.jp\0mil.zm\0cloudns.org\0"
+"stargard.pl\0eus\0"
+"pb.ao\0"
+"mer\xc3\xa5ker.no\0"
+"greta.fr\0dyndns-office.com\0"
+"bo.nordland.no\0co.us\0"
+"forl\xc3\xac-cesena.it\0k12.nj.us\0"
+"or.at\0rendalen.no\0co.ve\0calvinklein\0"
+"social\0"
+"mil.zw\0"
+"cuneo.it\0"
+"co.vi\0"
+"or.bi\0westfalen.museum\0namdalseid.no\0co.uz\0"
+"cyon.link\0"
+"dyndns-pics.com\0"
+"cc.sd.us\0"
+"jp.eu.org\0"
+"kameoka.kyoto.jp\0"
+"kozow.com\0"
+"balsan-s\xc3\xbc""dtirol.it\0"
+"\xe6\xbe\xb3\xe9\x97\xa8\0"
+"hirosaki.aomori.jp\0pub.sa\0"
+"or.ci\0fitness\0"
+"trentinoaadige.it\0matsubushi.saitama.jp\0rackmaze.com\0"
+"vic.edu.au\0udi.br\0"
+"lezajsk.pl\0"
+"o.se\0"
+"or.cr\0lom.it\0vr.it\0uchihara.ibaraki.jp\0"
+"shangrila\0"
+"luroy.no\0datsun\0ftpaccess.cc\0"
+"myds.me\0"
+"kh.ua\0analytics\0"
+"mobile\0"
+"lib.ga.us\0"
+"for.one\0"
+"casino\0"
+"bond\0"
+"now.sh\0"
+"porsgrunn.no\0"
+"globo\0"
+"dd-dns.de\0"
+"trentinos\xc3\xbc""d-tirol.it\0"
+"fit\0"
"co.za\0"
-"taishin.fukushima.jp\0"
-"castle.museum\0"
-"azure-mobile.net\0"
-"clothing\0"
-"yoshida.saitama.jp\0"
-"delivery\0"
-"blogspot.com.es\0"
+"iris.arpa\0"
+"lodingen.no\0dni.us\0"
+"toyonaka.osaka.jp\0vi.us\0"
+"ina.saitama.jp\0porsangu.no\0"
+"book\0"
+"coloradoplateau.museum\0sydney\0"
"co.zm\0"
-"ag.it\0myiphost.com\0"
-"vestnes.no\0"
-"\xc3\xa5seral.no\0xs4all.space\0"
-"hamburg\0"
-"mb.ca\0co.zw\0za.bz\0"
-"fujisawa.iwate.jp\0is-a-designer.com\0"
-"biei.hokkaido.jp\0"
-"shitara.aichi.jp\0"
-"anan.tokushima.jp\0"
-"trentinoaltoadige.it\0"
-"booking\0"
-"bjark\xc3\xb8y.no\0tools\0"
-"odda.no\0"
-"rr.gov.br\0publ.pt\0"
-"kitahata.saga.jp\0heroy.nordland.no\0"
-"automotive.museum\0"
-"fastlylb.net\0"
-"udi.br\0fujioka.gunma.jp\0rag-cloud.hosteur.com\0"
-"hiji.oita.jp\0jolster.no\0"
-"takamori.kumamoto.jp\0"
-"gs.svalbard.no\0"
-"kijo.miyazaki.jp\0"
-"from-sd.com\0"
-"venice.it\0kamikoani.akita.jp\0b\xc3\xb8.telemark.no\0associates\0"
-"kunimi.fukushima.jp\0santabarbara.museum\0barefoot\0"
-"university\0"
-"bolzano-altoadige.it\0nago.okinawa.jp\0sciencehistory.museum\0"
-"dnsiskinky.com\0"
-"ginowan.okinawa.jp\0in-vpn.org\0onthewifi.com\0"
-"living.museum\0madrid\0"
-"ariake.saga.jp\0narvik.no\0nieruchomosci.pl\0"
-"rs.gov.br\0sc.gov.br\0usercontent.jp\0"
-"niki.hokkaido.jp\0"
-"vaapste.no\0"
-"cc.ms.us\0cc.nc.us\0"
-"social\0mein-iserv.de\0bar1.net\0"
-"brindisi.it\0sosnowiec.pl\0cc.in.us\0"
-"jeonbuk.kr\0"
-"figueres.museum\0"
-"u.bg\0"
-"bern.museum\0"
-"0.bg\0"
-"misato.akita.jp\0dyndns.info\0"
-"talk\0pr.leg.br\0"
-"cam.it\0k12.ak.us\0"
-"tamamura.gunma.jp\0"
-"kyotanabe.kyoto.jp\0opoczno.pl\0"
-"nakatombetsu.hokkaido.jp\0"
-"malatvuopmi.no\0zarow.pl\0"
-"kvitsoy.no\0enscaled.sg\0"
-"aprendemas.cl\0"
-"r\xc3\xb8""d\xc3\xb8y.no\0"
-"farmers\0"
-"abira.hokkaido.jp\0alvdal.no\0"
-"massacarrara.it\0"
-"design.aero\0"
-"uk.eu.org\0"
-"ingatlan.hu\0"
-"pharmacy.museum\0"
-"is-a-therapist.com\0"
-"yokote.akita.jp\0from-ms.com\0from-nc.com\0"
-"mb.it\0"
-"abruzzo.it\0lib.ct.us\0norton\0blogspot.com.mt\0"
-"togitsu.nagasaki.jp\0zachpomor.pl\0"
-"okinoshima.shimane.jp\0"
-"blogspot.com.ng\0ddns.net\0"
-"vaga.no\0\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"vip.jelastic.cloud\0"
-"fan\0"
-"brother\0etisalat\0"
-"a.ssl.fastly.net\0"
-"ayase.kanagawa.jp\0in.london\0"
-"nsn.us\0comcast\0"
-"press.aero\0s\xc3\xb8r-aurdal.no\0"
-"mypsx.net\0"
-"afjord.no\0"
-"sx.cn\0trentino-sudtirol.it\0"
-"home-webserver.de\0"
-"kalisz.pl\0"
-"kitamoto.saitama.jp\0"
-"rn.gov.br\0saigawa.fukuoka.jp\0orsta.no\0"
-"agents.aero\0"
-"takayama.gunma.jp\0"
-"vestre-slidre.no\0"
-"khmelnitskiy.ua\0cloud.fedoraproject.org\0"
-"inatsuki.fukuoka.jp\0"
-"doshi.yamanashi.jp\0"
-"mizunami.gifu.jp\0esq\0"
-"tsurugashima.saitama.jp\0"
-"noto.ishikawa.jp\0s3.dualstack.ap-southeast-2.amazonaws.com\0blogspot.com.tr\0"
-"dnsdojo.com\0webspace.rocks\0"
-"certification.aero\0"
-"seki.gifu.jp\0richardli\0"
-"audi\0"
-"url.tw\0"
-"realestate.pl\0"
-"\xe4\xba\xac\xe9\x83\xbd.jp\0estate\0"
-"tr\xc3\xb8gstad.no\0"
-"ro.gov.br\0aquarelle\0"
-"ikeda.osaka.jp\0sandvik\0"
-"neustar\0"
-"radio\0"
-"est-mon-blogueur.com\0"
-"kommunalforbund.se\0"
-"abashiri.hokkaido.jp\0kitagawa.miyazaki.jp\0hm.no\0\xc3\xa1lt\xc3\xa1.no\0pub.sa\0"
-"fujimi.nagano.jp\0"
-"ichinoseki.iwate.jp\0"
-"eus\0"
-"ap-northeast-3.elasticbeanstalk.com\0"
-"a.bg\0kofu.yamanashi.jp\0cc.de.us\0in-dsl.de\0"
-"kazo.saitama.jp\0beer\0"
-"notodden.no\0szczytno.pl\0flir\0in.net\0"
-"radom.pl\0blackbaudcdn.net\0"
-"matsumoto.kagoshima.jp\0fauske.no\0fin.tn\0serveblog.net\0"
-"host\0"
-"krasnodar.su\0"
-"nsw.au\0monza-brianza.it\0"
-"devices.resinstaging.io\0"
-"dyndns-pics.com\0"
-"i234.me\0"
-"services.aero\0"
-"maritime.museum\0"
-"koeln\0"
-"perspecta.cloud\0"
-"fredrikstad.no\0s3-ap-southeast-2.amazonaws.com\0"
-"\xe6\x89\x8b\xe6\x9c\xba\0freeddns.us\0"
-"agrar.hu\0"
-"volyn.ua\0"
-"leirfjord.no\0"
-"pc.it\0ravenna.it\0js.org\0"
-"bjerkreim.no\0"
-"panama.museum\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.cn\0"
-"piemonte.it\0barsy.net\0"
-"sanda.hyogo.jp\0stuttgart.museum\0vang.no\0blogspot.com.uy\0"
-"s3-website-sa-east-1.amazonaws.com\0"
-"bt.it\0\xe9\xa3\x9f\xe5\x93\x81\0s3-us-west-1.amazonaws.com\0"
-"\xe7\xb5\x84\xe7\xb9\x94.tw\0"
-"lecce.it\0"
-"eu.ax\0"
-"fit\0health-carereform.com\0"
-"taxi\0winners\0is-a-personaltrainer.com\0"
-"dyndns-remote.com\0"
+"nakanoto.ishikawa.jp\0"
+"fie.ee\0gs.hl.no\0is-a-cubicle-slave.com\0"
+"muenster.museum\0"
+"iamallama.com\0outsystemscloud.com\0"
+"shopping\0barsy.shop\0"
+"konsulat.gov.pl\0co.zw\0"
+"tsuruga.fukui.jp\0"
+"ddnss.org\0"
+"tsuwano.shimane.jp\0"
+"alaska.museum\0bukhara.su\0"
+"lib.nv.us\0"
+"credit\0"
+"sakai.fukui.jp\0\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
+"monza-brianza.it\0lom.no\0"
+"schweiz.museum\0na4u.ru\0"
+"koshigaya.saitama.jp\0"
+"rana.no\0gentapps.com\0"
+"fly\0"
+"or.id\0"
+"mitane.akita.jp\0"
"kitagata.saga.jp\0"
-"sanjo.niigata.jp\0"
-"boldlygoingnowhere.org\0"
-"sd.cn\0"
-"dyndns-free.com\0"
-"knx-server.net\0"
-"kraanghke.no\0cloudfunctions.net\0"
-"rebun.hokkaido.jp\0"
-"obuse.nagano.jp\0wpenginepowered.com\0"
-"shw.io\0"
-"nakatsugawa.gifu.jp\0mutual\0"
-"freeboxos.fr\0"
-"dh.bytemark.co.uk\0"
-"esashi.hokkaido.jp\0cx.ua\0"
-"posts-and-telecommunications.museum\0rakkestad.no\0"
-"diet\0"
-"us-4.evennode.com\0"
-"auspost\0"
-"barsy.menu\0"
-"endofinternet.org\0"
-"*.bzz.dapps.earth\0"
-"kimitsu.chiba.jp\0pittsburgh.museum\0"
-"bedzin.pl\0eu-west-1.elasticbeanstalk.com\0"
-"ggf.br\0systems\0"
-"fly\0kddi\0"
-"stat.no\0"
-"*.spectrum.myjino.ru\0"
-"selfip.net\0"
-"chesapeakebay.museum\0dinosaur.museum\0"
-"avocat.pro\0\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0hu.com\0"
-"aircraft.aero\0\xe7\xbd\x91\xe7\xbb\x9c.hk\0"
-"friuli-v-giulia.it\0k12.wy.us\0tec.mi.us\0"
-"koshu.yamanashi.jp\0"
-"ullensaker.no\0cc.ca.us\0"
-"kokubunji.tokyo.jp\0olkusz.pl\0nz.basketball\0"
-"u.se\0"
-"net.ac\0veneto.it\0hostyhosting.io\0"
-"net.ae\0"
-"net.af\0"
-"gliding.aero\0net.ag\0"
-"net.ai\0"
-"paris\0"
-"net.al\0ako.hyogo.jp\0oarai.ibaraki.jp\0"
-"net.am\0cesena-forl\xc3\xac.it\0"
-"aisho.shiga.jp\0"
-"control.aero\0pc.pl\0"
-"net.ba\0otsuchi.iwate.jp\0kawai.nara.jp\0"
-"net.ar\0net.bb\0"
-"amsterdam\0foo\0"
-"customer.enonic.io\0"
-"net.au\0kyuragi.saga.jp\0"
-"net.bh\0stufftoread.com\0"
-"net.az\0"
-"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
-"fox\0"
-"net.bm\0satsumasendai.kagoshima.jp\0yamato.kanagawa.jp\0"
-"net.bn\0iz.hr\0"
-"net.bo\0g\xc3\xa1ls\xc3\xa1.no\0"
-"us-3.evennode.com\0"
-"net.br\0dynalias.net\0"
-"net.bs\0"
-"net.bt\0"
-"gs.nl.no\0fl\xc3\xa5.no\0"
-"hiratsuka.kanagawa.jp\0"
-"se.gov.br\0hikari.yamaguchi.jp\0"
-"net.ci\0inc.hk\0"
-"championship.aero\0net.bz\0koori.fukushima.jp\0touch.museum\0lib.mo.us\0"
-"net.cm\0no.it\0"
-"net.cn\0ddns.me\0"
-"net.co\0canada.museum\0lincoln\0"
+"my-vigor.de\0"
+"tc.br\0histoire.museum\0ravpage.co.il\0"
+"caa.aero\0"
+"indianmarket.museum\0pdns.page\0"
+"akune.kagoshima.jp\0"
+"tome.miyagi.jp\0"
+"or.it\0sakurai.nara.jp\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0"
+"b\xc3\xa1hcavuotna.no\0aejrie.no\0"
+"nsw.edu.au\0sandefjord.no\0"
+"project.museum\0"
+"tr\xc3\xa6na.no\0"
+"imb.br\0aus.basketball\0"
+"cx.ua\0"
+"etajima.hiroshima.jp\0"
+"or.jp\0"
+"mcdir.me\0"
+"sakado.saitama.jp\0"
+"asmatart.museum\0"
+"or.ke\0"
+"from-ne.com\0"
+"foo\0"
+"ishinomaki.miyagi.jp\0"
+"tachiarai.fukuoka.jp\0okawa.kochi.jp\0"
+"is-uberleet.com\0"
+"comcast\0"
+"chikujo.fukuoka.jp\0or.kr\0fox\0it1.jenv-aruba.cloud\0"
+"ny.us\0noop.app\0"
+"rj.gov.br\0"
+"bolzano-altoadige.it\0mansions.museum\0"
+"tsubetsu.hokkaido.jp\0"
+"tokyo.jp\0"
+"childrens.museum\0saltdal.no\0webcam\0"
+"ap-northeast-1.elasticbeanstalk.com\0"
+"wildlife.museum\0"
+"orx.biz\0"
+"rnu.tn\0"
+"hakui.ishikawa.jp\0"
+"mashike.hokkaido.jp\0"
"gal\0"
-"kikonai.hokkaido.jp\0"
-"fe.it\0gives\0"
-"boston.museum\0gap\0"
-"net.cu\0"
-"ap.it\0"
-"net.cw\0"
-"net.cy\0"
-"otoineppu.hokkaido.jp\0kasuga.hyogo.jp\0"
-"chikuhoku.nagano.jp\0fantasyleague.cc\0dyn-vpn.de\0"
-"net.dm\0gay\0"
-"net.do\0"
-"frl\0"
-"kyotango.kyoto.jp\0miasta.pl\0"
-"kitahiroshima.hokkaido.jp\0"
-"zj.cn\0net.ec\0"
-"in-dsl.net\0"
-"ba.gov.br\0"
-"kosaka.akita.jp\0"
-"net.eg\0"
-"habmer.no\0"
-"net.dz\0morotsuka.miyazaki.jp\0"
-"gaular.no\0villas\0"
-"mobara.chiba.jp\0fuoisku.no\0"
-"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0"
-"uni5.net\0meteorapp.com\0"
-"yandexcloud.net\0"
-"net.et\0"
-"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0"
-"vardo.no\0lixil\0"
-"net.fj\0hamaroy.no\0"
-"\xe7\xbb\x84\xe7\xbb\x87.hk\0nature.museum\0"
-"ponpes.id\0sayama.osaka.jp\0best\0"
-"net.fm\0"
-"toyoura.hokkaido.jp\0barsycenter.com\0"
-"dynu.net\0"
-"usa.museum\0us-2.evennode.com\0"
+"shimotsuke.tochigi.jp\0"
+"gap\0"
+"heritage.museum\0x.se\0bostik\0"
+"koebenhavn.museum\0"
+"or.na\0valer.hedmark.no\0"
+"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0co.com\0"
+"gay\0"
+"or.mu\0"
+"frl\0official.academy\0"
+"\xc3\xa5l.no\0"
+"oshima.tokyo.jp\0"
+"tonami.toyama.jp\0"
+"is-a-liberal.com\0"
+"gallup\0"
+"stalbans.museum\0fin.ci\0"
+"iwaizumi.iwate.jp\0kainan.wakayama.jp\0"
+"witd.gov.pl\0njs.jelastic.vps-host.net\0"
+"ogose.saitama.jp\0cambridge.museum\0"
+"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0mc.ax\0"
+"servebbs.net\0"
+"la.us\0"
+"kherson.ua\0"
+"chijiwa.nagasaki.jp\0"
+"direct.quickconnect.to\0"
+"nagi.okayama.jp\0"
+"hadsel.no\0"
+"office\0"
"gdn\0"
-"cityeats\0"
-"net.ge\0tra.kp\0gea\0"
-"s\xc3\xa1lat.no\0ftr\0at-band-camp.net\0"
-"net.gg\0architecture.museum\0auto\0"
-"diadem.cloud\0"
-"isa-geek.org\0"
-"tsuchiura.ibaraki.jp\0"
-"net.gl\0toda.saitama.jp\0"
-"net.gn\0hongo.hiroshima.jp\0ooguy.com\0"
-"navigation.aero\0"
-"net.gp\0"
-"higashinaruse.akita.jp\0kurate.fukuoka.jp\0"
-"net.gr\0fun\0thingdustdata.com\0"
-"net.gt\0"
-"net.gu\0kozow.com\0"
-"outsystemscloud.com\0"
-"asahi.yamagata.jp\0oksnes.no\0barsy.pro\0"
-"net.gy\0zao.miyagi.jp\0"
-"sukagawa.fukushima.jp\0"
-"net.hk\0kasama.ibaraki.jp\0"
-"virtual-user.de\0woltlab-demo.com\0"
-"net.hn\0otake.hiroshima.jp\0anthro.museum\0"
-"cyou\0"
-"sa.gov.pl\0"
-"9.bg\0"
-"net.ht\0net.id\0k12.ms.us\0k12.nc.us\0"
-"grosseto.it\0"
-"nedre-eiker.no\0"
-"a.se\0"
-"balsan-suedtirol.it\0bielawa.pl\0"
-"net.il\0"
-"net.im\0holt\xc3\xa5len.no\0"
-"net.in\0"
-"net.iq\0clan.rip\0"
-"net.ir\0"
-"net.is\0"
-"odessa.ua\0"
-"net.je\0"
-"buyshouses.net\0"
-"odesa.ua\0"
-"modern.museum\0transport.museum\0barsy.pub\0"
-"viajes\0"
-"net.jo\0"
-"sardegna.it\0otoyo.kochi.jp\0us-1.evennode.com\0"
-"iitate.fukushima.jp\0"
-"net.kg\0"
-"mie.jp\0net.ki\0lib.vi.us\0"
-"calabria.it\0"
-"ve.it\0"
-"fyi\0lolipop.io\0"
-"net.kn\0s3-website-us-west-2.amazonaws.com\0"
-"minamiise.mie.jp\0ocelot.mythic-beasts.com\0"
-"shirahama.wakayama.jp\0"
-"net.la\0"
-"net.lb\0foundation\0"
-"net.lc\0dish\0nfshost.com\0"
-"trainer.aero\0"
-"sorocaba.br\0morimachi.shizuoka.jp\0spdns.org\0"
-"log.br\0"
-"net.kw\0"
-"sg-1.paas.massivegrid.net\0"
-"net.ky\0"
-"minokamo.gifu.jp\0net.kz\0parts\0"
-"tomisato.chiba.jp\0net.lk\0"
-"adachi.tokyo.jp\0"
-"gop.pk\0gentapps.com\0"
-"horology.museum\0salzburg.museum\0"
-"yaita.tochigi.jp\0party\0"
-"net.ma\0"
-"net.lr\0"
-"net.ls\0"
-"dscloud.mobi\0"
-"am.gov.br\0net.me\0"
-"erotica.hu\0net.lv\0"
-"travel\0"
-"net.ly\0"
-"gotpantheon.com\0"
-"net.mk\0select\0"
-"net.ml\0"
-"net.mo\0"
-"joinville.br\0"
-"net.ms\0fam.pk\0"
-"hb.cn\0gosen.niigata.jp\0net.mt\0builtwithdark.com\0"
-"mutsuzawa.chiba.jp\0net.mu\0"
-"net.mv\0net.nf\0"
-"net.mw\0net.ng\0"
-"net.mx\0"
-"net.my\0net.ni\0gle\0"
-"net.mz\0"
-"yamashina.kyoto.jp\0roan.no\0"
-"bandai.fukushima.jp\0"
-"kawanishi.nara.jp\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0"
-"kirovograd.ua\0"
-"*.elb.amazonaws.com.cn\0"
-"caltanissetta.it\0"
-"wiw.gov.pl\0"
-"net.nr\0"
-"hirado.nagasaki.jp\0wi.us\0"
-"\xe7\xb5\x84\xe7\xb9\x94.hk\0"
-"assassination.museum\0sd.us\0"
-"bamble.no\0net.nz\0"
-"doesntexist.org\0"
-"nogata.fukuoka.jp\0net.om\0"
-"culturalcenter.museum\0"
-"ryukyu\0"
-"mantova.it\0maryland.museum\0net.pa\0"
-"epilepsy.museum\0"
-"kashima.saga.jp\0interactive.museum\0gmo\0"
-"net.pe\0lancia\0"
-"isumi.chiba.jp\0bato.tochigi.jp\0"
-"net.ph\0"
-"jewelry\0"
-"us-west-1.elasticbeanstalk.com\0"
-"ranzan.saitama.jp\0net.pk\0coffee\0"
-"tajiri.osaka.jp\0net.pl\0gmx\0"
-"shinshinotsu.hokkaido.jp\0"
-"net.pn\0donetsk.ua\0"
-"ilawa.pl\0"
-"hirakata.osaka.jp\0net.qa\0"
-"entertainment.aero\0net.pr\0"
-"net.ps\0"
-"s\xc3\xb8gne.no\0net.pt\0guide\0"
-"j.bg\0nishiaizu.fukushima.jp\0toyooka.hyogo.jp\0"
-"higashihiroshima.hiroshima.jp\0oshu.iwate.jp\0"
-"yamanashi.jp\0hokksund.no\0svelvik.no\0"
-"net.py\0"
-"servequake.com\0"
-"psc.br\0okayama.jp\0vodka\0j.scaleforce.com.cy\0"
-"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0utah.museum\0k12.il.us\0"
-"date.hokkaido.jp\0folkebibl.no\0"
-"daegu.kr\0"
-"mikawa.yamagata.jp\0k12.de.us\0"
-"jele.site\0"
-"vega.no\0goo\0"
-"vegarshei.no\0gop\0"
-"monzaedellabrianza.it\0futuremailing.at\0"
-"\xe5\x95\x86\xe6\xa5\xad.tw\0"
-"journalism.museum\0got\0solutions\0"
-"wales.museum\0toray\0"
-"gov\0"
-"global.ssl.fastly.net\0ms.leg.br\0"
-"br\xc3\xb8nn\xc3\xb8ysund.no\0"
-"tank.museum\0"
-"onyourside\0"
-"terni.it\0nakagawa.fukuoka.jp\0co.krd\0"
-"lillehammer.no\0"
-"net.sa\0in-vpn.net\0"
-"net.sb\0\xe9\xa6\x99\xe6\xb8\xaf\0kosher\0ch.trendhosting.cloud\0"
-"net.sc\0"
-"net.sd\0nikon\0"
-"ap.gov.br\0net.ru\0"
-"store\0"
-"tsumagoi.gunma.jp\0airguard.museum\0net.rw\0net.sg\0"
-"net.sh\0"
-"sn\xc3\xa5""ase.no\0"
-"website\0"
-"zoological.museum\0net.sl\0"
-"net.so\0"
-"karikatur.museum\0international\0"
-"enebakk.no\0net.ss\0"
-"ass.km\0net.st\0"
-"fukuchi.fukuoka.jp\0sherbrooke.museum\0"
-"fhs.no\0"
-"from-mt.com\0from-nd.com\0"
-"net.th\0pcloud.host\0"
-"net.sy\0ollo\0productions\0"
-"belem.br\0gr.it\0jeju.kr\0konin.pl\0net.tj\0lib.ca.us\0"
-"mt.leg.br\0"
-"bodo.no\0net.tm\0lon-1.paas.massivegrid.net\0"
-"net.tn\0"
-"f\xc3\xb8rde.no\0ap.gov.pl\0olawa.pl\0net.to\0"
-"isa-geek.com\0"
-"net.ua\0"
-"net.tr\0"
-"lg.jp\0hbo\0"
-"net.tt\0"
-"limanowa.pl\0"
-"bologna.it\0gr.jp\0wake.okayama.jp\0"
-"tranoy.no\0net.tw\0"
-"web.bo\0hosting\0""4lima.de\0"
-"apps.lair.io\0"
-"aetna\0"
-"hirono.fukushima.jp\0net.uk\0\xd2\x9b\xd0\xb0\xd0\xb7\0abbott\0"
-"hobol.no\0fashion\0"
-"try-snowplow.com\0"
-"star\0"
-"nx.cn\0olbiatempio.it\0net.vc\0"
-"net.ve\0"
-"js.cn\0estate.museum\0malbork.pl\0target\0"
-"feira.br\0lanxess\0"
-"web.co\0"
-"net.uy\0net.vi\0\xe6\x85\x88\xe5\x96\x84\0"
-"net.uz\0"
-"gitapp.si\0now-dns.net\0"
-"net.vn\0is-lost.org\0appchizi.com\0"
-"seaport.museum\0mk.ua\0"
-"hiranai.aomori.jp\0"
-"trieste.it\0usui.fukuoka.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
-"if.ua\0"
-"net.vu\0"
-"likes-pie.com\0""4lima.at\0"
-"web.do\0uk.reclaim.cloud\0"
-"yatsushiro.kumamoto.jp\0forde.no\0"
-"yotsukaido.chiba.jp\0"
-"mansions.museum\0"
-"prato.it\0urausu.hokkaido.jp\0force.museum\0"
-"mielec.pl\0"
-"aoste.it\0ofunato.iwate.jp\0barsy.org\0"
-"ome.tokyo.jp\0"
-"ono.hyogo.jp\0hoyanger.no\0molde.no\0net.ws\0"
-"cancerresearch\0"
-"uk.primetel.cloud\0"
-"4lima.ch\0"
-"cloud66.ws\0"
-"matsumoto.nagano.jp\0ishikawa.okinawa.jp\0clinic\0"
-"cc.tn.us\0"
-"flor\xc3\xb8.no\0nes.buskerud.no\0"
-"siellak.no\0uzhgorod.ua\0"
-"lodingen.no\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0"
-"abo.pa\0"
-"net.ye\0rugby\0\xe9\xa4\x90\xe5\x8e\x85\0"
-"muenster.museum\0aukra.no\0no-ip.ca\0"
-"macys\0selfip.info\0"
-"godo.gifu.jp\0romsa.no\0"
-"k12.or.us\0"
-"kimino.wakayama.jp\0"
-"\xe6\xa0\x83\xe6\x9c\xa8.jp\0"
-"portlligat.museum\0"
-"net.za\0"
-"tsukui.kanagawa.jp\0termez.su\0"
-"extraspace\0"
-"wios.gov.pl\0"
-"g\xc3\xa1ivuotna.no\0net.zm\0"
-"web.gu\0"
-"kaisei.kanagawa.jp\0"
-"tas.edu.au\0kasuga.fukuoka.jp\0aure.no\0boehringer\0"
-"lans.museum\0"
-"sakae.nagano.jp\0"
-"delaware.museum\0"
-"!city.kitakyushu.jp\0okegawa.saitama.jp\0synology.me\0"
-"ybo.faith\0"
-"recht.pro\0"
-"web.id\0d\xc3\xb8nna.no\0rzgw.gov.pl\0"
-"tosashimizu.kochi.jp\0from-hi.com\0"
-"tsurugi.ishikawa.jp\0cloud-de.unispace.io\0"
-"bifuka.hokkaido.jp\0"
-"shell.museum\0flowers\0"
-"web.in\0"
-"klabu.no\0"
-"hiv\0"
-"trentino-s\xc3\xbc""d-tirol.it\0gamagori.aichi.jp\0"
-"*.banzai.cloud\0"
-"movimiento.bo\0"
-"hornindal.no\0"
-"ua.rs\0"
-"cechire.com\0co.financial\0"
-"bi.it\0brussel.museum\0history.museum\0"
-"trustee.museum\0"
-"qpon\0"
-"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
-"showa.yamanashi.jp\0"
-"conf.au\0"
-"eiheiji.fukui.jp\0"
-"bihoro.hokkaido.jp\0hara.nagano.jp\0field.museum\0"
-"donna.no\0"
-"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0hkt\0"
-"is-an-accountant.com\0kurgan.su\0"
-"oita.jp\0drayddns.com\0"
-"isen.kagoshima.jp\0bydgoszcz.pl\0"
-"honbetsu.hokkaido.jp\0oregon.museum\0square.museum\0"
-"inagawa.hyogo.jp\0"
-"pl.ua\0"
-"tsuruga.fukui.jp\0"
-"web.lk\0lg.ua\0"
-"ardal.no\0"
-"dontexist.com\0"
-"dr\xc3\xb8""bak.no\0"
-"tone.ibaraki.jp\0is-a-techie.com\0"
-"kiyokawa.kanagawa.jp\0"
-"webhosting.be\0"
-"hs.run\0"
-"\xe7\xa7\xbb\xe5\x8a\xa8\0"
-"takikawa.hokkaido.jp\0"
-"mini\0"
-"bill.museum\0"
-"from-ks.com\0"
-"mint\0gsj.bz\0"
-"ichikawa.hyogo.jp\0axis.museum\0web.nf\0"
-"s3.eu-west-3.amazonaws.com\0is-a-musician.com\0"
-"web.ni\0"
-"historisches.museum\0"
-"laspezia.it\0"
-"pescara.it\0"
-"market\0"
-"reisen\0"
-"for.men\0"
-"charter.aero\0"
-"elasticbeanstalk.com\0dyndns.dappnode.io\0"
-"k12.nv.us\0"
-"vgs.no\0"
-"*.owo.codes\0"
-"groks-the.info\0"
-"oxford.museum\0"
-"from.hr\0gyeongnam.kr\0umig.gov.pl\0hot\0syno-ds.de\0"
-"fuchu.hiroshima.jp\0"
-"kurobe.toyama.jp\0how\0"
-"versicherung\0"
-"alipay\0"
-"web.pk\0"
-"tcp4.me\0"
-"fuchu.tokyo.jp\0"
-"coal.museum\0"
-"myfast.host\0"
-"mircloud.us\0"
-"tarnobrzeg.pl\0"
-"iide.yamagata.jp\0"
-"farm.museum\0"
-"chino.nagano.jp\0"
-"selfip.org\0"
-"oumu.hokkaido.jp\0"
-"shiroishi.miyagi.jp\0"
-"ri.it\0lib.nh.us\0"
-"under.one\0"
-"mt.it\0kanegasaki.iwate.jp\0zone\0"
-"sanuki.kagawa.jp\0"
-"gs.jan-mayen.no\0\xc3\xb8ystre-slidre.no\0ibm\0"
-"owani.aomori.jp\0oppeg\xc3\xa5rd.no\0"
-"dyn-o-saur.com\0ntdll.top\0"
-"andasuolo.no\0dyndns.biz\0forte.id\0"
-"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0ice\0"
-"team\0"
-"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0"
-"police.uk\0"
-"riik.ee\0"
-"io.kg\0"
-"coupon\0icu\0"
-"deals\0s3-eu-central-1.amazonaws.com\0"
-"hk.cn\0koryo.nara.jp\0"
-"matera.it\0raid\0"
-"shari.hokkaido.jp\0"
-"web.tj\0sm.ua\0"
-"hsbc\0icbc\0"
-"dynalias.org\0"
-"swiftcover\0"
-"tech\0"
-"online.th\0"
-"web.tr\0toyota\0"
-"baghdad.museum\0"
-"miyoshi.hiroshima.jp\0"
-"loans\0phone\0"
-"\xd0\xb1\xd0\xb5\xd0\xbb\0"
-"semboku.akita.jp\0gotemba.shizuoka.jp\0sebastopol.ua\0oh.us\0"
-"nogi.tochigi.jp\0oygarden.no\0"
-"fly.dev\0"
-"web.ve\0"
-"oyer.no\0"
-"other.nf\0nissedal.no\0"
-"lazio.it\0kunitomi.miyazaki.jp\0ifm\0mo-siemens.io\0"
-"\xe5\x80\x8b\xe4\xba\xba.hk\0mesaverde.museum\0hammerfest.no\0mircloud.ru\0"
-"poivron.org\0edgestack.me\0"
-"gildesk\xc3\xa5l.no\0"
-"kami.kochi.jp\0"
-"genkai.saga.jp\0from-wv.com\0"
-"isa.us\0"
-"okaya.nagano.jp\0"
-"etc.br\0"
-"cc.il.us\0"
-"k12.ut.us\0"
-"s.bg\0"
-"emilia-romagna.it\0"
-"flynnhosting.net\0"
-"k12.nj.us\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
-"veterinaire.km\0"
-"vercelli.it\0"
-"kamigori.hyogo.jp\0"
-"ro.eu.org\0"
-"minamidaito.okinawa.jp\0"
-"loseyourip.com\0"
-"kumamoto.jp\0"
-"shiojiri.nagano.jp\0"
-"2000.hu\0"
-"nowtv\0"
-"lodi.it\0tobe.ehime.jp\0"
-"\xe6\x94\xbf\xe5\xba\x9c\0isa-geek.net\0"
-"stange.no\0"
-"pisa.it\0"
-"kamitonda.wakayama.jp\0bajddar.no\0"
-"schools.nsw.edu.au\0bieszczady.pl\0"
-"vefsn.no\0"
-"is-a-libertarian.com\0"
-"filegear-de.me\0"
-"showa.fukushima.jp\0"
-"lucania.it\0minamiyamashiro.kyoto.jp\0platter-app.com\0"
-"alesund.no\0ac.leg.br\0"
-"\xc3\xa5l.no\0web.za\0"
-"yasu.shiga.jp\0"
-"pu.it\0wnext.app\0"
-"ide.kyoto.jp\0jelastic.regruhosting.ru\0"
-"pagespeedmobilizer.com\0"
-"kamifurano.hokkaido.jp\0hidaka.kochi.jp\0photography.museum\0"
-"ichinomiya.chiba.jp\0"
-"soka.saitama.jp\0"
-"onomichi.hiroshima.jp\0leangaviika.no\0"
-"veterinaire.fr\0meeres.museum\0"
-"larsson.museum\0nordkapp.no\0us-gov-west-1.elasticbeanstalk.com\0internet-dns.de\0"
-"kawanabe.kagoshima.jp\0gg.ax\0"
-"friuli-vgiulia.it\0"
-"mining.museum\0food\0"
-"is-very-bad.org\0"
-"abkhazia.su\0"
-"kamikawa.saitama.jp\0"
-"yuasa.wakayama.jp\0si.eu.org\0"
-"aviation.museum\0"
-"photo\0conf.se\0"
+"fin.ec\0mishima.fukushima.jp\0nesseby.no\0framercanvas.com\0"
+"gea\0"
+"ftr\0xihuan\0"
+"fujimi.nagano.jp\0"
+"ss.it\0"
+"fed.us\0"
+"in-brb.de\0"
+"ringsaker.no\0"
+"or.pw\0"
+"fun\0"
+"wallonie.museum\0"
+"edgeapp.net\0"
+"yabuki.fukushima.jp\0"
+"bajddar.no\0"
+"higashi.fukuoka.jp\0vestvagoy.no\0"
+"art.museum\0"
+"df.gov.br\0"
+"florence.it\0miasa.nagano.jp\0"
+"viking.museum\0cc.al.us\0"
+"hinode.tokyo.jp\0"
+"shikaoi.hokkaido.jp\0"
+"hi.us\0"
+"loginline.site\0serveminecraft.net\0"
+"kakuda.miyagi.jp\0"
+"quebec\0"
+"webhop.biz\0cloudapp.net\0"
+"hioki.kagoshima.jp\0is-an-engineer.com\0eu-4.evennode.com\0"
+"wpmucdn.com\0"
+"gallo\0"
+"eng.pro\0"
+"s\xc3\xb8r-fron.no\0"
+"dyndns-remote.com\0"
+"boston\0kosher\0"
+"co.business\0"
+"ina.nagano.jp\0eu-west-3.elasticbeanstalk.com\0"
+"from-az.net\0"
+"szczecin.pl\0leczna.pl\0"
+"potager.org\0"
+"ringerike.no\0or.th\0"
+"barrel-of-knowledge.info\0"
+"kaszuby.pl\0"
+"\xed\x95\x9c\xea\xb5\xad\0map.fastly.net\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0chiyoda.gunma.jp\0misugi.mie.jp\0mcdir.ru\0"
+"k12.ca.us\0"
+"delaware.museum\0fyi\0"
+"bsb.br\0or.ug\0es.ax\0"
+"gemological.museum\0"
+"ashiya.fukuoka.jp\0notogawa.shiga.jp\0or.tz\0"
+"prudential\0"
+"usgarden.museum\0yolasite.com\0"
+"maizuru.kyoto.jp\0lib.vt.us\0"
+"leasing.aero\0ayase.kanagawa.jp\0settlement.museum\0"
+"or.us\0"
+"fuchu.tokyo.jp\0cityeats\0"
+"ar.it\0"
+"shikatsu.aichi.jp\0"
+"miyota.nagano.jp\0"
+"fauske.no\0"
+"mc.it\0alstahaug.no\0eu-3.evennode.com\0"
+"matsudo.chiba.jp\0"
+"oirase.aomori.jp\0furudono.fukushima.jp\0satosho.okayama.jp\0"
+"kanagawa.jp\0"
+"villas\0"
+"yokoshibahikari.chiba.jp\0"
+"gle\0"
+"campinagrande.br\0london.museum\0"
+"nord-aurdal.no\0vegarshei.no\0"
+"bulsan-sudtirol.it\0"
+"valle-d-aosta.it\0"
+"nz.basketball\0"
+"umaji.kochi.jp\0"
+"matsusaka.mie.jp\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0"
+"gulen.no\0"
+"kanra.gunma.jp\0holtalen.no\0"
+"selfip.net\0is.eu.org\0"
+"naturhistorisches.museum\0"
+"inami.wakayama.jp\0kvinesdal.no\0gmo\0is-an-actor.com\0"
+"saitama.jp\0l\xc3\xa6rdal.no\0"
+"q-a.eu.org\0"
+"sa.gov.au\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0uwu.ai\0trycloudflare.com\0"
+"m\xc3\xa5lselv.no\0wphostedmail.com\0"
+"gmx\0"
+"ashikaga.tochigi.jp\0"
+"hara.nagano.jp\0kusu.oita.jp\0"
+"kumakogen.ehime.jp\0kakogawa.hyogo.jp\0"
+"v\xc3\xa1rgg\xc3\xa1t.no\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0"
+"to.leg.br\0"
+"warszawa.pl\0"
+"hatsukaichi.hiroshima.jp\0"
+"elburg.museum\0"
+"\xe6\x97\xb6\xe5\xb0\x9a\0"
+"yanaizu.fukushima.jp\0"
+"eu-2.evennode.com\0"
+"conf.au\0it.eu.org\0ddnslive.com\0"
+"inzai.chiba.jp\0shika.ishikawa.jp\0"
+"chintai\0herokussl.com\0"
+"karate.museum\0"
+"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0"
+"it.ao\0goo\0hepforge.org\0"
+"crew.aero\0gop\0*.owo.codes\0"
+"localhost.daplie.me\0"
+"\xe7\xae\x87\xe4\xba\xba.hk\0scholarships\0"
+"got\0"
+"otoineppu.hokkaido.jp\0"
+"gov\0rauma.no\0apartments\0vladimir.su\0"
+"bokn.no\0"
+"palmas.br\0novara.it\0ghost.io\0serveftp.com\0"
+"rr.gov.br\0"
+"engine.aero\0games\0"
+"s3-ca-central-1.amazonaws.com\0"
+"duck\0"
+"trentino-stirol.it\0bryansk.su\0"
+"fc.it\0suita.osaka.jp\0arakawa.saitama.jp\0gop.pk\0cafe\0myeffect.net\0"
+"forgeblocks.com\0"
+"midtre-gauldal.no\0crd.co\0"
+"pt.it\0"
+"kumejima.okinawa.jp\0kahoku.yamagata.jp\0"
+"eastcoast.museum\0drayddns.com\0"
+"kpmg\0"
+"ind.br\0dyndns-work.com\0"
+"kawai.iwate.jp\0"
+"hzc.io\0"
+"verbania.it\0dst.mi.us\0"
+"chikuma.nagano.jp\0homelink.one\0"
+"rs.gov.br\0sc.gov.br\0hbo\0"
+"k12.ct.us\0"
+"assn.lk\0jewish.museum\0vladimir.ru\0"
+"es.kr\0netbank\0eu-1.evennode.com\0"
+"kure.hiroshima.jp\0jolster.no\0siellak.no\0in.eu.org\0"
+"tsuyama.okayama.jp\0komvux.se\0"
+"asahi.toyama.jp\0"
+"czeladz.pl\0"
+"sirdal.no\0"
+"cc.in.us\0"
"jerusalem.museum\0"
-"sakuho.nagano.jp\0"
-"skole.museum\0"
-"can.museum\0dealer\0"
-"ohtawara.tochigi.jp\0"
-"!www.ck\0vn.ua\0"
-"osakikamijima.hiroshima.jp\0"
-"aogashima.tokyo.jp\0"
-"g\xc3\xa1\xc5\x8bgaviika.no\0"
-"lahppi.no\0"
-"orangecloud.tn\0"
-"sydney.museum\0"
-"inc\0spb.ru\0"
-"oiso.kanagawa.jp\0ee.eu.org\0"
-"presse.km\0ri.us\0"
-"missile.museum\0ing\0"
-"mt.us\0nd.us\0paris.eu.org\0"
-"slz.br\0shibata.niigata.jp\0irish\0"
-"ink\0"
-"ford\0"
-"sells-for-less.com\0"
+"diskstation.me\0"
+"za.com\0rdv.to\0"
+"fin.tn\0"
+"c66.me\0"
+"synology.me\0"
+"toyotomi.hokkaido.jp\0griw.gov.pl\0"
+"diskstation.eu\0"
+"ebetsu.hokkaido.jp\0midatlantic.museum\0"
+"saroma.hokkaido.jp\0kerrylogistics\0"
+"hoylandet.no\0ostroda.pl\0"
+"yamakita.kanagawa.jp\0"
+"group.aero\0"
+"k12.al.us\0"
+"is-a-llama.com\0"
+"beskidy.pl\0"
+"lib.id.us\0"
+"town\0"
+"imdb\0"
+"ar.us\0paas.massivegrid.com\0"
+"otsuki.kochi.jp\0oyer.no\0"
+"hakodate.hokkaido.jp\0"
+"sobetsu.hokkaido.jp\0gift\0"
+"trentinos-tirol.it\0saka.hiroshima.jp\0"
+"*.nom.br\0ind.gt\0ishikawa.jp\0"
+"mihama.wakayama.jp\0"
+"museet.museum\0"
+"call\0corsica\0"
+"tananger.no\0stord.no\0parliament.nz\0"
+"ascoli-piceno.it\0bitbridge.net\0"
+"nflfan.org\0"
+"afjord.no\0"
+"masaki.ehime.jp\0"
+"rn.gov.br\0toys\0"
+"nagawa.nagano.jp\0"
+"ind.in\0akagi.shimane.jp\0camp\0"
+"fukudomi.saga.jp\0skierv\xc3\xa1.no\0"
+"kl\xc3\xa6""bu.no\0"
+"vinnica.ua\0lib.fl.us\0"
+"minamiaiki.nagano.jp\0lubin.pl\0"
+"nes.akershus.no\0"
+"lazio.it\0shinjo.okayama.jp\0aaa.pro\0"
+"vallee-aoste.it\0gangaviika.no\0"
+"amusement.aero\0"
+"s3-website-eu-west-1.amazonaws.com\0"
+"hiv\0"
+"cartoonart.museum\0"
+"otaki.nagano.jp\0"
+"cc.mo.us\0"
+"ro.gov.br\0"
+"kudoyama.wakayama.jp\0"
+"d.bg\0"
+"dnsupdater.de\0"
+"r\xc3\xa1isa.no\0appspacehosted.com\0"
+"koga.ibaraki.jp\0"
+"\xe3\x82\xb3\xe3\x83\xa0\0"
+"varese.it\0ind.kw\0bamble.no\0"
+"uwu.nu\0"
+"\xe5\x85\xb5\xe5\xba\xab.jp\0samsung\0"
+"poivron.org\0"
+"hkt\0"
+"ena.gifu.jp\0"
+"morioka.iwate.jp\0"
+"friuli-ve-giulia.it\0"
+"esp.br\0yonago.tottori.jp\0"
+"sakaki.nagano.jp\0"
+"kristiansund.no\0"
+"vantaa.museum\0"
+"\xc3\xa1k\xc5\x8boluokta.no\0"
+"kagamino.okayama.jp\0"
+"nanao.ishikawa.jp\0frosta.no\0"
+"lib.me.us\0"
+"omasvuotna.no\0"
+"hasami.nagasaki.jp\0"
+"ogimi.okinawa.jp\0"
+"kongsvinger.no\0careers\0"
+"care\0george\0s3-fips-us-gov-west-1.amazonaws.com\0"
+"sciencecenter.museum\0"
+"static-access.net\0"
+"qa2.com\0"
+"gallery\0"
+"gokase.miyazaki.jp\0"
+"pics\0"
+"mysecuritycamera.com\0"
+"shimamoto.osaka.jp\0"
+"bananarepublic\0casa\0jele.io\0"
+"bt.it\0cc.tx.us\0customer.enonic.io\0"
+"cars\0rackmaze.net\0"
+"case\0"
+"bahcavuotna.no\0"
+"cymru.museum\0cash\0filegear-au.me\0github.io\0"
+"holt\xc3\xa5len.no\0"
+"yamada.toyama.jp\0lviv.ua\0"
+"primetel.cloud\0"
+"dvag\0"
+"services\0"
+"luster.no\0"
+"valleaosta.it\0naturbruksgymn.se\0"
+"trentin-s\xc3\xbc""dtirol.it\0"
+"tatar\0"
+"ne.jp\0"
+"kuwana.mie.jp\0"
+"hoteles\0"
+"varggat.no\0alpha-myqnapcloud.com\0"
+"ne.ke\0valley.museum\0"
+"air-surveillance.aero\0"
+"higashiura.aichi.jp\0"
+"bjark\xc3\xb8y.no\0"
+"hot\0"
+"trafficplex.cloud\0draydns.de\0"
+"oharu.aichi.jp\0"
+"how\0mytuleap.com\0"
+"oceanographic.museum\0kmpsp.gov.pl\0immo\0conf.se\0"
+"coupon\0"
+"clinton.museum\0cruises\0"
+"american.museum\0gmail\0"
+"ne.kr\0"
+"asakawa.fukushima.jp\0"
+"harima.hyogo.jp\0artanddesign.museum\0kvafjord.no\0sand\xc3\xb8y.no\0"
+"balsan-suedtirol.it\0philadelphia.museum\0"
+"toyokawa.aichi.jp\0"
+"osakasayama.osaka.jp\0my-firewall.org\0"
+"sanjo.niigata.jp\0"
+"forlicesena.it\0"
+"naganohara.gunma.jp\0"
+"rzgw.gov.pl\0"
+"volda.no\0"
+"hiphop\0ibm\0"
+"\xe6\xbb\x8b\xe8\xb3\x80.jp\0gs.va.no\0volkswagen\0"
+"realtor\0"
+"ruovat.no\0"
+"de.cool\0"
+"iwaki.fukushima.jp\0"
+"land\0"
+"nishiaizu.fukushima.jp\0ice\0"
+"yao.osaka.jp\0"
+"bmd.br\0meland.no\0"
+"perso.ht\0"
+"lebork.pl\0"
+"se.net\0ru.net\0"
+"nesoddtangen.no\0"
+"matsue.shimane.jp\0"
+"lib.pr.us\0viajes\0"
+"shiojiri.nagano.jp\0suwa.nagano.jp\0hapmir.no\0wlocl.pl\0"
+"kutchan.hokkaido.jp\0"
+"shibata.niigata.jp\0"
+"ind.tn\0"
+"icu\0"
+"now-dns.top\0"
+"spb.ru\0"
+"niigata.jp\0yamagata.yamagata.jp\0cc.nh.us\0"
+"arakawa.tokyo.jp\0"
+"hachioji.tokyo.jp\0vpndns.net\0"
+"nishihara.kumamoto.jp\0"
+"lahppi.no\0filegear-ie.me\0"
+"coffee\0"
+"m.bg\0"
+"ge.it\0*.nodebalancer.linode.com\0"
+"monzabrianza.it\0"
"spb.su\0"
+"inami.toyama.jp\0shirahama.wakayama.jp\0"
+"fresenius\0"
+"c.cdn77.org\0"
+"donostia.museum\0"
+"ne.pw\0"
+"eti.br\0"
+"*.stgstage.dev\0"
+"from-in.com\0"
+"oshino.yamanashi.jp\0fitjar.no\0"
+"genting\0s3-eu-west-1.amazonaws.com\0"
+"rmit\0"
+"chanel\0"
+"hanggliding.aero\0"
+"badaddja.no\0"
+"ozu.kumamoto.jp\0ifm\0"
+"se.gov.br\0"
+"desa.id\0lib.nj.us\0"
+"ambulance.aero\0ogi.saga.jp\0"
+"botany.museum\0"
+"ulm.museum\0fl.us\0deals\0olayan\0onza.mythic-beasts.com\0"
+"sar.it\0"
+"fnwk.site\0"
+"servegame.com\0"
+"aosta.it\0f\xc3\xb8rde.no\0"
+"\xe4\xb8\xad\xe4\xbf\xa1\0"
+"kwp.gov.pl\0servebbs.org\0blogsite.xyz\0"
+"5.bg\0dvrdns.org\0"
+"cc.va.us\0"
+"komoro.nagano.jp\0"
+"biev\xc3\xa1t.no\0ping\0"
+"noticias.bo\0wada.nagano.jp\0j.layershift.co.uk\0"
+"isehara.kanagawa.jp\0assassination.museum\0assisi.museum\0"
+"publ.pt\0pink\0"
+"cesena-forl\xc3\xac.it\0mantova.it\0"
+"togakushi.nagano.jp\0family.museum\0"
+"kadoma.osaka.jp\0"
+"krym.ua\0"
+"yawatahama.ehime.jp\0gyokuto.kumamoto.jp\0*.azurecontainer.io\0"
+"info\0"
+"uki.kumamoto.jp\0"
+"bas.it\0minamisanriku.miyagi.jp\0"
+"\xe4\xb8\x96\xe7\x95\x8c\0"
+"og.ao\0brumunddal.no\0ne.ug\0"
+"kred\0"
+"ne.tz\0"
+"nakagyo.kyoto.jp\0"
+"toho.fukuoka.jp\0conf.lv\0"
+"obanazawa.yamagata.jp\0"
+"kamikoani.akita.jp\0plaza.museum\0lowicz.pl\0ne.us\0"
+"baltimore.museum\0"
+"servepics.com\0"
+"shichinohe.aomori.jp\0dyndns-blog.com\0"
+"cc.ri.us\0"
+"amakusa.kumamoto.jp\0weir\0"
+"national.museum\0"
+"takanezawa.tochigi.jp\0"
+"hino.tottori.jp\0cherkasy.ua\0wnext.app\0"
+"chita.aichi.jp\0"
+"minamimaki.nagano.jp\0"
+"gjesdal.no\0"
+"nagasaki.nagasaki.jp\0ibara.okayama.jp\0"
+"saikai.nagasaki.jp\0"
+"khmelnitskiy.ua\0firestone\0"
+"d.se\0"
+"platterp.us\0"
+"ba.gov.br\0"
+"hikone.shiga.jp\0sa.gov.pl\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0"
+"tas.gov.au\0nagiso.nagano.jp\0"
+"fujisawa.kanagawa.jp\0reserve-online.com\0"
+"flowers\0"
+"ask\xc3\xb8y.no\0"
+"napoli.it\0"
+"yoshimi.saitama.jp\0broadcast.museum\0feedback\0"
+"yamagata.nagano.jp\0cloudsite.builders\0"
+"cbre\0"
+"s3-us-east-2.amazonaws.com\0"
+"tomioka.gunma.jp\0"
+"sciencehistory.museum\0"
+"mihara.hiroshima.jp\0is-leet.com\0"
+"inc\0"
+"wajiki.tokushima.jp\0"
+"dev.static.land\0"
+"space\0"
+"niteroi.br\0setouchi.okayama.jp\0cooking\0ing\0"
+"ngrok.io\0"
+"ink\0"
+"v.bg\0"
+"arendal.no\0"
+"ro.im\0mein-iserv.de\0tcp4.me\0"
+"nissedal.no\0"
+"nogata.fukuoka.jp\0takehara.hiroshima.jp\0"
+"kafjord.no\0"
"int\0"
-"suita.osaka.jp\0"
-"etnedal.no\0"
-"carbonia-iglesias.it\0total\0"
-"ina.nagano.jp\0cadaques.museum\0cc.pr.us\0hasura-app.io\0"
-"notaires.km\0"
-"qsl.br\0chiryu.aichi.jp\0"
-"kopervik.no\0"
-"porsgrunn.no\0k12.tx.us\0"
-"trentinosud-tirol.it\0giske.no\0"
-"cc.dc.us\0"
-"mashiki.kumamoto.jp\0k12.pa.us\0design\0"
-"presse.ml\0narviika.no\0s\xc3\xb8rum.no\0"
-"poker\0sk.eu.org\0"
-"mytis.ru\0"
-"selbu.no\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0"
-"sciencesnaturelles.museum\0datsun\0"
-"hasura.app\0"
-"newholland\0yolasite.com\0"
-"nombre.bo\0strand.no\0"
-"for.mom\0"
-"kanra.gunma.jp\0"
-"yamaguchi.jp\0"
-"tsuno.miyazaki.jp\0"
-"shintomi.miyazaki.jp\0"
-"sakahogi.gifu.jp\0"
-"kaho.fukuoka.jp\0haebaru.okinawa.jp\0"
-"somna.no\0"
-"kuokgroup\0"
-"kitakata.miyazaki.jp\0"
-"sv.it\0sandnes.no\0"
-"pa.it\0"
+"ro.it\0e12.ve\0from-wa.com\0"
+"pt.eu.org\0"
+"control.aero\0discovery.museum\0ssl.origin.cdn77-secure.org\0"
+"news\0"
+"klepp.no\0"
+"gosen.niigata.jp\0"
+"freetls.fastly.net\0"
+"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0"
+"ybo.review\0"
+"ap-southeast-2.elasticbeanstalk.com\0"
+"it1.eur.aruba.jenv-aruba.cloud\0"
+"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0"
+"kiryu.gunma.jp\0"
+"next\0hk.org\0"
+"ohkura.yamagata.jp\0lib.ms.us\0lib.nc.us\0"
+"nirasaki.yamanashi.jp\0hareid.no\0l-o-g-i-n.de\0"
+"eu.platform.sh\0"
+"vision\0"
+"frana.no\0"
+"daito.osaka.jp\0selfip.org\0forumz.info\0"
+"ryokami.saitama.jp\0"
+"gildeskal.no\0paroch.k12.ma.us\0"
+"schwarz\0"
+"dscloud.me\0"
+"myftp.biz\0"
+"toda.saitama.jp\0ichiba.tokushima.jp\0pfizer\0"
+"drud.io\0"
+"modena.it\0og.it\0aogaki.hyogo.jp\0"
+"chungbuk.kr\0"
+"sh.cn\0"
+"charter.aero\0"
+"fastly-terrarium.com\0"
+"\xe6\xa0\x83\xe6\x9c\xa8.jp\0"
+"higashimurayama.tokyo.jp\0"
"jcb\0"
-"lancashire.museum\0jambyl.su\0"
-"a\xc3\xa9roport.ci\0ama.shimane.jp\0eurovision\0from-nm.com\0game-host.org\0"
-"trentino-stirol.it\0exeter.museum\0"
-"br.it\0cb.it\0"
-"sauherad.no\0"
-"alto-adige.it\0misato.saitama.jp\0vision\0"
-"osasco.br\0"
-"usantiques.museum\0"
-"es.ax\0"
-"higashikagawa.kagawa.jp\0surf\0"
-"skedsmo.no\0"
-"tananger.no\0evenes.no\0ist\0is-a-financialadvisor.com\0"
-"ru.eu.org\0se.eu.org\0"
-"dep.no\0"
-"skydiving.aero\0"
-"nm.cn\0"
-"council.aero\0"
-"os.hordaland.no\0"
-"credit\0cya.gg\0"
+"sigdal.no\0"
+"r\xc3\xa6lingen.no\0localzone.xyz\0"
+"emergency.aero\0"
+"krodsherad.no\0"
+"sondre-land.no\0wegrow.pl\0"
+"nakayama.yamagata.jp\0"
+"sanofi\0"
+"dynns.com\0"
+"uchinada.ishikawa.jp\0"
+"ist\0"
+"tamatsukuri.ibaraki.jp\0"
+"am.gov.br\0"
+"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0"
+"scrapper-site.net\0"
+"time.no\0"
+"fuchu.hiroshima.jp\0\xc3\xa5lg\xc3\xa5rd.no\0family\0here-for-more.info\0"
+"kouzushima.tokyo.jp\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0"
+"aerodrome.aero\0"
+"higashichichibu.saitama.jp\0"
+"parliament.cy\0zama.kanagawa.jp\0rj.leg.br\0"
+"saijo.ehime.jp\0lcube-server.de\0"
+"gs.aa.no\0"
"itv\0"
-"omigawa.chiba.jp\0"
-"rsc.cdn77.org\0pantheonsite.io\0"
-"suli.hu\0gifu.jp\0"
-"tahara.aichi.jp\0"
-"nhlfan.net\0"
-"*.alces.network\0"
-"philadelphiaarea.museum\0cv.ua\0sells-for-u.com\0"
-"higashisumiyoshi.osaka.jp\0"
-"nagawa.nagano.jp\0"
-"barsy.mobi\0"
-"conf.lv\0"
-"kiyose.tokyo.jp\0"
-"press.museum\0"
-"hiroshima.jp\0"
-"kumiyama.kyoto.jp\0psse.gov.pl\0"
-"bialystok.pl\0teva\0"
-"lamer\0"
-"tagami.niigata.jp\0"
-"from-md.com\0"
-"kikuchi.kumamoto.jp\0educational.museum\0"
-"pulawy.pl\0build\0"
-"ent.platform.sh\0"
-"s.se\0"
-"eniwa.hokkaido.jp\0now-dns.org\0"
-"ternopil.ua\0passagens\0"
-"\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0"
-"north-kazakhstan.su\0"
-"hurum.no\0"
-"*.oci.customer-oci.com\0"
-"natal.br\0"
-"poltava.ua\0"
-"komae.tokyo.jp\0"
-"yukuhashi.fukuoka.jp\0"
-"dynamic-dns.info\0"
-"baidu\0northwesternmutual\0"
-"cat.ax\0"
+"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0"
+"yoshikawa.saitama.jp\0natuurwetenschappen.museum\0nebraska.museum\0"
+"m.se\0"
+"aeroport.fr\0iijima.nagano.jp\0jcloud-ver-jpc.ik-server.com\0*.cloud.metacentrum.cz\0"
+"incheon.kr\0tokyo\0\xe5\xae\xb6\xe9\x9b\xbb\0"
+"marylhurst.museum\0perso.sn\0"
+"katowice.pl\0"
+"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
+"higashikagawa.kagawa.jp\0is-a-bookkeeper.com\0"
+"nohost.me\0"
+"hatogaya.saitama.jp\0linz.museum\0"
+"jan-mayen.no\0"
+"tsugaru.aomori.jp\0"
+"vall\xc3\xa9""e-aoste.it\0"
+"from-tx.com\0"
+"perso.tn\0"
+"fst.br\0"
+"odo.br\0"
+"sicilia.it\0ariake.saga.jp\0\xe8\x87\xba\xe7\x81\xa3\0"
+"csx.cc\0"
+"fujioka.gunma.jp\0telekommunikation.museum\0"
+"grandrapids.museum\0"
+"konin.pl\0"
+"kamikitayama.nara.jp\0"
+"taketomi.okinawa.jp\0"
+"shichikashuku.miyagi.jp\0"
+"capebreton.museum\0"
+"securitytactics.com\0"
+"satte.saitama.jp\0jdevcloud.com\0"
+"dscloud.biz\0"
+"cranbrook.museum\0balestrand.no\0snasa.no\0"
+"omachi.saga.jp\0jio\0"
+"tbits.me\0"
+"loten.no\0fedorapeople.org\0"
+"tran\xc3\xb8y.no\0church\0"
+"aquila.it\0"
+"ap.gov.br\0lib.oh.us\0"
+"plants.museum\0"
+"showa.fukushima.jp\0shintomi.miyazaki.jp\0df.leg.br\0"
+"wiki.bo\0arts.co\0wakasa.tottori.jp\0"
+"ookuwa.nagano.jp\0"
+"wiki.br\0"
+"leitungsen.de\0"
+"azumino.nagano.jp\0suwalki.pl\0"
+"curitiba.br\0"
+"georgia.museum\0"
+"zoological.museum\0"
+"cieszyn.pl\0mycd.eu\0"
+"hita.oita.jp\0"
+"fujishiro.ibaraki.jp\0minami.kyoto.jp\0"
+"medizinhistorisches.museum\0"
+"iiyama.nagano.jp\0"
+"ap.gov.pl\0"
+"lab.ms\0"
+"ikeda.hokkaido.jp\0cv.ua\0"
+"matsuura.nagasaki.jp\0jll\0"
+"aostavalley.it\0norddal.no\0"
+"emr.it\0nationalheritage.museum\0"
+"kita.osaka.jp\0*.cns.joyent.com\0"
+"m\xc3\xa1latvuopmi.no\0"
+"omiya.saitama.jp\0"
+"oksnes.no\0"
+"nishikatsura.yamanashi.jp\0"
+"jmp\0"
+"fuel.aero\0"
+"lib.va.us\0"
+"xen.prgmr.com\0"
+"community\0"
+"jnj\0drud.us\0"
+"ag.it\0"
+"yokaichiba.chiba.jp\0"
+"genova.it\0"
+"katano.osaka.jp\0drive\0"
+"rns.tn\0"
+"jc.neen.it\0"
+"localhistory.museum\0"
+"asn.au\0hisayama.fukuoka.jp\0"
+"internet-dns.de\0north-kazakhstan.su\0"
+"shirataka.yamagata.jp\0"
+"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0yuzawa.niigata.jp\0"
+"toba.mie.jp\0hirogawa.wakayama.jp\0"
+"dinosaur.museum\0"
+"british.museum\0jot\0"
+"neko.am\0"
+"s3.eu-central-1.amazonaws.com\0*.dapps.earth\0"
+"otsuki.yamanashi.jp\0berlin.museum\0pomorskie.pl\0"
+"joy\0"
+"miyako.fukuoka.jp\0ninomiya.kanagawa.jp\0lebesby.no\0"
+"dyr\xc3\xb8y.no\0"
+"sakae.nagano.jp\0touch.museum\0lublin.pl\0"
+"nagato.yamaguchi.jp\0"
+"firewall-gateway.de\0"
+"tonosho.kagawa.jp\0grue.no\0"
+"firewall-gateway.com\0"
+"nanbu.yamanashi.jp\0hdfcbank\0"
+"v.ua\0"
+"kiyosato.hokkaido.jp\0"
+"tuscany.it\0mugi.tokushima.jp\0tromsa.no\0"
+"nanporo.hokkaido.jp\0showa.yamanashi.jp\0"
+"shimoichi.nara.jp\0okinawa.okinawa.jp\0school.na\0"
+"lel.br\0"
+"linkyard.cloud\0"
+"imabari.ehime.jp\0fhs.no\0"
+"minamiawaji.hyogo.jp\0"
+"commune.am\0"
+"hashima.gifu.jp\0toyako.hokkaido.jp\0uscountryestate.museum\0tourism.tn\0"
"mochizuki.nagano.jp\0"
-"repbody.aero\0jio\0"
-"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0nordeste-idc.saveincloud.net\0"
-"timekeeping.museum\0verran.no\0iopsys.se\0"
-"trentino-a-adige.it\0shimonoseki.yamaguchi.jp\0"
-"bhz.br\0doctor\0"
-"api.stdlib.com\0"
-"archaeological.museum\0"
-"higashiomi.shiga.jp\0"
-"app.br\0skj\xc3\xa5k.no\0visa\0pubtls.org\0"
-"ce.gov.br\0!city.kawasaki.jp\0"
-"nanao.ishikawa.jp\0ninja\0"
-"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0"
-"zakopane.pl\0"
-"bike\0us.ax\0"
-"children.museum\0"
-"fc.it\0l\xc3\xa6rdal.no\0"
-"id.au\0an.it\0otari.nagano.jp\0"
-"piedmont.it\0"
-"flesberg.no\0tashkent.su\0al.leg.br\0"
-"dentist\0"
-"group.aero\0"
-"\xe9\x9b\x86\xe5\x9b\xa2\0ilovecollege.info\0"
-"jll\0"
-"sa.edu.au\0"
-"marugame.kagawa.jp\0v\xc3\xa5gan.no\0"
-"horonobe.hokkaido.jp\0"
-"yonaguni.okinawa.jp\0"
-"incheon.kr\0rost.no\0"
-"\xe5\xa5\x88\xe8\x89\xaf.jp\0"
-"katano.osaka.jp\0"
-"vet.br\0"
-"dali.museum\0"
-"trentinsudtirol.it\0"
-"school.museum\0"
-"es.kr\0game.tw\0"
-"jab.br\0skodje.no\0"
-"siena.it\0fentiger.mythic-beasts.com\0"
-"jmp\0viva\0"
-"a.prod.fastly.net\0"
-"santacruz.museum\0"
-"university.museum\0"
-"hakone.kanagawa.jp\0"
-"ac\0kharkov.ua\0jnj\0homeoffice.gov.uk\0"
-"ad\0bing\0"
-"ae\0jevnaker.no\0"
-"accident-investigation.aero\0af\0saitama.saitama.jp\0"
-"ag\0vivo\0"
-"togane.chiba.jp\0"
-"ai\0pa.us\0"
-"alp1.ae.flow.ch\0"
-"westeurope.azurestaticapps.net\0"
-"al\0"
-"am\0obanazawa.yamagata.jp\0report\0forgot.her.name\0"
-"ao\0kurotaki.nara.jp\0"
+"ta.it\0trade\0"
+"sugito.saitama.jp\0"
+"stadt.museum\0"
+"iwama.ibaraki.jp\0"
+"gs.st.no\0is-a-anarchist.com\0"
+"school.nz\0"
+"nordre-land.no\0\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0appspaceusercontent.com\0a.ssl.fastly.net\0"
+"chungnam.kr\0"
+"aremark.no\0"
+"takarazuka.hyogo.jp\0gdynia.pl\0"
+"takahata.yamagata.jp\0voss.no\0"
+"mo-siemens.io\0"
+"kamisu.ibaraki.jp\0theater.museum\0"
+"dyn.cosidns.de\0"
+"sopot.pl\0"
+"xfinity\0from-pr.com\0"
+"trentino-aadige.it\0"
+"sula.no\0"
+"nextdirect\0cloud66.zone\0"
+"arts.ve\0rr.leg.br\0"
+"trana.no\0uy.com\0"
+"tmp.br\0hakata.fukuoka.jp\0"
+"psc.br\0"
+"pi.it\0"
+"matsuda.kanagawa.jp\0"
+"tj.cn\0oslo.no\0"
+"fra1-de.cloudjiffy.net\0"
+"venice.it\0"
+"kfh\0"
+"latrobe\0"
+"lima-city.de\0"
+"sorocaba.br\0balashov.su\0"
+"anthropology.museum\0impertrixcdn.com\0rs.leg.br\0sc.leg.br\0"
+"windows\0"
+"aprendemas.cl\0"
+"lib.ky.us\0is-into-cars.com\0"
+"vestby.no\0pymnt.uk\0"
+"fuji.shizuoka.jp\0"
+"naples.it\0"
+"kamikawa.hyogo.jp\0"
+"vibovalentia.it\0"
+"oy.lc\0"
+"kagami.kochi.jp\0kuroiso.tochigi.jp\0"
+"rankoshi.hokkaido.jp\0yuasa.wakayama.jp\0"
+"algard.no\0dielddanuorri.no\0"
+"communication.museum\0"
+"oldnavy\0"
+"ap.it\0*.sapporo.jp\0"
+"podhale.pl\0miami\0"
+"otago.museum\0"
+"kaita.hiroshima.jp\0lima-city.at\0"
+"bradesco\0"
+"gifu.gifu.jp\0"
+"toscana.it\0omaha.museum\0"
+"vikna.no\0"
+"garden.museum\0geelvinck.museum\0nittedal.no\0"
+"kitanakagusuku.okinawa.jp\0kia\0"
+"evenes.no\0"
+"s3.dualstack.ap-northeast-2.amazonaws.com\0"
+"oceanographique.museum\0"
+"arts.ro\0"
+"randaberg.no\0kim\0"
+"ac\0"
+"ad\0tenri.nara.jp\0lima-city.ch\0"
+"ae\0bryne.no\0"
+"af\0"
+"ag\0\xc3\xa5s.no\0"
+"ai\0"
+"asn.lv\0americanfamily\0"
+"al\0akkeshi.hokkaido.jp\0konan.shiga.jp\0"
+"am\0hotel.tz\0mmafan.biz\0"
+"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0ashoro.hokkaido.jp\0"
+"ao\0"
+"katsushika.tokyo.jp\0"
"aq\0ba\0"
"ar\0bb\0"
-"as\0amot.no\0"
-"at\0yaese.okinawa.jp\0"
-"au\0be\0"
-"bf\0miners.museum\0cc.vt.us\0"
-"aw\0bg\0app.gp\0"
+"as\0fbx-os.fr\0"
+"at\0"
+"au\0be\0date.fukushima.jp\0is-a-conservative.com\0"
+"bf\0"
+"aw\0bg\0eisenbahn.museum\0"
"ax\0bh\0"
-"bi\0sejny.pl\0"
-"az\0bj\0*.landing.myjino.ru\0"
-"cc.nj.us\0mydissent.net\0"
-"bm\0jot\0cn.eu.org\0"
-"bn\0walbrzych.pl\0"
-"bo\0botanicalgarden.museum\0"
-"daplie.me\0"
-"ca\0"
-"br\0joy\0"
-"bs\0cc\0hk.com\0"
+"bi\0artgallery.museum\0k12.vi.us\0"
+"az\0bj\0"
+"bm\0"
+"bn\0"
+"bo\0"
+"ca\0wi.us\0"
+"br\0"
+"bs\0cc\0eniwa.hokkaido.jp\0"
"bt\0cd\0"
-"7.bg\0shirako.chiba.jp\0biratori.hokkaido.jp\0tabayama.yamanashi.jp\0nittedal.no\0cc.ak.us\0"
"bv\0cf\0"
-"bw\0cg\0b\xc3\xa1hcavuotna.no\0l\xc3\xb8""dingen.no\0"
-"ch\0yamamoto.miyagi.jp\0"
-"by\0ci\0"
-"bz\0"
-"cl\0friuli-ve-giulia.it\0"
-"cm\0blogsyte.com\0"
-"cn\0"
+"bw\0cg\0netflix\0room\0"
+"ch\0"
+"by\0ci\0\xc3\xb8rsta.no\0"
+"bz\0kira.aichi.jp\0aurskog-h\xc3\xb8land.no\0"
+"cl\0play\0read-books.org\0"
+"cm\0state.museum\0monash\0"
+"cn\0gleeze.com\0fastvps.site\0"
"co\0"
-"pictet\0"
-"cr\0"
-"s\xc3\xa1l\xc3\xa1t.no\0"
-"cu\0de\0sakegawa.yamagata.jp\0science-fiction.museum\0sirdal.no\0"
-"cv\0"
-"cw\0kitaaiki.nagano.jp\0"
-"cx\0kakamigahara.gifu.jp\0"
-"cy\0"
-"cz\0dj\0kwp.gov.pl\0trafficplex.cloud\0"
-"dk\0fukushima.jp\0"
-"dm\0"
-"oketo.hokkaido.jp\0solund.no\0"
-"show.aero\0do\0meiwa.mie.jp\0"
-"kumano.hiroshima.jp\0"
-"ec\0crd.co\0"
-"teshikaga.hokkaido.jp\0"
-"ee\0"
-"liguria.it\0"
+"cr\0bari.it\0"
+"clock.museum\0"
+"gs.tm.no\0"
+"cu\0de\0nesodden.no\0\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0"
+"cv\0geek.nz\0rn.leg.br\0"
+"cw\0arts.nf\0flynnhosting.net\0"
+"cx\0towada.aomori.jp\0"
+"cy\0ubank\0"
+"cz\0dj\0leirvik.no\0"
+"dk\0"
+"higashiyama.kyoto.jp\0"
+"dm\0baidar.no\0"
+"copenhagen.museum\0hosp.uk\0"
+"do\0hikimi.shimane.jp\0"
+"onjuku.chiba.jp\0chino.nagano.jp\0"
+"cbg.ru\0"
+"ec\0"
+"skanland.no\0"
+"ee\0cc.as.us\0*.moonscale.io\0"
+"zoology.museum\0"
"eg\0"
-"is-saved.org\0"
+"kawanabe.kagoshima.jp\0computerhistory.museum\0nfshost.com\0"
+"chitose.hokkaido.jp\0"
"dz\0"
-"hemne.no\0"
-"tempio-olbia.it\0"
-"vc.it\0sabae.fukui.jp\0"
-"vall\xc3\xa9""eaoste.it\0iserv.dev\0"
-"livorno.it\0lib.me.us\0statebank\0"
-"stcgroup\0"
-"es\0krellian.net\0"
-"et\0mi.it\0tsubata.ishikawa.jp\0"
-"eu\0id.ir\0bergbau.museum\0"
-"oz.au\0lib.co.us\0"
-"watches\0"
-"fi\0fireweb.app\0"
-"fj\0"
-"fm\0"
-"gran.no\0"
-"fo\0palermo.it\0marker.no\0"
-"gon.pk\0"
-"ga\0us.kg\0"
+"ouda.nara.jp\0schokoladen.museum\0"
+"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0"
+"cc.md.us\0"
+"tourism.pl\0"
+"auto.pl\0"
+"ozora.hokkaido.jp\0"
+"es\0otsuka\0"
+"et\0"
+"eu\0"
+"r\xc3\xb8ros.no\0ro.leg.br\0"
+"inuyama.aichi.jp\0gon.pk\0"
+"mydatto.com\0"
+"fi\0komaki.aichi.jp\0"
+"fj\0fet.no\0"
+"fm\0crown\0"
+"fo\0"
+"pr.it\0"
+"ga\0nexus\0"
"fr\0gb\0"
-"gd\0vao.it\0vxl.sh\0"
-"ge\0online.museum\0"
-"gf\0myravendb.com\0"
-"gg\0"
+"semboku.akita.jp\0"
+"gd\0"
+"ge\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0members.linode.com\0"
+"gf\0"
+"gg\0vaksdal.no\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0"
"gh\0"
-"gi\0"
-"yurihonjo.akita.jp\0"
+"gi\0narashino.chiba.jp\0"
+"silk.museum\0"
+"hadano.kanagawa.jp\0"
"gl\0"
-"gm\0"
-"gn\0ono.fukui.jp\0"
-"gp\0"
-"gq\0onfabrica.com\0"
+"gm\0tsurugi.ishikawa.jp\0"
+"gn\0"
+"pvt.ge\0gp\0"
+"gq\0"
"gr\0"
-"gs\0museumcenter.museum\0"
+"gs\0pharmaciens.km\0kpn\0"
"gt\0"
-"gu\0jamison.museum\0"
-"gw\0"
-"balsan-s\xc3\xbc""dtirol.it\0"
-"gy\0sb.ua\0"
-"midatlantic.museum\0portal.museum\0"
-"presse.ci\0hk\0ogimi.okinawa.jp\0"
-"ibaraki.osaka.jp\0reviews\0"
-"hm\0anamizu.ishikawa.jp\0cy.eu.org\0"
-"hn\0"
-"settlement.museum\0"
-"kfh\0"
+"gu\0"
+"nationalfirearms.museum\0"
+"gw\0dattorelay.com\0"
+"gy\0"
+"kitchen\0"
+"hk\0k12.ny.us\0"
+"hm\0red.sv\0"
+"hn\0!city.sendai.jp\0shikokuchuo.ehime.jp\0hotel.lk\0"
+"cc.il.us\0"
+"filegear-sg.me\0"
+"recht.pro\0uk.com\0"
"hr\0"
-"airport.aero\0"
-"ht\0id\0"
-"crew.aero\0hu\0ie\0freetls.fastly.net\0"
-"eu.int\0"
-"id.lv\0"
-"plo.ps\0"
-"us.na\0storage\0"
-"il\0id.ly\0"
-"im\0shinyoshitomi.fukuoka.jp\0asahi.nagano.jp\0paris.museum\0"
-"in\0nm.us\0"
-"io\0iwakura.aichi.jp\0"
-"iq\0bashkiria.ru\0"
+"amscompute.com\0"
+"tur.ar\0ht\0id\0"
+"hu\0ie\0"
+"juniper\0"
+"bi.it\0nyc.museum\0"
+"krd\0lat\0git-pages.rit.edu\0"
+"ap-northeast-3.elasticbeanstalk.com\0"
+"il\0law\0\xd0\xba\xd0\xbe\xd0\xbc\0"
+"fj.cn\0im\0"
+"in\0edogawa.tokyo.jp\0"
+"io\0gmbh\0pythonanywhere.com\0"
+"iq\0\xc3\xa5lesund.no\0"
"ir\0"
"is\0"
-"it\0"
+"tur.br\0it\0"
"je\0"
-"os\xc3\xb8yro.no\0"
-"chikujo.fukuoka.jp\0mugi.tokushima.jp\0newyork.museum\0"
-"democrat\0fbxos.fr\0"
-"etne.no\0ieee\0"
-"cz.eu.org\0"
-"jo\0historicalsociety.museum\0bar.pro\0"
+"nativeamerican.museum\0"
+"yasu.shiga.jp\0"
+"potenza.it\0ono.fukushima.jp\0"
+"gotdns.org\0"
+"jeonnam.kr\0oregontrail.museum\0"
+"jo\0"
"jp\0"
-"bashkiria.su\0"
-"kaneyama.yamagata.jp\0"
-"naturalhistorymuseum.museum\0"
-"cc.ia.us\0fairwinds\0"
+"\xe6\x84\x9b\xe5\xaa\x9b.jp\0travel\0"
+"fukuyama.hiroshima.jp\0sdscloud.pl\0"
+"olsztyn.pl\0"
+"umb.it\0taipei\0"
"ke\0"
-"h.bg\0beppu.oita.jp\0kg\0is-into-games.com\0"
-"crown\0"
+"kg\0"
+"barsy.club\0""32-b.it\0"
"ki\0"
-"kia\0"
-"tsuruta.aomori.jp\0bradesco\0"
-"km\0"
-"kn\0jls-sto3.elastx.net\0"
-"abeno.osaka.jp\0"
-"kp\0blackfriday\0"
-"miyakonojo.miyazaki.jp\0la\0k12.dc.us\0"
-"nic.in\0kr\0lb\0stryn.no\0gliwice.pl\0"
-"lc\0iki.fi\0to.gt\0"
-"phoenix.museum\0"
-"museum\0ru.com\0"
-"newhampshire.museum\0kim\0"
-"ogawara.miyagi.jp\0kw\0lucerne.museum\0"
-"game\0"
-"ky\0li\0alwaysdata.net\0"
-"kz\0"
-"lk\0nord-aurdal.no\0"
-"badajoz.museum\0gloppen.no\0dk.eu.org\0"
-"alsace\0selfip.biz\0\xd0\xba\xd0\xbe\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
-"ma\0center\0"
-"lr\0heimatunduhren.museum\0"
-"ls\0mc\0"
+"noboribetsu.hokkaido.jp\0syncloud.it\0"
+"trentins\xc3\xbc""d-tirol.it\0"
+"geo.br\0minamifurano.hokkaido.jp\0km\0"
+"kn\0"
+"kp\0"
+"\xe7\xbe\xa4\xe9\xa6\xac.jp\0la\0madrid\0staging.onred.one\0"
+"kr\0lb\0"
+"kunigami.okinawa.jp\0lc\0"
+"ma.us\0"
+"tromso.no\0mydobiss.com\0"
+"cci.fr\0tra.kp\0kw\0textile.museum\0"
+"kiso.nagano.jp\0lds\0"
+"ky\0li\0build\0"
+"des.br\0kz\0gaivuotna.no\0novecore.site\0"
+"lk\0"
+"temasek\0"
+"\xe9\x9d\x99\xe5\xb2\xa1.jp\0preservation.museum\0"
+"ma\0"
+"lr\0"
+"ls\0mc\0r\xc3\xa1hkker\xc3\xa1vju.no\0"
"lt\0md\0"
-"lu\0me\0"
+"lu\0me\0podlasie.pl\0homesecuritypc.com\0"
"lv\0"
-"mg\0uw.gov.pl\0smushcdn.com\0"
-"notaires.fr\0shikatsu.aichi.jp\0mh\0"
-"ly\0sucks\0"
-"mk\0"
-"ml\0tree.museum\0"
-"open\0"
-"mn\0santafe.museum\0filegear-ie.me\0"
-"iwaizumi.iwate.jp\0mo\0sm\xc3\xb8la.no\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0"
-"fukuoka.jp\0kamiichi.toyama.jp\0mp\0"
-"mq\0na\0"
+"kawajima.saitama.jp\0mg\0dallas.museum\0"
+"hotel.hu\0mh\0"
+"ly\0naturalhistory.museum\0"
+"ts.it\0plc.ly\0mk\0"
+"ml\0"
+"mn\0"
+"mo\0"
+"mp\0"
+"gliding.aero\0taishi.hyogo.jp\0mq\0na\0"
"mr\0"
-"to.it\0ms\0bilbao.museum\0nc\0lib.or.us\0"
-"kanazawa.ishikawa.jp\0mt\0instantcloud.cn\0"
-"minoh.osaka.jp\0kitayama.wakayama.jp\0mu\0ne\0"
-"mv\0nf\0vossevangen.no\0lib.ky.us\0"
-"mw\0ng\0"
-"mx\0"
-"le.it\0my\0ni\0"
-"mz\0"
-"v\xc3\xa5ler.hedmark.no\0"
-"nl\0x.mythic-beasts.com\0"
-"azumino.nagano.jp\0savannahga.museum\0"
+"minobu.yamanashi.jp\0ms\0anthro.museum\0nc\0augustow.pl\0"
+"mt\0hashbang.sh\0"
+"mu\0ne\0gs.oslo.no\0"
+"mv\0nf\0"
+"mw\0ng\0\xe8\xb4\xad\xe7\x89\xa9\0"
+"barreau.bj\0mx\0sklep.pl\0"
+"my\0ni\0"
+"kiyokawa.kanagawa.jp\0mz\0b\xc3\xa1jddar.no\0"
+"nl\0"
+"mibu.tochigi.jp\0partners\0"
+"opensocial.site\0"
"no\0"
-"s3-eu-west-2.amazonaws.com\0us.org\0"
-"trading.aero\0"
"nr\0"
-"leg.br\0servebeer.com\0"
-"sk.ca\0nu\0gdansk.pl\0"
-"communication.museum\0"
-"in-vpn.de\0"
-"app.os.fedoraproject.org\0"
-"nz\0mincom.tn\0locus\0"
-"from-nv.com\0"
-"snillfjord.no\0"
-"om\0"
-"of.by\0"
-"voagat.no\0pa\0"
-"krager\xc3\xb8.no\0"
-"dental\0"
-"pe\0"
-"pf\0"
-"murmansk.su\0"
-"ph\0mi.th\0"
-"kasai.hyogo.jp\0"
-"ishikawa.fukushima.jp\0pk\0"
-"niihama.ehime.jp\0pl\0"
-"pm\0de.eu.org\0"
-"pn\0"
+"ami.ibaraki.jp\0"
+"nu\0"
+"\xc3\xb8rskog.no\0"
+"travel.pl\0"
+"nz\0"
+"scienceandindustry.museum\0"
+"hachinohe.aomori.jp\0om\0"
+"western.museum\0"
+"pa\0"
+"b.bg\0money\0"
+"pe\0*.vps.myjino.ru\0"
+"kurogi.fukuoka.jp\0pf\0"
+"s3-website-ap-southeast-2.amazonaws.com\0"
+"vgs.no\0gs.fm.no\0ph\0redumbrella\0static.observableusercontent.com\0"
+"shimoda.shizuoka.jp\0uzs.gov.pl\0vodka\0"
+"cheltenham.museum\0pk\0foundation\0"
+"pl\0"
+"b.br\0taki.mie.jp\0pm\0"
+"\xe9\xab\x98\xe7\x9f\xa5.jp\0pn\0"
+"rybnik.pl\0"
"qa\0"
-"pr\0"
-"ps\0to.md\0"
+"pr\0kilatiron.com\0"
+"ps\0selfip.biz\0"
"pt\0"
-"aeroport.fr\0bungoono.oita.jp\0fishing\0istmein.de\0"
-"sakai.ibaraki.jp\0ine.kyoto.jp\0"
-"pw\0"
+"vercelli.it\0sue.fukuoka.jp\0ikeda.osaka.jp\0"
+"kin.okinawa.jp\0pw\0"
"py\0"
-"go.gov.br\0security\0"
-"bahn.museum\0"
-"actor\0"
-"teramo.it\0ishikawa.jp\0"
-"osakasayama.osaka.jp\0"
-"valledaosta.it\0"
-"edu.ac\0"
-"mi.us\0"
-"edu.af\0re\0"
-"molise.it\0id.us\0for.one\0"
-"allstate\0yokohama\0"
-"gallo\0"
-"natural.bo\0football\0"
-"edu.al\0*.on-rancher.cloud\0"
-"yonabaru.okinawa.jp\0"
-"ro\0remotewd.com\0"
-"edu.ba\0"
-"edu.ar\0edu.bb\0sa\0karacol.su\0"
-"sb\0"
-"rs\0sc\0copro.uk\0"
-"edu.au\0sd\0\xd7\xa7\xd7\x95\xd7\x9d\0"
-"ru\0se\0wales\0nh-serv.co.uk\0"
-"edu.bh\0rw\0sg\0kpn\0zsew.ru\0"
-"edu.bi\0sh\0tours\0"
-"edu.az\0turystyka.pl\0si\0"
-"loyalist.museum\0sj\0"
-"sk\0"
-"edu.bm\0sl\0"
-"edu.bn\0campidano-medio.it\0sm\0"
-"edu.bo\0abiko.chiba.jp\0sn\0"
-"so\0"
-"edu.br\0"
-"edu.bs\0sr\0from-ar.com\0"
-"edu.bt\0ss\0tc\0"
-"ulvik.no\0st\0td\0"
-"su\0"
-"narita.chiba.jp\0lubin.pl\0sv\0tf\0\xeb\x8b\xb7\xec\xbb\xb4\0"
-"tg\0"
-"edu.ci\0lakas.hu\0hamatonbetsu.hokkaido.jp\0judaica.museum\0sx\0th\0free\0"
-"edu.bz\0sy\0"
-"mil.ac\0sz\0tj\0"
-"tk\0"
-"mil.ae\0tl\0"
-"edu.cn\0tozsde.hu\0tm\0krd\0lat\0"
-"edu.co\0tn\0"
-"oizumi.gunma.jp\0to\0"
-"law\0"
-"ua\0"
-"tomika.gifu.jp\0tr\0"
-"mil.al\0"
-"edu.cu\0tt\0drive\0"
-"per.la\0"
-"edu.cw\0tv\0"
-"tw\0ug\0"
-"mil.ba\0"
-"mil.ar\0"
-"tz\0vuelos\0"
-"uk\0"
-"exchange.aero\0edu.dm\0shizukuishi.iwate.jp\0\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0s3.dualstack.us-east-1.amazonaws.com\0"
-"mashike.hokkaido.jp\0is-a-cubicle-slave.com\0githubusercontent.com\0"
-"edu.do\0nishi.fukuoka.jp\0"
-"mil.az\0va\0"
-"edu.ec\0user.aseinet.ne.jp\0"
-"kira.aichi.jp\0detroit.museum\0us\0vc\0"
-"edu.ee\0dedyn.io\0"
-"lib.sc.us\0ve\0"
-"mil.bo\0edu.eg\0tarui.gifu.jp\0"
+"kawanishi.nara.jp\0"
+"sodegaura.chiba.jp\0"
+"edu.ac\0sdn.gov.pl\0android\0"
+"agro.bo\0surrey.museum\0"
+"edu.af\0"
+"noda.chiba.jp\0"
+"re\0"
+"se.leg.br\0"
+"yachiyo.ibaraki.jp\0hu.com\0"
+"edu.al\0pioneer\0"
+"genoa.it\0"
+"nico\0"
+"gc.ca\0"
+"edu.ba\0agrar.hu\0"
+"edu.ar\0edu.bb\0"
+"sologne.museum\0ro\0pr.us\0"
+"*.bd\0nagatoro.saitama.jp\0"
+"edu.au\0sa\0"
+"yashio.saitama.jp\0sb\0aarp\0"
+"rs\0sc\0golffan.us\0"
+"edu.bh\0br.it\0cb.it\0mutsuzawa.chiba.jp\0sd\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0"
+"edu.bi\0ru\0se\0"
+"edu.az\0"
+"rw\0sg\0cloudapps.digital\0"
+"katsuura.chiba.jp\0sh\0llc\0"
+"edu.bm\0gs.bu.no\0si\0"
+"edu.bn\0sj\0"
+"edu.bo\0sk\0"
+"sl\0barefoot\0"
+"ms.it\0sm\0"
+"edu.br\0sn\0"
+"edu.bs\0so\0"
+"edu.bt\0j\xc3\xb8rpeland.no\0"
+"travel.tt\0"
+"sr\0"
+"ss\0tc\0"
+"st\0td\0lego\0"
+"edu.ci\0su\0llp\0adobeaemcloud.com\0"
+"edu.bz\0sv\0tf\0"
+"*.ck\0tg\0"
+"sx\0th\0"
+"sy\0"
+"edu.cn\0sz\0tj\0"
+"edu.co\0tk\0servebbs.com\0"
+"tl\0"
+"malatvuopmi.no\0tm\0weather\0"
+"ichikawamisato.yamanashi.jp\0tvedestrand.no\0tn\0"
+"to\0s3-us-gov-west-1.amazonaws.com\0"
+"trentin-suedtirol.it\0ina.ibaraki.jp\0"
+"edu.cu\0iyo.ehime.jp\0ua\0blogspot.co.at\0"
+"tr\0wanggou\0"
+"edu.cw\0onojo.fukuoka.jp\0simple-url.com\0"
+"sakae.chiba.jp\0tt\0"
+"tv\0"
+"tw\0ug\0cern\0"
+"inatsuki.fukuoka.jp\0"
+"edu.dm\0"
+"tz\0"
+"edu.do\0ms.kr\0uk\0"
+"yachiyo.chiba.jp\0iida.nagano.jp\0"
+"plc.uk\0farmers\0"
+"ibaraki.ibaraki.jp\0"
+"edu.ec\0honjo.saitama.jp\0"
+"edu.ee\0va\0"
+"edu.eg\0us\0vc\0"
+"ve\0"
+"nl.ca\0edu.dz\0"
"vg\0"
-"lib.nv.us\0school\0"
-"mil.br\0edu.dz\0uy\0vi\0"
-"ac.ae\0uz\0tiffany\0service.gov.uk\0"
-"of.je\0"
-"valer.ostfold.no\0"
-"karasuyama.tochigi.jp\0nic.tj\0vn\0"
-"uvic.museum\0"
-"mil.by\0osteroy.no\0rybnik.pl\0"
-"edu.es\0"
-"mil.cl\0edu.et\0"
-"bg.it\0ngo.lk\0"
-"mil.cn\0vu\0"
-"mil.co\0wf\0"
-"globo\0"
-"ac.at\0"
-"ac.be\0per.nf\0*.on-k3s.io\0"
-"nyc.mn\0"
-"edu.fm\0lds\0"
-"nb.ca\0"
-"naturalhistory.museum\0"
-"nhs.uk\0"
-"agematsu.nagano.jp\0kazimierz-dolny.pl\0"
-"edu.gd\0ws\0servepics.com\0"
-"edu.ge\0"
-"mil.do\0"
+"dnsking.ch\0"
+"urn.arpa\0namegawa.saitama.jp\0uy\0vi\0"
+"uz\0"
+"gjerstad.no\0"
+"pl.eu.org\0navoi.su\0"
+"*.er\0vn\0intuit\0nl.ci\0"
+"edu.es\0google\0"
+"edu.et\0fermo.it\0bato.tochigi.jp\0game-host.org\0"
+"lol\0"
+"govt.nz\0br.com\0"
+"vu\0s3.dualstack.ap-south-1.amazonaws.com\0"
+"daejeon.kr\0wf\0plus\0"
+"*.fk\0anan.tokushima.jp\0investments\0"
+"edu.fm\0systems\0"
+"nagareyama.chiba.jp\0"
+"shiiba.miyazaki.jp\0afamilycompany\0"
+"ba.leg.br\0"
+"edu.gd\0samegawa.fukushima.jp\0psp.gov.pl\0"
+"edu.ge\0salzburg.museum\0lpl\0"
+"ws\0"
"edu.gh\0"
"edu.gi\0"
-"tysfjord.no\0"
-"mil.ec\0kawaminami.miyazaki.jp\0"
+"tube\0"
+"royrvik.no\0"
"edu.gl\0"
-"edu.gn\0ca.eu.org\0"
-"ac.ci\0mil.eg\0"
+"k12.il.us\0"
+"edu.gn\0"
+"tank.museum\0"
"edu.gp\0"
-"ngo.ng\0"
+"airtraffic.aero\0s3.us-east-2.amazonaws.com\0"
"edu.gr\0"
-"trust.museum\0"
-"ac.cn\0edu.gt\0"
+"edu.gt\0zhytomyr.ua\0"
"edu.gu\0"
-"ye\0virtueeldomein.nl\0"
-"ac.cr\0essex.museum\0bykle.no\0"
-"edu.gy\0lifestyle\0"
+"man\0mel.cloudlets.com.au\0"
+"edu.gy\0gateway.museum\0ye\0map\0vlaanderen\0"
+"mba\0quest\0"
"edu.hk\0"
-"gunma.jp\0"
-"nakadomari.aomori.jp\0sagae.yamagata.jp\0ck.ua\0"
-"edu.hn\0monza-e-della-brianza.it\0gbiz\0"
-"ac.cy\0mel\xc3\xb8y.no\0porsanger.no\0from-az.net\0"
-"mil.fj\0selfip.com\0"
-"edu.ht\0"
-"yt\0"
-"lab.ms\0us.platform.sh\0"
-"yamada.iwate.jp\0"
-"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
-"obihiro.hokkaido.jp\0"
-"mil.ge\0"
-"edu.in\0zm\0"
-"texas.museum\0"
-"mil.gh\0bushey.museum\0app.render.com\0"
-"edu.iq\0kusatsu.gunma.jp\0"
-"ngo.ph\0adobeaemcloud.net\0"
-"edu.is\0singles\0"
+"nozawaonsen.nagano.jp\0miyake.nara.jp\0"
+"edu.hn\0"
+"kiho.mie.jp\0architecture.museum\0"
+"donetsk.ua\0"
+"int.ar\0k.bg\0granvin.no\0"
+"safe\0"
+"edu.ht\0dyndns-at-work.com\0"
+"nike\0"
+"comunica\xc3\xa7\xc3\xb5""es.museum\0yt\0"
+"tselinograd.su\0"
+"int.az\0"
+"kasaoka.okayama.jp\0"
+"saitama.saitama.jp\0"
+"edu.in\0"
+"int.bo\0bizen.okayama.jp\0"
+"s3-sa-east-1.amazonaws.com\0"
+"edu.iq\0zm\0"
+"hockey\0"
+"edu.is\0from-fl.com\0hopto.org\0"
"edu.it\0"
-"supply\0"
-"rennesoy.no\0"
-"of.no\0"
+"int.ci\0surgery\0"
+"bhz.br\0"
"zw\0"
-"hachirogata.akita.jp\0nakamichi.yamanashi.jp\0"
-"mibu.tochigi.jp\0bar2.net\0"
-"furano.hokkaido.jp\0"
-"mil.gt\0"
-"games\0"
-"edu.jo\0"
-"ac.fj\0"
-"ichinomiya.aichi.jp\0rahkkeravju.no\0health\0"
-"yugawa.fukushima.jp\0tokushima.tokushima.jp\0"
-"mil.hn\0h.se\0nic.za\0"
-"edu.kg\0jefferson.museum\0"
-"name.hr\0edu.ki\0"
-"cesena-forli.it\0ferrari\0"
-"mil.id\0ooshika.nagano.jp\0per.sg\0nflfan.org\0"
-"edu.km\0paroch.k12.ma.us\0bnpparibas\0"
-"\xe5\xa4\xa7\xe9\x98\xaa.jp\0edu.kn\0"
-"podhale.pl\0finance\0marine.ru\0"
-"shingu.wakayama.jp\0edu.kp\0"
-"edu.la\0winb.gov.pl\0sp.leg.br\0"
-"edu.lb\0eu-4.evennode.com\0"
-"edu.lc\0ens.tn\0"
-"ac.gn\0\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0docs\0"
-"mil.in\0servegame.com\0"
-"edu.kw\0"
-"taiki.hokkaido.jp\0"
-"mil.iq\0edu.ky\0"
-"tomakomai.hokkaido.jp\0edu.kz\0gleeze.com\0"
-"name.et\0edu.lk\0"
-"sodegaura.chiba.jp\0"
-"name.fj\0karumai.iwate.jp\0"
-"bmd.br\0edu.lr\0dst.mi.us\0isteingeek.de\0"
-"edu.ls\0\xe5\x95\x86\xe6\xa0\x87\0"
-"edu.me\0"
-"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0inami.wakayama.jp\0edu.lv\0"
-"mil.jo\0edu.mg\0lima-city.rocks\0"
-"munakata.fukuoka.jp\0\xd1\x81\xd0\xbe\xd1\x87\xd0\xb8.\xd1\x80\xd1\x83\xd1\x81\0"
-"edu.ly\0kvinesdal.no\0"
-"ac.id\0"
-"edu.mk\0"
-"edu.ml\0"
-"taketa.oita.jp\0nikko.tochigi.jp\0llc\0"
-"rg.it\0edu.mn\0lib.nj.us\0cisco\0cd.eu.org\0"
-"ibaraki.ibaraki.jp\0mil.kg\0edu.mo\0"
-"lib.ia.us\0google\0"
-"ac.il\0markets\0"
-"ac.im\0ukiha.fukuoka.jp\0gamo.shiga.jp\0edu.ms\0"
-"ac.in\0bulsan-s\xc3\xbc""dtirol.it\0im.it\0edu.mt\0"
-"mil.km\0page\0"
+"*.jm\0ltd\0"
+"int.co\0edu.jo\0"
+"chiryu.aichi.jp\0"
+"ce.gov.br\0konyvelo.hu\0"
+"chesapeakebay.museum\0"
+"tochio.niigata.jp\0"
+"dnsalias.net\0"
+"blogspot.co.id\0"
+"modalen.no\0"
+"edu.kg\0"
+"*.kh\0meraker.no\0aetna\0yamaxun\0"
+"edu.ki\0fedorainfracloud.org\0"
+"able\0flights\0"
+"virtueeldomein.nl\0hra.health\0"
+"edu.km\0med\0blogspot.co.il\0"
+"edu.kn\0"
+"nuoro.it\0"
+"isernia.it\0edu.kp\0masfjorden.no\0"
+"edu.la\0mosvik.no\0"
+"edu.lb\0"
+"3.bg\0edu.lc\0"
+"\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0"
+"\xe7\xa6\x8f\xe4\xba\x95.jp\0cdn-edges.net\0servehttp.com\0"
+"bugatti\0"
+"edu.kw\0men\0gets-it.net\0"
+"bounty-full.com\0"
+"edu.ky\0cust.dev.thingdust.io\0"
+"edu.kz\0s3-us-west-2.amazonaws.com\0"
+"edu.lk\0abo.pa\0"
+"poniatowa.pl\0"
+"design.museum\0"
+"indianapolis.museum\0asker.no\0"
+"seika.kyoto.jp\0and.museum\0"
+"edu.lr\0"
+"edu.ls\0\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"sa.edu.au\0"
+"niiza.saitama.jp\0edu.me\0"
+"edu.lv\0"
+"nishiawakura.okayama.jp\0edu.mg\0buzz\0"
+"edu.ly\0"
+"kashihara.nara.jp\0wien\0selfip.com\0"
+"edu.mk\0nesset.no\0"
+"edu.ml\0co.network\0"
+"*.mm\0"
+"edu.mn\0tatamotors\0"
+"edu.mo\0nc.tr\0"
+"tree.museum\0"
+"edu.ms\0is-a-financialadvisor.com\0"
+"edu.mt\0oystre-slidre.no\0"
"edu.mv\0"
-"edu.mw\0edu.ng\0lib.ak.us\0read\0dattolocal.net\0"
-"ac.ir\0edu.mx\0chernihiv.ua\0ddnsking.com\0"
-"edu.my\0edu.ni\0"
-"mil.kr\0edu.mz\0llp\0"
-"arboretum.museum\0"
-"kin.okinawa.jp\0"
-"app.os.stg.fedoraproject.org\0"
-"qc.ca\0name.cy\0"
-"atsuma.hokkaido.jp\0"
-"mil.kz\0historical.museum\0edu.nr\0"
-"hinohara.tokyo.jp\0"
-"ac.jp\0col.ng\0"
-"kunst.museum\0dnshome.de\0"
-"campinas.br\0uruma.okinawa.jp\0"
-"ac.ke\0"
-"h\xc3\xb8yanger.no\0"
-"trentinoa-adige.it\0edu.om\0"
-"name.eg\0kasaoka.okayama.jp\0mil.lv\0"
-"mil.mg\0"
-"ln.cn\0tochigi.jp\0"
-"contemporary.museum\0edu.pa\0"
-"nagiso.nagano.jp\0sortland.no\0eu-3.evennode.com\0"
-"hi.cn\0kutchan.hokkaido.jp\0"
-"theworkpc.com\0"
-"edu.pe\0weatherchannel\0"
-"berlevag.no\0edu.pf\0"
-"rollag.no\0banamex\0"
-"tenei.fukushima.jp\0ac.kr\0edu.ph\0um.gov.pl\0cloudcontrolapp.com\0"
-"cnpy.gdn\0"
-"kure.hiroshima.jp\0edu.pk\0"
-"edu.pl\0"
-"broker.aero\0"
-"yokawa.hyogo.jp\0mil.mv\0edu.pn\0c66.me\0"
-"mil.ng\0"
-"name.az\0ac.lk\0mil.my\0mil.ni\0edu.qa\0"
-"mil.mz\0edu.pr\0anquan\0republican\0"
-"edu.ps\0"
-"edu.pt\0"
-"ama.aichi.jp\0lol\0"
-"ac.ma\0mil.no\0"
-"rovigo.it\0ac.ls\0edu.py\0"
-"ac.me\0jfk.museum\0scotland.museum\0\xc3\xb8rskog.no\0nv.us\0"
-"itami.hyogo.jp\0"
-"fl.us\0"
-"mil.nz\0"
-"kiwi\0"
-"custom.metacentrum.cz\0"
-"lpl\0dnsalias.com\0github.io\0fi.cloudplatform.fi\0"
-"qld.au\0"
-"bahcavuotna.no\0cc.vi.us\0"
-"tas.gov.au\0karelia.su\0"
-"ac.mu\0"
-"mr.no\0"
-"ac.mw\0mil.pe\0"
-"cc.mo.us\0"
-"ac.ni\0"
-"hidaka.saitama.jp\0ac.mz\0mil.ph\0"
-"edu.sa\0"
-"edu.sb\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0"
+"numata.hokkaido.jp\0edu.mw\0edu.ng\0"
+"hakone.kanagawa.jp\0edu.mx\0"
+"shoo.okayama.jp\0suginami.tokyo.jp\0edu.my\0edu.ni\0"
+"edu.mz\0"
+"trainer.aero\0"
+"is-into-games.com\0"
+"catania.it\0arboretum.museum\0"
+"slz.br\0"
+"*.np\0ms.us\0nc.us\0"
+"edu.nr\0"
+"java\0sale\0am.leg.br\0iobb.net\0"
+"uk.reclaim.cloud\0"
+"nu.ca\0mypi.co\0"
+"s3-eu-west-3.amazonaws.com\0ddns.me\0"
+"yamanakako.yamanashi.jp\0"
+"engineer.aero\0"
+"video.hu\0edu.om\0"
+"tools\0"
+"edu.pa\0"
+"gyeonggi.kr\0"
+"b.se\0"
+"mil\0edu.pe\0"
+"kitahiroshima.hokkaido.jp\0edu.pf\0"
+"piemonte.it\0ve.it\0*.pg\0"
+"edu.ph\0"
+"salud.bo\0\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0"
+"namie.fukushima.jp\0edu.pk\0"
+"ip6.arpa\0\xe7\xb6\xb2\xe7\xbb\x9c.hk\0edu.pl\0jpn.com\0workisboring.com\0"
+"mit\0"
+"edu.pn\0"
+"iwatsuki.saitama.jp\0"
+"historichouses.museum\0"
+"edu.qa\0tattoo\0"
+"edu.pr\0pages.wiardweb.com\0"
+"int.is\0tono.iwate.jp\0edu.ps\0"
+"mizuho.tokyo.jp\0edu.pt\0"
+"kuzumaki.iwate.jp\0mutual\0"
+"nl.no\0"
+"takashima.shiga.jp\0edu.py\0"
+"shizuoka.shizuoka.jp\0agency\0"
+"yokohama\0"
+"support\0lpusercontent.com\0"
+"sabae.fukui.jp\0"
+"komatsu\0"
+"kuleuven.cloud\0"
+"aarborte.no\0"
+"tec.br\0setagaya.tokyo.jp\0celtic.museum\0"
+"trentinosudtirol.it\0bellevue.museum\0"
+"trentino-a-adige.it\0mlb\0"
+"pueblo.bo\0"
+"aridagawa.wakayama.jp\0"
+"t.bg\0shirakawa.fukushima.jp\0"
+"int.la\0edu.sa\0"
+"edu.sb\0"
"edu.rs\0edu.sc\0"
-"q.bg\0mil.pl\0edu.sd\0"
-"edu.ru\0"
-"draydns.de\0"
-"edu.sg\0"
-"padova.it\0man\0geekgalaxy.com\0"
-"imakane.hokkaido.jp\0mil.qa\0feedback\0"
-"map\0"
-"miyota.nagano.jp\0ngo.za\0mba\0"
-"edu.sl\0"
+"edu.sd\0arkhangelsk.su\0"
+"wiki\0edu.ru\0cistron.nl\0"
+"cnpy.gdn\0for-the.biz\0"
+"toyama.toyama.jp\0stange.no\0edu.sg\0"
+"rm.it\0emerck\0"
+"\xe9\x80\x9a\xe8\xb2\xa9\0"
+"mma\0"
+"iizuna.nagano.jp\0int.lk\0"
+"edu.sl\0mls\0"
+"azurestaticapps.net\0"
"edu.sn\0"
-"edu.so\0"
-"ac.nz\0"
-"kanzaki.saga.jp\0mil.py\0"
-"eu-2.evennode.com\0"
+"edu.so\0*.dev.adobeaemcloud.com\0"
"edu.ss\0"
-"rad\xc3\xb8y.no\0edu.st\0"
-"tokigawa.saitama.jp\0"
+"sannohe.aomori.jp\0edu.st\0t3l3p0rt.net\0"
+"school.za\0"
"edu.sv\0"
-"ac.pa\0events\0tiaa\0"
-"us.gov.pl\0"
+"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0!city.kitakyushu.jp\0\xd0\xbc\xd0\xba\xd0\xb4\0"
"edu.sy\0"
-"edu.tj\0telebit.app\0"
+"edu.tj\0"
+"nieruchomosci.pl\0"
+"moareke.no\0"
"edu.tm\0"
-"arvo.network\0"
-"edu.to\0"
+"nomi.ishikawa.jp\0nagaokakyo.kyoto.jp\0nishihara.okinawa.jp\0lib.ne.us\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0"
+"edu.to\0hisamitsu\0"
+"hurdal.no\0"
"edu.ua\0"
-"edu.tr\0jele.io\0"
-"hikawa.shimane.jp\0edu.tt\0"
-"edu.tw\0"
-"ac.pr\0cooking\0firebaseapp.com\0"
-"minnesota.museum\0paleo.museum\0"
-"lundbeck\0"
-"quicksytes.com\0"
-"mil.ru\0"
-"morena.br\0towada.aomori.jp\0l\xc3\xb8renskog.no\0ltd\0"
-"mil.rw\0"
-"mil.sh\0study\0"
-"nowruz\0"
-"computer\0"
-"edu.vc\0"
-"\xe4\xbd\x9b\xe5\xb1\xb1\0s3-website-ap-southeast-1.amazonaws.com\0"
-"edu.ve\0"
-"pordenone.it\0lib.gu.us\0"
-"kristiansund.no\0folionetwork.site\0"
-"edu.uy\0"
-"sand\xc3\xb8y.no\0airbus\0"
-"ct.it\0mil.st\0"
-"service.one\0"
-"edu.vn\0med\0"
-"dattorelay.com\0"
-"mil.sy\0"
-"mil.tj\0"
-"nakama.fukuoka.jp\0"
-"mil.tm\0edu.vu\0b.ssl.fastly.net\0"
-"oto.fukuoka.jp\0"
-"bonn.museum\0mil.to\0reit\0"
-"coastaldefence.museum\0men\0"
-"ac.rs\0"
-"oamishirasato.chiba.jp\0kvam.no\0mil.tr\0"
-"ac.se\0ac.ru\0"
-"shirakawa.fukushima.jp\0"
-"kawai.iwate.jp\0ac.rw\0"
-"mil.tw\0"
-"mil.tz\0eu-1.evennode.com\0"
+"edu.tr\0"
+"ap.leg.br\0"
+"posts-and-telecommunications.museum\0edu.tt\0"
+"iruma.saitama.jp\0"
+"int.mv\0"
+"int.mw\0edu.tw\0"
+"fr\xc3\xb8ya.no\0"
+"int.ni\0"
+"oumu.hokkaido.jp\0sarl\0"
+"urown.cloud\0"
+"moe\0"
+"fashion\0loginline.dev\0"
+"ct.it\0saga.jp\0my-router.de\0"
+"wine\0for-our.info\0"
+"ranzan.saitama.jp\0moi\0"
+"edu.vc\0crafting.xyz\0"
+"he.cn\0edu.ve\0"
+"kirkenes.no\0mom\0lebtimnetz.de\0"
+"industries\0s3.dualstack.us-east-1.amazonaws.com\0"
+"servegame.org\0"
+"nu.it\0elvendrell.museum\0edu.uy\0"
+"sakaiminato.tottori.jp\0"
+"pmn.it\0edu.vn\0"
+"market\0mov\0williamhill\0"
+"ck.ua\0col.ng\0"
+"kunneppu.hokkaido.jp\0okuizumo.shimane.jp\0agro.pl\0uw.gov.pl\0"
+"ama.shimane.jp\0edu.vu\0"
+"iwanuma.miyagi.jp\0"
+"skydiving.aero\0karatsu.saga.jp\0blogspot.com.cy\0"
+"k12.as.us\0nab\0"
+"blogspot.co.uk\0"
+"nic.in\0"
+"yufu.oita.jp\0"
+"abbott\0"
"edu.ws\0"
-"sado.niigata.jp\0"
-"\xe3\x82\xb3\xe3\x83\xa0\0"
-"nakamura.kochi.jp\0montreal.museum\0"
-"engineering\0"
-"s\xc3\xb8r-odal.no\0brussels\0"
-"elk.pl\0mil.vc\0"
-"iki.nagasaki.jp\0"
-"mil.ve\0"
-"ac.th\0"
-"ac.sz\0ac.tj\0"
-"mil.uy\0"
-"jls-sto1.elastx.net\0"
-"loabat.no\0edu.ye\0"
-"sakyo.kyoto.jp\0toyonaka.osaka.jp\0"
-"fukumitsu.toyama.jp\0hembygdsforbund.museum\0"
-"muncie.museum\0"
-"ac.ug\0"
-"mill.museum\0"
-"hayashima.okayama.jp\0"
-"ac.tz\0"
-"wa.gov.au\0ac.uk\0edu.za\0"
-"pars\0eu-west-3.elasticbeanstalk.com\0"
-"t3l3p0rt.net\0"
-"it1.eur.aruba.jenv-aruba.cloud\0"
-"joyo.kyoto.jp\0"
-"matsushima.miyagi.jp\0kainan.wakayama.jp\0"
-"praxi\0"
-"edu.zm\0xnbay.com\0"
-"lombardia.it\0konan.aichi.jp\0"
-"johana.toyama.jp\0kerrylogistics\0"
-"scientist.aero\0broadway\0dyndns-mail.com\0"
-"ac.vn\0"
-"shibuya.tokyo.jp\0mil\0"
-"fastblog.net\0"
-"cyon.link\0"
-"asmatart.museum\0"
-"fukaya.saitama.jp\0mil.ye\0"
-"mit\0"
-"kanie.aichi.jp\0"
-"toki.gifu.jp\0"
-"rent\0"
-"alt.za\0"
-"\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0mil.za\0"
-"ddnss.de\0"
-"nakanojo.gunma.jp\0"
-"accenture\0"
-"n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
-"theater\0readmyblog.org\0"
-"*.uberspace.de\0"
-"etajima.hiroshima.jp\0kamaishi.iwate.jp\0familyds.com\0"
-"name.vn\0mil.zm\0paas.datacenter.fi\0"
-"workinggroup.aero\0s\xc3\xb8ndre-land.no\0"
-"tottori.jp\0svizzera.museum\0"
-"digital\0"
-"miyako.iwate.jp\0"
-"nakijin.okinawa.jp\0"
-"mlb\0"
-"space.museum\0"
-"maibara.shiga.jp\0"
-"mil.zw\0"
-"gs.ol.no\0"
-"artcenter.museum\0shiksha\0"
-"campania.it\0"
-"vindafjord.no\0ac.za\0"
-"12hp.de\0"
-"hasuda.saitama.jp\0osen.no\0"
-"mma\0"
-"git-repos.de\0"
-"mls\0"
-"ge.it\0uchinomi.kagawa.jp\0"
-"kani.gifu.jp\0"
-"nagato.yamaguchi.jp\0name.tj\0"
-"koto.shiga.jp\0marburg.museum\0\xc3\xb8stre-toten.no\0golffan.us\0"
-"kawaue.gifu.jp\0kamisu.ibaraki.jp\0ac.zm\0"
-"ringsaker.no\0"
-"we.bs\0"
-"dyndns.tv\0"
-"shinkamigoto.nagasaki.jp\0name.tr\0"
-"name.tt\0"
-"ac.zw\0"
-"\xc4\x8d\xc3\xa1hcesuolo.no\0boats\0"
-"tur.ar\0mizusawa.iwate.jp\0"
-"manchester.museum\0dyndns-at-work.com\0"
-"12hp.at\0"
-"kitanakagusuku.okinawa.jp\0"
-"cust.retrosnub.co.uk\0"
-"ogaki.gifu.jp\0"
-"tennis\0here-for-more.info\0"
-"mer\xc3\xa5ker.no\0moe\0"
-"act.edu.au\0\xe9\x9d\x99\xe5\xb2\xa1.jp\0fuso.aichi.jp\0"
-"psp.gov.pl\0"
-"moi\0"
-"tur.br\0"
-"lucca.it\0blog\0"
-"sic.it\0"
-"kr\xc3\xa5""anghke.no\0kep.tr\0mom\0rest\0"
-"shichikashuku.miyagi.jp\0"
-"gotdns.com\0"
-"vads\xc3\xb8.no\0""12hp.ch\0"
-"asti.it\0"
-"feste-ip.net\0"
-"tx.us\0"
-"mov\0"
-"muni.il\0ohda.shimane.jp\0mazowsze.pl\0"
-"toho.fukuoka.jp\0dyndns.ws\0"
-"shimada.shizuoka.jp\0funahashi.toyama.jp\0"
-"society.museum\0hi.us\0"
-"rifu.miyagi.jp\0"
-"ct.us\0"
-"nab\0"
-"takamori.nagano.jp\0"
-"cc.wv.us\0"
-"st.no\0"
-"shimane.jp\0citic\0"
-"sakurai.nara.jp\0"
-"reklam.hu\0\xe6\x84\x9b\xe7\x9f\xa5.jp\0aurland.no\0"
-"trentino.it\0mobi\0"
-"iijima.nagano.jp\0direct.quickconnect.to\0"
-"name.qa\0"
-"name.pr\0"
-"flora.no\0"
-"nba\0s3-website.ap-northeast-2.amazonaws.com\0"
-"fortworth.museum\0\xe6\xb8\xb8\xe6\x88\x8f\0"
-"matsubushi.saitama.jp\0"
-"sld.do\0"
-"insure\0s3-ap-southeast-1.amazonaws.com\0"
-"name.na\0"
-"yachiyo.ibaraki.jp\0tips\0my-vigor.de\0"
-"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"moareke.no\0bloger.id\0"
-"office-on-the.net\0demo.jelastic.com\0"
-"name.mv\0"
-"name.ng\0moda\0msd\0"
-"name.my\0"
-"hirosaki.aomori.jp\0fr\xc3\xb8ya.no\0"
-"cranbrook.museum\0"
-"gyokuto.kumamoto.jp\0"
-"eun.eg\0"
-"ch.eu.org\0"
-"barletta-trani-andria.it\0"
-"jogasz.hu\0tamatsukuri.ibaraki.jp\0ny-2.paas.massivegrid.net\0"
-"lib.wi.us\0"
-"s3.dualstack.ap-northeast-2.amazonaws.com\0"
-"mattel\0mtn\0"
-"lib.ms.us\0lib.nc.us\0"
-"mtr\0*.svc.firenet.ch\0"
-"nec\0"
-"r\xc3\xb8mskog.no\0"
-"bearalvahki.no\0"
-"ogata.akita.jp\0"
-"blue\0"
-"al.it\0marshalls\0"
-"tsukiyono.gunma.jp\0from-fl.com\0"
-"furubira.hokkaido.jp\0"
-"synology-ds.de\0"
-"nagasaki.jp\0"
-"net\0"
-"humanities.museum\0"
-"sakawa.kochi.jp\0new\0"
-"name.mk\0"
-"americana.museum\0gda.pl\0"
-"nfl\0"
-"stavanger.no\0caseih\0"
-"koriyama.fukushima.jp\0"
+"int.pt\0"
+"blogspot.com.ee\0"
+"cisco\0"
+"blogspot.com.eg\0"
+"nba\0lima.zone\0"
+"seranishi.hiroshima.jp\0institute\0"
"cymru\0"
-"tomioka.gunma.jp\0sykkylven.no\0"
-"snaase.no\0"
-"uki.kumamoto.jp\0storfjord.no\0"
-"redumbrella\0tempurl.host\0"
-"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0mycloud.by\0"
-"abbvie\0"
-"e164.arpa\0"
-"name.jo\0miyako.fukuoka.jp\0miyazaki.miyazaki.jp\0taira.toyama.jp\0ventures\0*.cns.joyent.com\0"
-"iiyama.nagano.jp\0"
-"fukui.jp\0"
-"ngo\0"
-"public.museum\0"
-"union.aero\0denmark.museum\0"
-"telekommunikation.museum\0"
-"wy.us\0to.leg.br\0"
-"circus.museum\0"
-"nhk\0"
-"barsy.co.uk\0"
-"salud.bo\0"
-"noticias.bo\0shingu.fukuoka.jp\0\xe6\x9c\xba\xe6\x9e\x84\0"
+"taiki.mie.jp\0"
+"\xd0\xbc\xd0\xbe\xd0\xbd\0"
+"on.ca\0blogspot.com.ar\0"
+"save\0"
+"edu.ye\0blogspot.com.au\0repl.co\0"
+"etisalat\0"
+"enebakk.no\0bss.design\0"
+"storebase.store\0"
+"isahaya.nagasaki.jp\0"
+"skjerv\xc3\xb8y.no\0msd\0"
+"agr.br\0"
+"k.se\0"
+"edu.za\0\xe7\xbd\x91\xe7\xab\x99\0"
+"blogspot.com.br\0"
+"emp.br\0soundcast.me\0"
+"illustration.museum\0int.ru\0"
+"pug.it\0umi.fukuoka.jp\0"
+"blogspot.com.by\0"
+"lavangen.no\0"
+"kumiyama.kyoto.jp\0"
+"edu.zm\0lplfinancial\0"
+"landes.museum\0blogspot.com.co\0"
+"roros.no\0"
+"uozu.toyama.jp\0maserati\0"
+"mtn\0"
+"kawaguchi.saitama.jp\0oppeg\xc3\xa5rd.no\0"
+"int.tj\0"
+"mtr\0"
+"nec\0weatherchannel\0sells-for-less.com\0"
+"camera\0saxo\0"
+"olbia-tempio.it\0"
+"salangen.no\0"
+"net.ac\0bentley\0"
+"lotte\0no.eu.org\0"
+"net.ae\0cc.oh.us\0"
+"educator.aero\0net.af\0"
+"net.ag\0australia.museum\0int.tt\0"
+"force.museum\0thruhere.net\0"
+"net.ai\0"
+"slask.pl\0"
+"v\xc3\xa5g\xc3\xa5.no\0"
+"net.al\0"
+"net.am\0"
+"lotto\0"
+"net\0"
+"net.ba\0"
+"net.ar\0net.bb\0kuju.oita.jp\0karaganda.su\0\xd1\x81\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xb0.\xd1\x80\xd1\x83\xd1\x81\0"
+"tomobe.ibaraki.jp\0new\0"
+"fuchu.toyama.jp\0sa.com\0"
+"net.au\0cloudjiffy.net\0"
+"blogspot.com.es\0"
+"net.bh\0int.ve\0nfl\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
+"blogspot.co.ke\0"
+"net.az\0"
+"turin.it\0halden.no\0"
+"net.bm\0"
+"net.bn\0farmstead.museum\0"
+"net.bo\0"
+"trentinostirol.it\0int.vn\0"
+"net.br\0damnserver.com\0"
+"net.bs\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0"
+"net.bt\0tr\xc3\xb8gstad.no\0\xe7\xbd\x91\xe5\x9d\x80\0"
+"isa.kagoshima.jp\0"
+"\xe7\xbb\x84\xe7\xb9\x94.hk\0kppsp.gov.pl\0"
+"net.ci\0"
+"foz.br\0net.bz\0"
+"higashihiroshima.hiroshima.jp\0ngo\0"
+"sayama.saitama.jp\0hagebostad.no\0vipsinaapp.com\0"
+"net.cm\0clinic\0"
+"net.cn\0"
+"net.co\0"
+"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0clubmed\0lgbt\0"
+"lease\0"
+"baidu\0"
+"go.gov.br\0"
+"net.cu\0cal.it\0"
+"stockholm.museum\0in-dsl.de\0"
+"net.cw\0heimatunduhren.museum\0nhk\0\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0"
+"net.cy\0joyo.kyoto.jp\0higashiizumo.shimane.jp\0"
+"nishiizu.shizuoka.jp\0"
+"kitami.hokkaido.jp\0onna.okinawa.jp\0"
+"net.dm\0s3-website.us-east-2.amazonaws.com\0es-1.axarnet.cloud\0"
+"monzaebrianza.it\0"
+"net.do\0cc.wa.us\0"
+"hob\xc3\xb8l.no\0"
+"net.ec\0culturalcenter.museum\0"
+"hn.cn\0"
+"toyone.aichi.jp\0"
+"64-b.it\0"
+"net.eg\0"
+"gb.com\0"
+"myshopify.com\0"
+"net.dz\0massa-carrara.it\0"
+"adac\0"
+"stjordal.no\0"
+"shingu.fukuoka.jp\0kushiro.hokkaido.jp\0santacruz.museum\0"
+"shimizu.shizuoka.jp\0"
+"net.et\0"
+"show.aero\0"
+"net-freaks.com\0"
+"net.fj\0"
+"naka.hiroshima.jp\0"
+"net.fm\0"
+"blogspot.co.nz\0"
+"sanuki.kagawa.jp\0asaka.saitama.jp\0"
+"shimoji.okinawa.jp\0"
+"sf.no\0ct.us\0"
+"spy.museum\0k12.nm.us\0"
+"saku.nagano.jp\0nz.eu.org\0"
+"net.ge\0"
+"reggiocalabria.it\0watches\0"
+"net.gg\0aseral.no\0"
+"kobayashi.miyazaki.jp\0iraq.museum\0"
+"is-a-student.com\0"
+"net.gl\0seoul.kr\0"
+"nic.tj\0"
+"net.gn\0"
+"net.gp\0"
+"nakadomari.aomori.jp\0"
+"net.gr\0gold\0nokia\0"
+"net.gt\0golf\0"
+"net.gu\0gs.ah.no\0"
+"webhop.org\0tn.oxa.cloud\0"
+"dubai\0"
+"net.gy\0mayfirst.info\0"
+"net.hk\0"
+"locker\0al.eu.org\0"
+"net.hn\0erotica.hu\0horokanai.hokkaido.jp\0mj\xc3\xb8ndalen.no\0nhs.uk\0ipiranga\0"
+"t.se\0"
+"costume.museum\0"
+"orland.no\0"
+"net.ht\0net.id\0chat\0"
+"yamaga.kumamoto.jp\0walbrzych.pl\0memset.net\0"
+"km.ua\0blogdns.com\0"
+"yamato.kumamoto.jp\0"
+"net.il\0"
+"net.im\0tokushima.jp\0misaki.okayama.jp\0"
+"net.in\0"
+"appengine.flow.ch\0"
+"net.iq\0"
+"net.ir\0"
+"net.is\0money.museum\0vn.ua\0zapto.xyz\0"
+"lib.ee\0net.je\0"
+"ingatlan.hu\0bolzano.it\0"
+"blogspot.com.mt\0"
+"politica.bo\0"
+"blogspot.com.ng\0"
+"rehab\0"
+"net.jo\0tec.ve\0"
+"ishikawa.fukushima.jp\0"
+"cc.pa.us\0"
+"miyazu.kyoto.jp\0goog\0id.forgerock.io\0"
+"oketo.hokkaido.jp\0"
+"kamisato.saitama.jp\0net.kg\0"
+"rodoy.no\0"
+"valledaosta.it\0net.ki\0"
+"cloud66.ws\0"
+"gwangju.kr\0"
+"net.kn\0"
+"chuo.tokyo.jp\0roma.museum\0"
+"net.la\0"
+"net.lb\0"
+"so.it\0net.lc\0now\0from-vt.com\0"
+"\xc3\xb8vre-eiker.no\0"
+"bahccavuotna.no\0"
+"net.kw\0bmoattachments.org\0fastblog.net\0"
+"trondheim.no\0definima.net\0"
+"daisen.akita.jp\0net.ky\0flora.no\0krager\xc3\xb8.no\0"
+"net.kz\0"
+"net.lk\0"
+"shimofusa.chiba.jp\0shibukawa.gunma.jp\0"
+"konskowola.pl\0"
+"matta-varjjat.no\0wuoz.gov.pl\0"
+"ballooning.aero\0net.ma\0"
+"net.lr\0myravendb.com\0"
+"net.ls\0"
+"rv.ua\0nic.za\0"
+"net.me\0blogspot.com.tr\0"
+"midori.gunma.jp\0net.lv\0upaas.kazteleport.kz\0"
+"esan.hokkaido.jp\0cust.prod.thingdust.io\0dnsupdate.info\0"
"miyoshi.aichi.jp\0"
-"travelers\0"
-"amsw.nl\0"
-"ishinomaki.miyagi.jp\0"
-"swiss\0"
-"huissier-justice.fr\0"
-"kushima.miyazaki.jp\0"
-"pug.it\0"
-"amfam\0"
-"pccw\0"
-"tagajo.miyagi.jp\0"
-"onagawa.miyagi.jp\0"
-"cc.nh.us\0"
-"localhistory.museum\0"
-"mosvik.no\0yali.mythic-beasts.com\0"
-"joso.ibaraki.jp\0"
-"sanok.pl\0k12.va.us\0"
-"inazawa.aichi.jp\0circle\0"
-"z.bg\0"
-"al.no\0"
-"cloudjiffy.net\0"
-"5.bg\0forli-cesena.it\0"
-"on-web.fr\0"
-"shimizu.hokkaido.jp\0shonai.yamagata.jp\0myqnapcloud.com\0"
-"basilicata.it\0ozora.hokkaido.jp\0tokamachi.niigata.jp\0"
-"gen.mi.us\0adygeya.su\0basicserver.io\0"
-"volda.no\0reg.dk\0"
-"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0bplaced.de\0"
-"nichinan.miyazaki.jp\0gmail\0"
-"fujiyoshida.yamanashi.jp\0"
-"utwente.io\0"
-"from-wi.com\0"
-"m\xc3\xa5s\xc3\xb8y.no\0at.eu.org\0"
-"dyndns.ddnss.de\0"
-"is-an-actor.com\0\xd0\xbc\xd1\x81\xd0\xba.\xd1\x80\xd1\x83\xd1\x81\0"
-"rochester.museum\0gol.no\0lier.no\0"
-"izumi.kagoshima.jp\0nord-odal.no\0"
-"mitake.gifu.jp\0"
-"toyako.hokkaido.jp\0skedsmokorset.no\0ic.gov.pl\0"
-"small-web.org\0"
-"arendal.no\0"
-"sakado.saitama.jp\0\xc3\xa5s.no\0"
-"topology.museum\0"
-"va.it\0"
-"rishirifuji.hokkaido.jp\0"
-"s3.dualstack.ca-central-1.amazonaws.com\0"
-"aju.br\0warabi.saitama.jp\0olecko.pl\0hangout\0"
-"from-il.com\0"
-"*.nom.br\0"
-"sld.pa\0graphics\0"
-"shiiba.miyazaki.jp\0nagai.yamagata.jp\0yandex\0"
-"shimotsuma.ibaraki.jp\0"
-"samsclub\0"
-"takatsuki.shiga.jp\0"
-"adygeya.ru\0"
-"vic.au\0"
-"uzs.gov.pl\0"
-"modalen.no\0lynx.mythic-beasts.com\0"
-"calvinklein\0we.tc\0community-pro.net\0"
-"lowicz.pl\0"
-"eu.meteorapp.com\0"
-"platterp.us\0"
-"scholarships\0pimienta.org\0"
-"safety.aero\0"
-"theatre\0"
-"tm.cy\0viterbo.it\0"
-"akaiwa.okayama.jp\0travelersinsurance\0"
-"lebork.pl\0"
-"gen.in\0"
-"andria-barletta-trani.it\0run.app\0"
-"now\0"
-"*.stolos.io\0"
-"mad.museum\0cloud66.zone\0"
-"fidelity\0"
-"tm.dz\0autos\0wbq.me\0"
-"ibigawa.gifu.jp\0"
-"cleverapps.io\0"
-"ena.gifu.jp\0turek.pl\0"
-"marketing\0"
-"sennan.osaka.jp\0pruszkow.pl\0edu.krd\0"
-"seg.br\0"
-"al.us\0"
-"is-very-nice.org\0dynvpn.de\0"
-"va.no\0"
-"asaminami.hiroshima.jp\0"
-"miho.ibaraki.jp\0bellevue.museum\0"
-"nra\0"
-"saltdal.no\0click\0"
-"tm.fr\0cc.md.us\0"
-"\xd0\xbc\xd0\xb8\xd1\x80.\xd1\x80\xd1\x83\xd1\x81\0"
-"guovdageaidnu.no\0"
-"pro.az\0obi\0"
-"f.bg\0"
-"art.museum\0k12.pr.us\0from-me.org\0"
-"myddns.rocks\0"
-"pro.br\0rnu.tn\0"
-"trentino-aadige.it\0"
-"matsuzaki.shizuoka.jp\0elvendrell.museum\0ostre-toten.no\0"
+"net.ly\0"
+"mod.gi\0net.mk\0"
+"net.ml\0"
+"crotone.it\0gu.us\0nra\0"
+"\xe6\x95\x8e\xe8\x82\xb2.hk\0yachimata.chiba.jp\0"
+"net.mo\0"
+"repl.run\0"
+"cc.ky.us\0"
+"net.ms\0"
+"net.mt\0"
+"net.mu\0obi\0"
+"net.mv\0net.nf\0pohl\0"
+"yoshinogari.saga.jp\0net.mw\0net.ng\0"
+"net.mx\0"
+"campidanomedio.it\0net.my\0net.ni\0faststacks.net\0"
+"veterinaire.km\0net.mz\0radom.pl\0barsy.support\0"
+"taiwa.miyagi.jp\0fantasyleague.cc\0"
+"mitaka.tokyo.jp\0magnet.page\0"
+"semine.miyagi.jp\0"
+"itano.tokushima.jp\0"
+"net.nr\0"
"nrw\0"
-"fuossko.no\0"
-"weather\0"
-"hol.no\0"
-"moto\0"
-"32-b.it\0"
-"muosat.no\0ae.org\0""2038.io\0"
-"lexus\0"
-"pro.cy\0tm.hu\0trapani.it\0blogspot.com\0"
-"hirata.fukushima.jp\0"
-"center.museum\0lur\xc3\xb8y.no\0gen.ng\0"
-"christiansburg.museum\0"
-"minamiawaji.hyogo.jp\0"
-"pro.ec\0kihoku.ehime.jp\0"
-"ntt\0"
-"kitagata.gifu.jp\0"
-"chase\0"
-"vibo-valentia.it\0"
-"milan.it\0fujieda.shizuoka.jp\0sport\0"
-"equipment\0"
-"lc.it\0"
-"mat.br\0gen.nz\0kaufen\0"
-"nt.au\0neyagawa.osaka.jp\0"
-"ci.it\0kaizuka.osaka.jp\0"
-"off\0mangyshlak.su\0"
-"expert\0"
-"tokai.aichi.jp\0"
-"deporte.bo\0pro.fj\0"
-"nt.ca\0*.advisor.ws\0be.ax\0"
-"tm.km\0"
-"es.gov.br\0pvt.ge\0giving\0"
-"heguri.nara.jp\0"
-"cloudycluster.net\0"
-"berlev\xc3\xa5g.no\0"
-"sande.more-og-romsdal.no\0"
-"bc.platform.sh\0"
-"fj.cn\0county.museum\0"
-"oseto.nagasaki.jp\0preservation.museum\0"
-"skaun.no\0"
-"gonohe.aomori.jp\0nakatane.kagoshima.jp\0"
-"hatoyama.saitama.jp\0tm.mc\0ownprovider.com\0"
-"tm.mg\0"
-"kharkiv.ua\0zhytomyr.ua\0"
-"ip6.arpa\0"
-"\xe5\x8d\x83\xe8\x91\x89.jp\0"
-"vald-aosta.it\0national.museum\0barum.no\0"
-"va.us\0"
-"pro.ht\0nyc\0"
+"pg.it\0stranda.no\0"
+"tonaki.okinawa.jp\0"
+"sx.cn\0"
+"\xe5\x85\xac\xe5\x8f\xb8.cn\0gallery.museum\0net.nz\0"
+"higashitsuno.kochi.jp\0"
+"tsuno.miyazaki.jp\0net.om\0"
+"iron.museum\0"
+"cust.disrec.thingdust.io\0"
+"net.pa\0mlbfan.org\0"
+"hembygdsforbund.museum\0"
+"hokuto.hokkaido.jp\0"
+"iki.nagasaki.jp\0net.pe\0um.gov.pl\0"
+"moseushi.hokkaido.jp\0hjartdal.no\0"
+"\xe5\x85\xac\xe5\x8f\xb8.hk\0rollag.no\0"
+"net.ph\0s3.dualstack.ca-central-1.amazonaws.com\0"
+"olecko.pl\0"
+"itau\0"
+"net.pk\0co.krd\0"
+"net.pl\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"net.pn\0from-ak.com\0"
+"bando.ibaraki.jp\0cultural.museum\0s3-website-us-east-1.amazonaws.com\0"
+"fukushima.jp\0vevelstad.no\0homesense\0ntt\0"
+"net.qa\0"
+"net.pr\0"
+"net.ps\0cc.ia.us\0"
+"shimizu.hokkaido.jp\0net.pt\0"
+"blogspot.co.za\0"
+"pp.az\0"
+"discourse.group\0"
+"sn\xc3\xa5""ase.no\0net.py\0"
+"andriabarlettatrani.it\0"
+"groundhandling.aero\0bbs.tr\0lon-2.paas.massivegrid.net\0wellbeingzone.eu\0"
+"an.it\0"
+"avocat.pro\0"
+"veterinaire.fr\0"
+"off\0"
+"obu.aichi.jp\0"
+"lo.it\0"
+"nakatsugawa.gifu.jp\0"
+"luzern.museum\0"
+"misasa.tottori.jp\0amli.no\0"
+"ojiya.niigata.jp\0"
+"iitate.fukushima.jp\0"
+"vardo.no\0"
+"flight.aero\0blogspot.com.uy\0"
+"citic\0square7.net\0dvrcam.info\0"
+"furniture.museum\0net.sa\0"
+"net.sb\0"
+"tomika.gifu.jp\0net.sc\0kicks-ass.net\0"
+"net.sd\0"
+"egersund.no\0net.ru\0"
+"kv.ua\0"
+"h\xc3\xa1""bmer.no\0net.rw\0net.sg\0aquarelle\0"
+"net.sh\0tel.tr\0"
+"gliwice.pl\0"
+"net.sl\0"
+"net.so\0"
+"bjarkoy.no\0"
+"net.ss\0"
+"net.st\0"
+"us.gov.pl\0"
+"instantcloud.cn\0"
+"hole.no\0net.th\0"
+"net.sy\0edu.krd\0"
+"net.tj\0dnsalias.org\0"
+"net.tm\0"
+"net.tn\0"
+"tonsberg.no\0net.to\0nyc\0"
+"net.ua\0"
+"net.tr\0"
+"net.tt\0"
+"*.lcl.dev\0"
+"froland.no\0sor-aurdal.no\0"
+"net.tw\0"
+"yura.wakayama.jp\0"
+"net.uk\0baseball\0"
+"bo.telemark.no\0cleaning\0"
+"net.vc\0\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0"
+"lea\xc5\x8bgaviika.no\0net.ve\0*.stg.dev\0"
+"consulado.st\0"
+"hidaka.hokkaido.jp\0nayoro.hokkaido.jp\0yoga\0"
+"net.uy\0net.vi\0"
+"!city.sapporo.jp\0net.uz\0"
+"gol.no\0"
+"net.vn\0"
+"nishinomiya.hyogo.jp\0"
+"pixolino.com\0"
+"dynalias.com\0for-some.biz\0"
+"net.vu\0"
+"tydal.no\0"
+"is-a-chef.org\0ric.jelastic.vps-host.net\0"
+"srv.br\0"
+"yatomi.aichi.jp\0"
+"net.ws\0"
+"scot\0"
+"university.museum\0ebiz.tw\0cdn77-ssl.net\0"
+"minato.osaka.jp\0porn\0"
+"akita.akita.jp\0"
+"\xe8\x81\x94\xe9\x80\x9a\0"
+"marche.it\0rakkestad.no\0"
+"nysa.pl\0"
+"ravendb.community\0"
+"namerikawa.toyama.jp\0"
+"transport.museum\0net.ye\0"
+"mormon\0"
+"aizubange.fukushima.jp\0nishitosa.kochi.jp\0"
+"!city.kawasaki.jp\0"
+"moskenes.no\0auspost\0"
+"wa.gov.au\0larsson.museum\0aurskog-holand.no\0post\0"
+"service.gov.uk\0"
+"naamesjevuemie.no\0"
+"net.za\0one\0"
+"fnd.br\0shizuoka.jp\0ong\0"
+"catholic\0"
+"cloudaccess.host\0"
+"toray\0"
+"kitamoto.saitama.jp\0onl\0homeip.net\0"
+"west1-us.cloudjiffy.net\0"
+"myqnapcloud.com\0"
+"kr\xc3\xb8""dsherad.no\0"
+"chuo.chiba.jp\0net.zm\0ny-1.paas.massivegrid.net\0"
+"lib.wa.us\0"
"nissan\0"
-"nishihara.okinawa.jp\0"
-"aosta.it\0grandrapids.museum\0"
-"karasjok.no\0"
-"sener\0"
-"oji.nara.jp\0"
-"matsuno.ehime.jp\0l\xc3\xb8ten.no\0"
-"nissay\0"
-"mihara.kochi.jp\0tm.no\0"
-"ismaili\0"
-"frogn.no\0fnwk.site\0dyn.ddnss.de\0"
-"virginia.museum\0taipei\0"
-"far.br\0"
-"fund\0"
-"okinawa.okinawa.jp\0skjak.no\0"
-"rome.it\0"
-"sdn.gov.pl\0"
-"z.se\0"
-"notogawa.shiga.jp\0gen.tr\0"
-"joetsu.niigata.jp\0"
-"stj\xc3\xb8rdalshalsen.no\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0"
-"tcm.museum\0"
-"seihi.nagasaki.jp\0gent\0"
-"tm.pl\0"
-"trentinosuedtirol.it\0tobetsu.hokkaido.jp\0"
-"*.awdev.ca\0"
-"capetown\0"
-"atlanta.museum\0mmafan.biz\0"
-"s3-fips-us-gov-west-1.amazonaws.com\0balashov.su\0"
-"restaurant\0"
-"zagan.pl\0"
-"kamagaya.chiba.jp\0sharp\0"
-"be.gy\0"
-"definima.net\0"
-"mjondalen.no\0"
-"rocks\0"
-"reliance\0"
-"gs.sf.no\0"
-"bygland.no\0"
-"nagaoka.niigata.jp\0"
-"myforum.community\0"
-"si.it\0lib.oh.us\0"
-"pro.na\0"
-"tm.ro\0naturbruksgymn.se\0oncilla.mythic-beasts.com\0*.sys.qcx.io\0"
-"au.eu.org\0be.eu.org\0"
-"aostavalley.it\0linz.museum\0pro.mv\0one\0"
-"usa.oita.jp\0levanger.no\0"
-"ikeda.hokkaido.jp\0ong\0"
-"tm.se\0"
-"ox.rs\0"
-"przeworsk.pl\0"
-"chitose.hokkaido.jp\0onl\0"
-"tomobe.ibaraki.jp\0usuki.oita.jp\0analytics\0"
-"matsue.shimane.jp\0"
-"mp.br\0tokuyama.yamaguchi.jp\0hzc.io\0"
-"*.compute.amazonaws.com.cn\0damnserver.com\0"
-"kids.us\0"
-"maintenance.aero\0"
-"creditcard\0"
-"barsy.me\0"
-"fedje.no\0"
-"pro.om\0"
-"nishiawakura.okayama.jp\0ooo\0"
-"ibaraki.jp\0akkeshi.hokkaido.jp\0"
-"maison\0"
-"\xe7\xa7\x8b\xe7\x94\xb0.jp\0obama.nagasaki.jp\0hagi.yamaguchi.jp\0troitsk.su\0wien.funkfeuer.at\0"
-"stargard.pl\0"
-"bostik\0"
-"g.vbrplsbx.io\0"
-"us-east-2.elasticbeanstalk.com\0"
-"gifu.gifu.jp\0ks.ua\0"
-"azerbaijan.su\0"
-"westus2.azurestaticapps.net\0"
-"hjartdal.no\0"
-"pro.pr\0"
-"\xe5\xbe\xae\xe5\x8d\x9a\0"
-"enna.it\0goodyear\0"
-"association.aero\0consulting.aero\0ks.us\0"
-"jewelry.museum\0bridgestone\0"
-"wakasa.fukui.jp\0"
-"maceio.br\0ryd.wafaicloud.com\0"
-"tado.mie.jp\0"
-"\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0motorcycles\0okinawa\0\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0"
-"bg.eu.org\0"
-"au.cloudswitches.com\0"
-"goshiki.hyogo.jp\0org\0"
+"columbus.museum\0is-saved.org\0"
+"s3-ap-northeast-1.amazonaws.com\0"
+"tinn.no\0pinb.gov.pl\0mt.eu.org\0"
+"tksat.bo\0kariwa.niigata.jp\0"
+"ichinohe.iwate.jp\0"
+"bg.it\0"
+"friuliveneziagiulia.it\0blogsite.org\0"
+"nissay\0ooo\0"
+"alto-adige.it\0"
+"kamisunagawa.hokkaido.jp\0"
+"ichikawa.chiba.jp\0kamikawa.hokkaido.jp\0"
+"storage\0"
+"morotsuka.miyazaki.jp\0wake.okayama.jp\0karelia.su\0"
+"is-a-knight.org\0"
+"takamatsu.kagawa.jp\0"
+"oxa.cloud\0"
+"\xe9\xb3\xa5\xe5\x8f\x96.jp\0varoy.no\0"
+"is-a-chef.com\0"
+"arna.no\0law.pro\0"
+"kawaue.gifu.jp\0naha.okinawa.jp\0"
+"h\xc3\xa1mm\xc3\xa1rfeasta.no\0wielun.pl\0"
+"unzen.nagasaki.jp\0itoigawa.niigata.jp\0"
+"research.aero\0"
+"andria-trani-barletta.it\0akaiwa.okayama.jp\0org\0"
+"\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
"pay\0"
-"nt.no\0from-wy.com\0"
-"rep.br\0"
-"itoman.okinawa.jp\0theater.museum\0"
-"flt.cloud.muni.cz\0"
-"seiyo.ehime.jp\0vanylven.no\0k12.vt.us\0"
-"apartments\0"
-"halloffame.museum\0is-a-linux-user.org\0"
-"okuizumo.shimane.jp\0"
-"cc.ar.us\0"
-"maizuru.kyoto.jp\0"
-"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0"
-"f.se\0"
-"eco.br\0assn.lk\0"
-"ppg.br\0izu.shizuoka.jp\0"
-"valer.hedmark.no\0"
-"with.marketing\0"
-"dubai\0"
-"mito.ibaraki.jp\0"
-"akita.jp\0"
-"tanabe.wakayama.jp\0sling\0"
-"hanggliding.aero\0nakai.kanagawa.jp\0graz.museum\0"
-"in-brb.de\0"
-"bryansk.su\0"
-"kviteseid.no\0"
-"b\xc3\xa1jddar.no\0"
-"glass.museum\0pasadena.museum\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0jls-sto2.elastx.net\0now.sh\0"
-"shimonita.gunma.jp\0gjerstad.no\0"
-"meraker.no\0\xd1\x81\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xb0.\xd1\x80\xd1\x83\xd1\x81\0"
-"frosta.no\0pro.tt\0"
-"trentinos\xc3\xbc""d-tirol.it\0vestvagoy.no\0tm.za\0ott\0"
-"temp-dns.com\0"
-"\xe7\xa6\x8f\xe4\xba\x95.jp\0mysecuritycamera.net\0"
-"avocat.fr\0swidnica.pl\0"
-"ogawa.nagano.jp\0"
-"trentin-sud-tirol.it\0lib.ri.us\0is-leet.com\0from.marketing\0"
-"osaka.jp\0kilatiron.com\0"
-"tv.bb\0re.it\0realm.cz\0*.transurl.be\0"
-"soeda.fukuoka.jp\0"
-"matsudo.chiba.jp\0"
-"pet\0"
-"bofa\0"
-"skype\0"
-"ovh\0"
-"boston\0wpmudev.host\0"
-"nt.ro\0collegefan.org\0"
-"aso.kumamoto.jp\0blockbuster\0"
-"inami.toyama.jp\0"
-"yk.ca\0pro.vn\0"
-"tv.bo\0rodeo\0"
-"tv.br\0\xe9\xab\x98\xe7\x9f\xa5.jp\0ath.cx\0"
-"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0tokoname.aichi.jp\0"
-"myshopblocks.com\0"
-"nishikatsura.yamanashi.jp\0\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"is-a-player.com\0"
-"anan.nagano.jp\0"
-"agency\0"
-"odawara.kanagawa.jp\0"
-"numata.gunma.jp\0chtr.k12.ma.us\0"
-"kawakami.nagano.jp\0re.kr\0"
-"barsy.uk\0"
-"tsuru.yamanashi.jp\0dielddanuorri.no\0"
-"kujukuri.chiba.jp\0york.museum\0"
-"phd\0hr.eu.org\0"
-"hamura.tokyo.jp\0"
-"geometre-expert.fr\0from-ak.com\0"
-"friuli-venezia-giulia.it\0od.ua\0natura\0"
-"shiki.saitama.jp\0"
-"fvg.it\0pid\0"
-"s3-ap-south-1.amazonaws.com\0"
-"arteducation.museum\0foodnetwork\0"
-"sologne.museum\0sund.no\0"
-"mifune.kumamoto.jp\0sano.tochigi.jp\0"
-"kalmykia.su\0*.firenet.ch\0"
-"takahama.fukui.jp\0direct\0is-an-artist.com\0"
-"shimokitayama.nara.jp\0pin\0"
-"*.transurl.eu\0"
-"wiih.gov.pl\0"
-"american.museum\0"
-"co.technology\0"
-"toyota.yamaguchi.jp\0ferrero\0"
-"higashiizu.shizuoka.jp\0ivano-frankivsk.ua\0mypets.ws\0"
-"inashiki.ibaraki.jp\0balsfjord.no\0khakassia.su\0"
-"nagoya\0"
-"karlsoy.no\0"
-"textile.museum\0"
-"pors\xc3\xa1\xc5\x8bgu.no\0"
-"volvo\0"
-"*.bd\0o.bg\0"
-"aa.no\0"
-"rep.kp\0"
-"matsuda.kanagawa.jp\0shiroishi.saga.jp\0"
-"sklep.pl\0"
-"bungotakada.oita.jp\0"
-"gateway.museum\0"
-"cust.testing.thingdust.io\0"
-"vote\0"
-"minakami.gunma.jp\0"
-"kitaakita.akita.jp\0name\0webhop.info\0"
-"asahi.toyama.jp\0"
-"kalmykia.ru\0"
-"omachi.saga.jp\0"
-"*.ck\0voto\0"
-"hobby-site.org\0"
+"construction\0"
+"culture.museum\0"
+"koori.fukushima.jp\0kiwa.mie.jp\0"
+"iwamizawa.hokkaido.jp\0"
+"kaga.ishikawa.jp\0"
+"rsvp\0"
+"horology.museum\0"
+"gsm.pl\0neustar\0"
+"chtr.k12.ma.us\0"
+"cesenaforl\xc3\xac.it\0indowapblog.com\0"
+"ureshino.mie.jp\0manx.museum\0"
"consulting\0"
-"dnipropetrovsk.ua\0"
-"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0"
-"oya.to\0"
-"ski.no\0"
-"tv.im\0"
-"alibaba\0"
-"art.br\0"
-"resistance.museum\0is-a-lawyer.com\0"
-"tv.it\0pnc\0"
-"rj.leg.br\0"
-"bond\0"
-"orkdal.no\0overhalla.no\0stord.no\0"
-"tomigusuku.okinawa.jp\0"
-"hamamatsu.shizuoka.jp\0"
-"nishiwaki.hyogo.jp\0watch-and-clock.museum\0"
-"cr.it\0shinshiro.aichi.jp\0"
-"rich\0"
-"nat.tn\0servegame.org\0"
-"omiya.saitama.jp\0"
-"*.er\0"
-"bel.tr\0tv.kg\0"
-"durham.museum\0"
-"collection.museum\0"
-"\xe5\xb2\x90\xe9\x98\x9c.jp\0iwate.iwate.jp\0"
-"art.do\0nationalfirearms.museum\0"
-"empresa.bo\0saobernardo.br\0gc.ca\0*.fk\0hemnes.no\0"
-"riobranco.br\0hanawa.fukushima.jp\0hurdal.no\0book\0"
-"sagamihara.kanagawa.jp\0"
-"idnblogger.com\0"
-"df.leg.br\0"
-"chikugo.fukuoka.jp\0impertrix.com\0"
-"forl\xc3\xac""cesena.it\0"
-"jx.cn\0art.dz\0"
-"uz.ua\0"
-"chikuma.nagano.jp\0"
-"aurskog-h\xc3\xb8land.no\0"
-"melhus.no\0"
-"qld.edu.au\0bronnoy.no\0"
-"williamsburg.museum\0"
-"hyundai\0"
+"muroto.kochi.jp\0"
+"tsuruoka.yamagata.jp\0reviews\0"
+"\xd0\xbe\xd1\x80\xd0\xb3\0"
+"click\0"
+"*.northflank.app\0"
"from-ri.com\0"
-"boleslawiec.pl\0"
-"ggee\0"
-"tv.na\0"
-"izena.okinawa.jp\0"
-"flog.br\0okuma.fukushima.jp\0asahi.mie.jp\0primetel.cloud\0"
-"florence.it\0chiyoda.gunma.jp\0"
-"*.transurl.nl\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0"
-"kayabe.hokkaido.jp\0memorial\0ham-radio-op.net\0customer.speedpartner.de\0diskstation.org\0"
-"duckdns.org\0"
-"pro\0s3.dualstack.ap-south-1.amazonaws.com\0uk.com\0mine.nu\0"
-"shimogo.fukushima.jp\0yasugi.shimane.jp\0"
-"uto.kumamoto.jp\0"
-"sandnessjoen.no\0"
-"pru\0"
-"herad.no\0cc.ky.us\0vapor.cloud\0"
-"kr\xc3\xb8""dsherad.no\0"
-"jpmorgan\0"
-"enf.br\0"
-"cc.co.us\0"
-"*.jm\0"
-"art.ht\0"
-"loab\xc3\xa1t.no\0"
-"shiroi.chiba.jp\0"
-"vlog.br\0americanart.museum\0"
-"yamatotakada.nara.jp\0\xc3\xb8rland.no\0"
-"hu.net\0"
-"ashiya.hyogo.jp\0*.kh\0press\0"
-"kawahara.tottori.jp\0d.gv.vc\0barsy.bg\0"
-"csx.cc\0"
-"biz.bb\0"
-"biz.at\0"
+"budejju.no\0"
+"otaki.chiba.jp\0"
+"aid.pl\0"
+"odesa.ua\0"
+"sarpsborg.no\0"
+"kasserver.com\0"
+"ott\0"
+"kashima.ibaraki.jp\0kosuge.yamanashi.jp\0russia.museum\0cc.az.us\0lib.pa.us\0"
+"toya.hokkaido.jp\0"
+"akashi.hyogo.jp\0"
+"academia.bo\0"
+"cri.br\0"
+"friuli-vgiulia.it\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0lukow.pl\0"
+"leirfjord.no\0my-wan.de\0"
+"pet\0"
+"ora.gunma.jp\0pp.se\0pp.ru\0"
+"kumamoto.jp\0kvinnherad.no\0ovh\0"
+"better-than.tv\0"
+"cable-modem.org\0"
+"boats\0wales\0"
+"salerno.it\0"
+"sauherad.no\0"
+"trani-barletta-andria.it\0county.museum\0"
+"toyota\0"
+"cuiaba.br\0"
+"\xc3\xa5mot.no\0kongsberg.no\0"
+"starostwo.gov.pl\0"
+"yamato.fukushima.jp\0hornindal.no\0"
+"gmina.pl\0jp.net\0"
+"pp.ua\0"
+"k12.co.us\0"
+"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0"
+"prato.it\0phd\0"
+"osaki.miyagi.jp\0"
+"\xe7\xb5\x84\xe7\xbb\x87.hk\0lib.mi.us\0"
+"kuriyama.hokkaido.jp\0is-very-evil.org\0"
+"mihara.kochi.jp\0jeep\0marriott\0"
+"ce.leg.br\0"
+"askvoll.no\0mincom.tn\0"
+"financial\0casacam.net\0smushcdn.com\0"
+"mex.com\0"
+"mordovia.su\0"
+"safety\0"
+"pid\0"
+"civilisation.museum\0my.eu.org\0app.os.fedoraproject.org\0"
+"recife.br\0gotsu.shimane.jp\0\xe4\xb8\xad\xe5\x9b\xbd\0"
+"lidl\0hostedpi.com\0"
+"cooperativa.bo\0sunndal.no\0"
+"pin\0"
+"ryukyu\0twmail.net\0"
+"loginline.app\0"
+"na.it\0karlsoy.no\0daemon.panel.gg\0"
+"hair\0"
+"from-sd.com\0in.london\0"
+"hatoyama.saitama.jp\0\xe4\xb8\xad\xe5\x9c\x8b\0"
+"pizza\0"
+"ueno.gunma.jp\0"
+"friuli-venezia-giulia.it\0ras.ru\0"
+"loseyourip.com\0"
+"higashi.fukushima.jp\0"
+"life\0"
+"lib.ia.us\0"
+"dyndns1.de\0"
+"aero\0"
+"busan.kr\0*.hosting.ovh.net\0"
+"troandin.no\0"
+"grainger\0"
+"mordovia.ru\0"
+"gitlab.io\0"
+"k12.wi.us\0"
+"balsfjord.no\0is-a-geek.com\0*.transurl.be\0"
+"mayfirst.org\0"
+"us.com\0"
+"reisen\0"
+"wy.us\0sellsyourhome.org\0"
+"diamonds\0ua.rs\0"
+"showa.gunma.jp\0stream\0"
+"yk.ca\0"
+"sande.more-og-romsdal.no\0"
+"tosa.kochi.jp\0resistance.museum\0"
+"carrd.co\0"
+"kakinoki.shimane.jp\0"
+"vic.au\0dr\xc3\xb8""bak.no\0swiebodzin.pl\0"
+"gen.mi.us\0"
+"aeroclub.aero\0"
+"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0est-a-la-masion.com\0"
+"labor.museum\0eurodir.ru\0"
+"ohda.shimane.jp\0edgestack.me\0"
+"wakasa.fukui.jp\0vip.jelastic.cloud\0"
+"taira.toyama.jp\0ngo.lk\0pnc\0"
+"indigena.bo\0uto.kumamoto.jp\0"
+"okegawa.saitama.jp\0lancashire.museum\0"
+"sorfold.no\0"
+"seat\0"
+"chase\0"
+"forex\0phx.enscaled.us\0"
+"trentinosued-tirol.it\0"
+"kazo.saitama.jp\0"
+"notaires.km\0"
+"yoka.hyogo.jp\0fh.se\0kerryhotels\0nl.eu.org\0"
+"cc.mt.us\0cc.nd.us\0"
+"us.ax\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0copro.uk\0"
+"stryn.no\0citi\0""1337.pictures\0"
+"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0ngo.ng\0"
+"i.bg\0"
+"hamatama.saga.jp\0"
+"mazury.pl\0like\0"
+"webhop.net\0*.transurl.eu\0"
+"championship.aero\0"
+"dyndns-wiki.com\0"
+"kommune.no\0city\0eu-central-1.elasticbeanstalk.com\0"
+"kviteseid.no\0"
+"berg.no\0jcloud.ik-server.com\0""1kapp.com\0"
+"reise\0"
+"naroy.no\0"
+"monticello.museum\0"
+"v-info.info\0"
+"interactive.museum\0"
+"azerbaijan.su\0"
+"sande.m\xc3\xb8re-og-romsdal.no\0sytes.net\0"
+"fishing\0s3.dualstack.ap-southeast-2.amazonaws.com\0"
+"from-ms.com\0from-nc.com\0"
+"ngo.ph\0seek\0fbxos.fr\0"
+"federation.aero\0"
+"figueres.museum\0"
+"eidskog.no\0"
+"graz.museum\0store\0enscaled.sg\0"
+"obama.nagasaki.jp\0"
+"kyoto.jp\0"
+"cri.nz\0abogado\0asso.eu.org\0"
+"jgora.pl\0dyn53.io\0"
+"defense.tn\0"
+"pro\0limo\0"
+"salvador.br\0minamioguni.kumamoto.jp\0minano.saitama.jp\0lifestyle\0n4t.co\0"
+"1.bg\0"
+"ci.it\0kamigori.hyogo.jp\0"
+"pru\0discourse.team\0"
+"\xd0\xbc\xd1\x81\xd0\xba.\xd1\x80\xd1\x83\xd1\x81\0"
+"etne.no\0"
+"parma.it\0sk\xc3\xa1nit.no\0kicks-ass.org\0"
+"itayanagi.aomori.jp\0kobierzyce.pl\0link\0"
+"nakagawa.hokkaido.jp\0"
+"ichinomiya.aichi.jp\0portal.museum\0"
+"police.uk\0"
+"zamami.okinawa.jp\0"
+"motoyama.kochi.jp\0"
+"okagaki.fukuoka.jp\0"
+"actor\0"
+"k12.az.us\0"
+"ogano.saitama.jp\0estate\0statefarm\0"
"pub\0"
-"mol.it\0"
-"westfalen.museum\0"
-"takahagi.ibaraki.jp\0barsy.ca\0"
-"biz.az\0kashima.ibaraki.jp\0godaddy\0"
-"schokoladen.museum\0"
-"ogano.saitama.jp\0"
-"otaki.nagano.jp\0sakura\0"
-"realty\0"
-"nationwide\0"
-"sr.it\0properties\0"
-"tamaki.mie.jp\0"
-"barsy.de\0"
-"urbinopesaro.it\0navy\0certmgr.org\0"
-"it.ao\0"
-"*.mm\0"
-"hakui.ishikawa.jp\0"
-"tv.sd\0pwc\0software\0"
-"bn.it\0"
-"biz.cy\0trentin-sudtirol.it\0taito.tokyo.jp\0"
-"\xe4\xb8\xad\xe4\xbf\xa1\0"
-"biz.dk\0"
-"brasil.museum\0"
-"asnes.no\0scrapping.cc\0"
-"jcloud-ver-jpc.ik-server.com\0"
-"nyan.to\0"
-"pisz.pl\0"
-"prd.fr\0"
-"*.np\0"
-"karaganda.su\0"
-"co.events\0"
-"gemological.museum\0intelligence.museum\0"
-"hapmir.no\0"
-"barsy.eu\0"
-"pleskns.com\0"
-"nanbu.yamanashi.jp\0"
-"undersea.museum\0"
-"kita.kyoto.jp\0progressive\0"
-"1337.pictures\0"
-"biz.et\0tsuga.tochigi.jp\0tv.tr\0dynns.com\0"
-"sch.ae\0"
-"higashiyodogawa.osaka.jp\0gratangen.no\0"
-"ma.gov.br\0"
-"yabuki.fukushima.jp\0"
-"biz.fj\0"
-"nerdpol.ovh\0"
-"tv.tz\0"
-"anani.br\0*.pg\0"
-"decorativearts.museum\0gallery.museum\0tokke.no\0cr.ua\0"
-"yamagata.yamagata.jp\0"
-"tenri.nara.jp\0homeip.net\0"
-"mymediapc.net\0"
-"tochigi.tochigi.jp\0eu.org\0"
-"ostroda.pl\0"
-"cherkasy.ua\0s3.ca-central-1.amazonaws.com\0"
-"googlecode.com\0co.education\0"
-"shiranuka.hokkaido.jp\0"
-"yokosuka.kanagawa.jp\0hokuto.yamanashi.jp\0"
-"biz.gl\0"
-"kyoto.jp\0curv.dev\0"
-"amica\0"
-"sk\xc3\xa1nit.no\0style\0"
-"corsica\0"
-"amusement.aero\0"
-"ogose.saitama.jp\0science\0"
-"toyotsu.fukuoka.jp\0ostrowwlkp.pl\0suwalki.pl\0"
-"art.pl\0"
-"mymailer.com.tw\0"
-"aizumi.tokushima.jp\0sunndal.no\0"
-"unazuki.toyama.jp\0cloudcontrolled.com\0"
-"biz.id\0"
-"k12.ny.us\0"
-"clic2000.net\0barsy.in\0"
-"togura.nagano.jp\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0il.eu.org\0barsy.io\0"
-"miyoshi.saitama.jp\0o.se\0"
-"*.sapporo.jp\0"
-"yamatokoriyama.nara.jp\0"
+"ruhr\0"
+"feira.br\0k12.la.us\0ng.eu.org\0"
+"progressive\0"
+"trentino-altoadige.it\0"
+"gamagori.aichi.jp\0tula.su\0"
+"ukiha.fukuoka.jp\0shw.io\0"
+"saintlouis.museum\0ic.gov.pl\0"
+"ullensaker.no\0stuff-4-sale.org\0"
+"courses\0haus\0"
+"ns.ca\0"
+"\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
+"agematsu.nagano.jp\0"
+"workshop.museum\0mail.pl\0est-le-patron.com\0"
+"tsuga.tochigi.jp\0"
+"engineer\0"
+"servemp3.com\0"
+"dell-ogliastra.it\0higashikagura.hokkaido.jp\0"
+"trentino-sued-tirol.it\0klabu.no\0"
+"gniezno.pl\0"
+"lima-city.rocks\0"
+"is-a-geek.org\0"
+"cruise\0pwc\0"
+"wazuka.kyoto.jp\0\xe4\xbf\xa1\xe6\x81\xaf\0"
+"portlligat.museum\0"
+"palermo.it\0bearalv\xc3\xa1hki.no\0"
+"vc.it\0oguni.kumamoto.jp\0lilly\0"
+"saobernardo.br\0barsy.menu\0"
+"gs.vf.no\0is-a-chef.net\0"
+"isleofman.museum\0"
+"childrensgarden.museum\0turek.pl\0"
+"vercel.app\0"
+"ushistory.museum\0"
+"us.kg\0"
+"nishiazai.shiga.jp\0"
+"trentin-s\xc3\xbc""d-tirol.it\0"
+"inderoy.no\0"
+"honbetsu.hokkaido.jp\0*.transurl.nl\0"
+"omega\0"
+"university\0"
+"tsubame.niigata.jp\0ris\xc3\xb8r.no\0couk.me\0pgafan.net\0"
+"matsuzaki.shizuoka.jp\0vindafjord.no\0cc.nm.us\0"
+"mein-vigor.de\0"
+"hidaka.saitama.jp\0hikawa.shimane.jp\0myfirewall.org\0"
+"goiania.br\0"
+"r.bg\0from-de.com\0"
+"port.fr\0"
+"savona.it\0"
+"log.br\0"
+"americanantiques.museum\0"
+"wolomin.pl\0game-server.cc\0"
+"midori.chiba.jp\0suzaka.nagano.jp\0mintere.site\0"
+"trentinoa-adige.it\0"
+"shinagawa.tokyo.jp\0s\xc3\xb8rum.no\0ulvik.no\0"
+"\xc3\xa5seral.no\0os.hedmark.no\0"
+"katsuragi.wakayama.jp\0"
+"nakai.kanagawa.jp\0"
+"vet.br\0us.na\0"
+"live\0"
+"ngo.za\0"
+"kofu.yamanashi.jp\0froya.no\0"
+"swidnik.pl\0"
+"veneto.it\0"
+"lamborghini\0"
+"bashkiria.ru\0"
+"yoshioka.gunma.jp\0i.ng\0ga.us\0"
+"bayern\0"
+"*.dweb.link\0"
+"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0"
+"eid.no\0go.leg.br\0"
+"industria.bo\0"
+"cr.it\0bashkiria.su\0remotewd.com\0"
+"reggioemilia.it\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
+"kozaki.chiba.jp\0sekikawa.niigata.jp\0"
+"gs.cn\0clic2000.net\0"
+"eu-west-2.elasticbeanstalk.com\0radio.am\0"
+"musashino.tokyo.jp\0byen.site\0"
+"sd.cn\0gs.of.no\0total\0"
+"scientist.aero\0"
+"itakura.gunma.jp\0"
+"rome.it\0i.ph\0forum\0yandexcloud.net\0"
+"kasumigaura.ibaraki.jp\0gran.no\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
+"misaki.osaka.jp\0"
+"nishimera.miyazaki.jp\0\xe5\xb9\xbf\xe4\xb8\x9c\0caa.li\0"
+"bungotakada.oita.jp\0myfast.space\0"
+"radio.br\0benevento.it\0"
+"kadogawa.miyazaki.jp\0oishida.yamagata.jp\0cancerresearch\0"
+"hs.run\0"
+"rishiri.hokkaido.jp\0"
+"k12.md.us\0"
+"arita.saga.jp\0"
+"nanmoku.gunma.jp\0ogawa.ibaraki.jp\0"
+"homeunix.net\0"
+"toki.gifu.jp\0nj.us\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0"
+"taxi.br\0dev-myqnapcloud.com\0"
+"lynx.mythic-beasts.com\0"
+"es.gov.br\0shiga.jp\0"
+"bible.museum\0naumburg.museum\0imamat\0verm\xc3\xb6gensberater\0"
+"tingvoll.no\0s3-website.ca-central-1.amazonaws.com\0"
+"ac.ae\0"
+"fuettertdasnetz.de\0"
+"kitakata.miyazaki.jp\0nakagawa.tokushima.jp\0i.se\0"
+"leksvik.no\0"
+"philips\0krellian.net\0"
+"hachirogata.akita.jp\0otake.hiroshima.jp\0"
+"shimane.shimane.jp\0"
+"trentinsud-tirol.it\0horonobe.hokkaido.jp\0report\0"
+"arq.br\0s3-website-sa-east-1.amazonaws.com\0r.cdn77.net\0"
+"allstate\0"
+"mill.museum\0upow.gov.pl\0"
+"ac.at\0ashiya.hyogo.jp\0loyalist.museum\0vinnytsia.ua\0"
+"ac.be\0yamatokoriyama.nara.jp\0"
+"redirectme.net\0"
+"miyoshi.tokushima.jp\0vossevangen.no\0"
+"council.aero\0kawasaki.miyagi.jp\0"
+"karikatur.museum\0"
+"sex.hu\0"
+"delivery\0"
+"nanjo.okinawa.jp\0"
+"sakura.chiba.jp\0cc.de.us\0radio.fm\0"
+"fjell.no\0"
+"fudai.iwate.jp\0"
+"mishima.shizuoka.jp\0privatizehealthinsurance.net\0"
+"fylkesbibl.no\0\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0cyon.site\0"
+"tokai.ibaraki.jp\0kanuma.tochigi.jp\0dyndns.dappnode.io\0"
+"chikuho.fukuoka.jp\0""0e.vc\0"
+"ac.ci\0alesund.no\0cc.nv.us\0"
+"tahara.aichi.jp\0karumai.iwate.jp\0mydatto.net\0"
+"guitars\0hobby-site.org\0"
+"ac.cn\0kurate.fukuoka.jp\0"
+"skanit.no\0"
+"ac.cr\0\xe7\xbd\x91\xe7\xbb\x9c\0"
+"sakura.tochigi.jp\0"
+"assabu.hokkaido.jp\0we.bs\0"
+"reklam.hu\0"
+"biz.bb\0ac.cy\0"
+"biz.at\0"
+"jamison.museum\0"
+"gangwon.kr\0onavstack.net\0"
+"daiwa.hiroshima.jp\0*.magentosite.cloud\0"
+"biz.az\0baseball.museum\0\xe5\x95\x86\xe6\xa5\xad.tw\0freeboxos.fr\0"
+"serveexchange.com\0gotpantheon.com\0"
+"sherbrooke.museum\0"
+"arai.shizuoka.jp\0"
+"lundbeck\0"
+"red\0"
+"teshikaga.hokkaido.jp\0"
+"lier.no\0"
+"cs.keliweb.cloud\0"
+"zara\0"
+"hokuto.yamanashi.jp\0"
+"medecin.km\0santafe.museum\0spydeberg.no\0"
+"fukumitsu.toyama.jp\0ren\0sexy\0"
+"odawara.kanagawa.jp\0"
+"servehumour.com\0"
+"ac.fj\0kraanghke.no\0qvc\0"
+"\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"biz.cy\0"
+"kitashiobara.fukushima.jp\0minato.tokyo.jp\0youth.museum\0biz.dk\0"
+"expert\0"
+"exhibition.museum\0"
+"hl.cn\0americana.museum\0"
"graphox.us\0"
-"kagamiishi.fukushima.jp\0hizen.saga.jp\0"
-"shopping\0"
-"prd.km\0"
-"living\0"
-"kuji.iwate.jp\0"
-"matsuura.nagasaki.jp\0england.museum\0"
-"cloudaccess.net\0"
-"newport.museum\0clubmed\0\xe4\xb8\x96\xe7\x95\x8c\0"
-"komono.mie.jp\0is-not-certified.com\0"
-"pharmaciens.km\0*.futurecms.at\0"
-"\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0njs.jelastic.vps-host.net\0"
-"konan.shiga.jp\0"
-"vestre-toten.no\0us-east-1.amazonaws.com\0"
-"my.id\0paas.leviracloud.eu\0"
-"lpages.co\0"
-"klodzko.pl\0hu.eu.org\0ie.eu.org\0"
-"hatogaya.saitama.jp\0biz.ki\0"
-"prd.mg\0rr.leg.br\0"
-"vs.it\0"
-"4u.com\0"
-"art.sn\0"
-"rn.it\0lib.ne.us\0"
-"nose.osaka.jp\0roma.museum\0"
-"agr.br\0"
-"wmcloud.org\0"
-"tokorozawa.saitama.jp\0"
-"latina.it\0tranibarlettaandria.it\0\xc3\xa1laheadju.no\0mortgage\0"
-"iwamizawa.hokkaido.jp\0"
-"komoro.nagano.jp\0\xeb\x8b\xb7\xeb\x84\xb7\0"
-"fujixerox\0"
-"biz.ls\0s\xc3\xb8mna.no\0go.dyndns.org\0"
-"trento.it\0sukumo.kochi.jp\0"
-"tachiarai.fukuoka.jp\0"
-"makurazaki.kagoshima.jp\0rs.leg.br\0sc.leg.br\0spdns.eu\0"
-"schule\0barsy.online\0"
-"\xe6\xbe\xb3\xe9\x96\x80\0"
-"santamaria.br\0"
-"isehara.kanagawa.jp\0"
-"motosu.gifu.jp\0delmenhorst.museum\0"
+"noho.st\0"
+"photography.museum\0"
+"ac.gn\0jogasz.hu\0"
+"basel.museum\0"
+"\xd1\x80\xd1\x83\xd1\x81\0"
+"cr.ua\0"
+"winners\0"
+"pesarourbino.it\0"
+"sennan.osaka.jp\0oracle\0"
+"autos\0"
+"ed.ao\0abeno.osaka.jp\0immobilien\0"
+"biz.et\0omi.niigata.jp\0"
+"plantation.museum\0"
+"shobara.hiroshima.jp\0"
+"kujukuri.chiba.jp\0"
+"nishi.fukuoka.jp\0"
+"biz.fj\0"
+"\xd8\xb9\xd8\xb1\xd8\xa8\0"
+"ac.id\0"
+"boehringer\0meinforum.net\0"
+"cosenza.it\0"
+"tsukumi.oita.jp\0nachikatsuura.wakayama.jp\0prod\0poznan.pl\0gov.scot\0"
+"ascolipiceno.it\0familyds.com\0"
+"topology.museum\0prof\0"
+"ac.il\0physio\0"
+"ac.im\0"
+"ac.in\0romskog.no\0"
+"newjersey.museum\0"
+"ac.ir\0delmenhorst.museum\0sex.pl\0"
+"\xc4\x8d\xc3\xa1hcesuolo.no\0ril\0biz.gl\0ditchyourip.com\0"
+"ed.ci\0chambagri.fr\0"
+"pe.ca\0karmoy.no\0"
+"rio\0"
+"rip\0torproject.net\0"
+"ed.cr\0tama.tokyo.jp\0mosj\xc3\xb8""en.no\0"
+"zaporizhzhia.ua\0"
+"notaires.fr\0lavagis.no\0"
+"ac.jp\0rovno.ua\0"
+"natural.bo\0hotmail\0"
+"r.se\0"
+"ac.ke\0"
+"cloud.fedoraproject.org\0vs.mythic-beasts.com\0za.net\0"
+"eng.br\0shijonawate.osaka.jp\0"
+"yasuda.kochi.jp\0"
+"sci.eg\0nogi.tochigi.jp\0"
+"biz.id\0cpa.pro\0"
"dabur\0"
-"sch.id\0kadogawa.miyazaki.jp\0myfirewall.org\0"
-"ayagawa.kagawa.jp\0"
+"frog.museum\0grajewo.pl\0"
+"ac.kr\0"
+"safety.aero\0cloudns.biz\0"
+"ol.no\0"
+"endoftheinternet.org\0"
+"tochigi.jp\0"
+"nango.fukushima.jp\0"
+"ac.lk\0"
+"museum\0"
+"ac.ma\0k12.tn.us\0"
+"matera.it\0alstom\0ferrari\0"
+"ono.fukui.jp\0shimokitayama.nara.jp\0ac.ls\0"
+"kitagawa.kochi.jp\0tachikawa.tokyo.jp\0"
+"ac.me\0hawaii.museum\0coupons\0"
+"phoenix.museum\0"
+"fastvps-server.com\0"
+"tozawa.yamagata.jp\0uenohara.yamanashi.jp\0"
+"kamiichi.toyama.jp\0"
+"biz.ki\0loginline.io\0"
+"furubira.hokkaido.jp\0servehalflife.com\0"
+"nagai.yamagata.jp\0washtenaw.mi.us\0"
+"ac.mu\0bale.museum\0"
+"ac.mw\0lefrak\0"
+"eu.pythonanywhere.com\0"
+"suzuka.mie.jp\0ac.ni\0twmail.org\0"
+"ac.mz\0linde\0togliatti.su\0"
+"friuli-veneziagiulia.it\0square7.de\0"
+"ikata.ehime.jp\0"
+"lindesnes.no\0"
+"b.ssl.fastly.net\0"
+"hikari.yamaguchi.jp\0opoczno.pl\0"
+"shirosato.ibaraki.jp\0"
+"lib.ct.us\0"
+"fujinomiya.shizuoka.jp\0"
+"itoman.okinawa.jp\0\xd5\xb0\xd5\xa1\xd5\xb5\0"
+"fujikawa.shizuoka.jp\0"
+"biz.ls\0ac.nz\0"
+"filegear-jp.me\0"
+"consultant.aero\0ferrara.it\0ac.pa\0serveblog.net\0"
+"africa.com\0"
+"valle.no\0amfam\0"
+"watchandclock.museum\0is-a-nurse.com\0miniserver.com\0"
+"hamamatsu.shizuoka.jp\0drangedal.no\0"
+"sd.us\0"
+"ham-radio-op.net\0"
"biz.mv\0"
-"biz.mw\0cloudns.club\0"
-"taxi.br\0"
-"suedtirol.it\0biz.ni\0"
-"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x80\xd1\x83\xd1\x81\0"
-"kusu.oita.jp\0dray-dns.de\0"
-"mysecuritycamera.org\0"
-"alaheadju.no\0"
-"kh.ua\0"
-"chikuho.fukuoka.jp\0"
-"filatelia.museum\0museum.tt\0"
-"suzu.ishikawa.jp\0askim.no\0"
-"sch.ir\0biz.nr\0"
-"\xe6\xb2\x96\xe7\xb8\x84.jp\0"
-"gyeonggi.kr\0"
-"!city.sapporo.jp\0skoczow.pl\0"
-"wpdevcloud.com\0"
-"koge.tottori.jp\0"
-"val-d-aosta.it\0sch.jo\0pilots.museum\0xerox\0"
-"claims\0app.lmpm.com\0"
-"smola.no\0"
-"homeftp.org\0"
-"kasumigaura.ibaraki.jp\0"
-"school.na\0"
-"langev\xc3\xa5g.no\0"
-"pharmacy\0"
-"biz.pk\0"
-"tatsuno.hyogo.jp\0biz.pl\0homedepot\0ca-central-1.elasticbeanstalk.com\0"
-"agro.bo\0"
-"biz.pr\0freedesktop.org\0"
-"mulhouse.museum\0tattoo\0"
-"cheap\0"
-"x.bg\0gotdns.ch\0*.telebit.xyz\0"
-"jl.serv.net.mx\0"
-"3.bg\0media.hu\0"
-"consulado.st\0k12.nm.us\0"
-"sch.lk\0storj.farm\0"
-"nagano.jp\0nakano.tokyo.jp\0"
-"vaksdal.no\0"
-"akagi.shimane.jp\0berkeley.museum\0"
-"school.nz\0"
-"shinjo.yamagata.jp\0franziskaner.museum\0"
-"gushikami.okinawa.jp\0mango\0"
-"soc.dz\0apigee.io\0"
-"red\0"
-"fujinomiya.shizuoka.jp\0emb.kw\0"
-"sch.ly\0"
-"skiptvet.no\0barrell-of-knowledge.info\0"
-"yamagata.nagano.jp\0"
-"shinichi.hiroshima.jp\0"
-"ren\0"
-"mordovia.su\0"
-"zentsuji.kagawa.jp\0"
-"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0"
-"qvc\0"
-"sch.ng\0"
-"wang\0*.ex.futurecms.at\0"
-"bauhaus\0rn.leg.br\0spdns.de\0"
-"is-a-soxfan.org\0"
-"cafe\0"
-"bozen-suedtirol.it\0"
-"hole.no\0"
-"point2this.com\0"
-"farsund.no\0"
-"lib.pr.us\0"
-"biz.ss\0aero.tt\0"
-"shimamoto.osaka.jp\0gs.hm.no\0\xe6\xbe\xb3\xe9\x97\xa8\0"
-"pz.it\0lib.mi.us\0"
-"research.aero\0pol.dz\0grane.no\0"
-"lu.it\0me.it\0lib.il.us\0voorloper.cloud\0"
-"izumisano.osaka.jp\0biz.tj\0"
-"trentins\xc3\xbc""dtirol.it\0lib.dc.us\0"
-"karuizawa.nagano.jp\0"
-"leczna.pl\0"
-"samukawa.kanagawa.jp\0video\0home.dyndns.org\0"
-"hamada.shimane.jp\0biz.ua\0"
-"biz.tr\0"
-"biz.tt\0\xe6\x97\xb6\xe5\xb0\x9a\0"
-"aero.mv\0"
-"ambulance.aero\0"
-"fuettertdasnetz.de\0gr.eu.org\0"
-"lyngen.no\0"
-"me.ke\0"
-"szczecin.pl\0ro.leg.br\0"
-"yakumo.shimane.jp\0"
-"dnsdojo.org\0ddnslive.com\0"
-"lunner.no\0sch.qa\0"
-"shibata.miyagi.jp\0takahata.yamagata.jp\0hareid.no\0mordovia.ru\0"
-"kartuzy.pl\0"
-"lapy.pl\0"
-"sandvikcoromant\0vs.mythic-beasts.com\0"
-"biz.vn\0"
-"akune.kagoshima.jp\0ril\0"
-"oe.yamagata.jp\0wolterskluwer\0"
-"sassari.it\0from-al.com\0"
-"stjordal.no\0rio\0"
-"rip\0from-mo.com\0"
-"nishikata.tochigi.jp\0duck\0"
-"s\xc3\xb8r-fron.no\0"
-"vevelstad.no\0"
-"us.reclaim.cloud\0"
-"avianca\0edu.eu.org\0"
-"uri.arpa\0"
-"pol.ht\0sch.sa\0"
-"museum.mv\0sigdal.no\0"
-"museum.mw\0"
-"matsusaka.mie.jp\0orkanger.no\0skanit.no\0"
-"its.me\0"
-"kumenan.okayama.jp\0museum.no\0insurance\0oldnavy\0backplaneapp.io\0"
-"sch.so\0"
-"drammen.no\0media.pl\0"
-"observer\0vladikavkaz.ru\0"
-"ascoli-piceno.it\0"
-"equipment.aero\0"
-"yahaba.iwate.jp\0"
-"koeln.museum\0"
-"ninohe.iwate.jp\0soc.lk\0casino\0xfinity\0"
-"arakawa.saitama.jp\0museum.om\0"
-"assisi.museum\0bo.telemark.no\0"
-"d.bg\0"
-"takayama.gifu.jp\0k12.la.us\0"
-"wa.edu.au\0rns.tn\0vladikavkaz.su\0"
-"geology.museum\0call\0"
-"palace.museum\0skien.no\0industries\0"
-"beauty\0"
-"alfaromeo\0nv.elastyco.com\0"
-"meldal.no\0"
-"biz.zm\0frontdoor\0"
-"tatebayashi.gunma.jp\0"
-"bindal.no\0"
-"camp\0"
-"australia.museum\0lezajsk.pl\0"
-"salangen.no\0"
-"kiryu.gunma.jp\0netlify.app\0"
-"kakogawa.hyogo.jp\0"
-"puglia.it\0nisshin.aichi.jp\0"
-"esan.hokkaido.jp\0"
-"izumi.osaka.jp\0gallup\0photos\0"
-"leikanger.no\0meland.no\0demon.nl\0"
-"wanouchi.gifu.jp\0"
-"\xd0\xba\xd0\xbe\xd0\xbc\0"
-"airforce\0"
-"nakayama.yamagata.jp\0"
-"himeshima.oita.jp\0"
-"alabama.museum\0"
-"nannestad.no\0"
-"urakawa.hokkaido.jp\0yoita.niigata.jp\0homelinux.com\0"
-"cpa.pro\0"
-"kaneyama.fukushima.jp\0"
-"birthplace.museum\0"
-"turin.it\0"
-"asaka.saitama.jp\0"
-"us.eu.org\0"
-"tynset.no\0"
-"is-a-hunter.com\0"
-"ivanovo.su\0"
-"inuyama.aichi.jp\0tsuno.kochi.jp\0muos\xc3\xa1t.no\0"
-"augustow.pl\0serveirc.com\0"
-"vall\xc3\xa9""edaoste.it\0"
-"me.so\0"
-"gjesdal.no\0ar.com\0"
-"bc.ca\0baltimore.museum\0"
-"ullensvang.no\0"
-"me.tc\0"
-"\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0"
-"tires\0africa.com\0"
-"juif.museum\0"
-"s3-website.eu-west-3.amazonaws.com\0*.azurecontainer.io\0"
-"tendo.yamagata.jp\0parti.se\0onred.one\0"
-"prochowice.pl\0racing\0"
-"inf.br\0kota.aichi.jp\0ikeda.nagano.jp\0\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0"
+"pro.az\0biz.mw\0"
+"biz.my\0biz.ni\0"
+"shinonsen.hyogo.jp\0url.tw\0"
+"tsumagoi.gunma.jp\0ac.pr\0"
+"giessen.museum\0"
+"pro.br\0ravendb.run\0"
+"ritto.shiga.jp\0"
+"pe.it\0"
+"biz.nr\0"
+"camdvr.org\0"
+"ed.jp\0"
+"s3-website.ap-northeast-2.amazonaws.com\0"
+"square7.ch\0"
+"sinaapp.com\0"
+"tohnosho.chiba.jp\0"
+"lib.al.us\0"
+"wpenginepowered.com\0"
"sap\0"
-"cesenaforl\xc3\xac.it\0"
-"sas\0"
-"nesoddtangen.no\0afamilycompany\0dev.static.land\0"
-"kongsvinger.no\0"
-"trd.br\0yono.saitama.jp\0"
-"\xe9\x95\xb7\xe9\x87\x8e.jp\0fujikawa.shizuoka.jp\0"
-"care\0sbi\0"
-"sch.zm\0"
-"\xe7\xbb\x84\xe7\xb9\x94.hk\0agano.niigata.jp\0newmexico.museum\0me.tz\0"
-"me.uk\0"
-"convent.museum\0"
-"ecologia.bo\0gose.nara.jp\0yosemite.museum\0czest.pl\0neko.am\0"
-"stockholm.museum\0sca\0"
-"inf.cu\0scb\0"
+"ravenna.it\0marugame.kagawa.jp\0atsugi.kanagawa.jp\0"
+"hl.no\0"
+"software.aero\0sas\0"
+"unnan.shimane.jp\0"
+"miyama.fukuoka.jp\0toride.ibaraki.jp\0mattel\0"
+"pro.cy\0"
+"rugby\0"
+"doomdns.com\0"
+"aso.kumamoto.jp\0sbi\0"
+"xnbay.com\0"
+"navigation.aero\0divttasvuotna.no\0biz.pk\0"
+"biz.pl\0ac.rs\0k12.mn.us\0"
+"ac.se\0energy\0radio\0ac.ru\0is-a-geek.net\0"
+"pe.kr\0"
+"pro.ec\0kisarazu.chiba.jp\0drobak.no\0ac.rw\0"
+"sca\0"
+"heguri.nara.jp\0biz.pr\0scb\0"
"sbs\0"
-"me.us\0"
-"ogasawara.tokyo.jp\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0casa\0"
-"kagoshima.kagoshima.jp\0cars\0politie\0servemp3.com\0"
-"nes.akershus.no\0"
-"trentinsuedtirol.it\0keisen.fukuoka.jp\0case\0"
-"cash\0"
-"s3-us-east-2.amazonaws.com\0"
-"honjo.saitama.jp\0gift\0"
-"bauern.museum\0"
-"kizu.kyoto.jp\0loginline.dev\0mein-vigor.de\0"
-"vps.mcdir.ru\0"
-"me.vu\0"
-"se.leg.br\0"
-"saga.jp\0castres.museum\0beta.bounty-full.com\0"
-"firewall-gateway.com\0"
-"moskenes.no\0"
-"arte.bo\0arts.museum\0"
-"suwa.nagano.jp\0x.se\0nis.za\0"
-"my-gateway.de\0"
-"mg.gov.br\0"
-"hamatama.saga.jp\0"
-"kamiizumi.saitama.jp\0jaguar\0"
-"nikaho.akita.jp\0"
-"applinzi.com\0"
-"oyabe.toyama.jp\0s\xc3\xb8rfold.no\0"
-"sakaiminato.tottori.jp\0"
-"passenger-association.aero\0run\0"
-"air-surveillance.aero\0"
-"ritto.shiga.jp\0j\xc3\xb8rpeland.no\0mj\xc3\xb8ndalen.no\0"
-"mlbfan.org\0community-pro.de\0"
-"nextdirect\0ses\0"
-"ba.leg.br\0"
-"dynserv.org\0"
-"kpmg\0sew\0shell\0"
+"homebuilt.aero\0miyoshi.hiroshima.jp\0"
+"karasjok.no\0"
+"soka.saitama.jp\0"
+"al.it\0"
+"sumoto.hyogo.jp\0"
+"friulivenezia-giulia.it\0\xd1\x81\xd1\x80\xd0\xb1\0*.0emm.com\0"
+"amagasaki.hyogo.jp\0"
+"rhcloud.com\0"
+"ac.th\0"
+"eco.br\0ac.sz\0ac.tj\0juegos\0"
+"windmill.museum\0"
+"forum.hu\0"
+"tarama.okinawa.jp\0artdeco.museum\0ilawa.pl\0"
+"pro.fj\0"
+"oncilla.mythic-beasts.com\0"
+"accountants\0avianca\0"
+"ikusaka.nagano.jp\0b\xc3\xb8mlo.no\0"
+"author.aero\0"
+"we.tc\0"
+"fyresdal.no\0ac.ug\0"
+"lincoln.museum\0ac.tz\0"
+"ac.uk\0from-va.com\0"
+"kawara.fukuoka.jp\0"
+"webhop.info\0"
+"kr\xc3\xa5""anghke.no\0lib.gu.us\0"
+"utah.museum\0be.ax\0"
+"kvanangen.no\0"
+"soc.dz\0"
+"h\xc3\xa5.no\0s3.cn-north-1.amazonaws.com.cn\0"
+"sciences.museum\0"
+"takazaki.miyazaki.jp\0and\xc3\xb8y.no\0limited\0run\0"
+"mycloud.by\0bloxcms.com\0"
+"misato.wakayama.jp\0"
+"biz.ss\0ses\0"
+"watch-and-clock.museum\0akrehamn.no\0"
+"hdfc\0"
+"ac.vn\0sew\0"
"sex\0"
-"shinjo.nara.jp\0monmouth.museum\0"
-"pol.tr\0bugatti\0"
-"mar.it\0"
-"otofuke.hokkaido.jp\0"
-"imdb\0"
-"bio.br\0tjmaxx\0"
-"sfr\0"
-"naoshima.kagawa.jp\0"
-"nantan.kyoto.jp\0rwe\0"
-"shirataka.yamagata.jp\0"
-"is-a-candidate.org\0"
-"mitsubishi\0"
-"dvag\0"
-"cologne\0"
-"ed.ao\0"
-"kanonji.kagawa.jp\0coach\0education\0"
-"association.museum\0"
-"kunigami.okinawa.jp\0haibara.shizuoka.jp\0"
-"meloy.no\0br.com\0cdn77-ssl.net\0"
-"nakagyo.kyoto.jp\0kahoku.yamagata.jp\0"
-"grocery\0"
-"bozen.it\0"
-"tgory.pl\0"
-"h\xc3\xa1""bmer.no\0"
-"kiwi.nz\0agro.pl\0"
-"ed.ci\0geek.nz\0"
-"eating-organic.net\0"
-"evenassi.no\0"
-"kitakata.fukushima.jp\0"
-"nara.jp\0"
-"imb.br\0"
-"ed.cr\0"
-"kazuno.akita.jp\0"
-"shimizu.shizuoka.jp\0"
-"izumiotsu.osaka.jp\0cymru.museum\0pgfog.com\0"
-"tirol\0"
-"honjyo.akita.jp\0"
-"\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0fujitsu\0"
-"kembuchi.hokkaido.jp\0la.us\0ski\0"
-"rade.no\0"
-"brunel.museum\0"
-"memorial.museum\0unicom\0"
-"mediocampidano.it\0from-de.com\0"
-"dvrcam.info\0"
-"kawaba.gunma.jp\0cc.wi.us\0"
-"yaizu.shizuoka.jp\0cc.sd.us\0"
-"inf.mk\0loten.no\0"
-"kitagawa.kochi.jp\0sky\0"
-"judygarland.museum\0ulm.museum\0"
-"norddal.no\0"
-"cloud.jelastic.open.tim.it\0"
-"krasnik.pl\0"
-"iglesiascarbonia.it\0"
-"d.se\0"
-"jinsekikogen.hiroshima.jp\0"
-"adult.ht\0"
-"\xd0\xba\xd1\x80\xd1\x8b\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
-"tozawa.yamagata.jp\0"
-"brandywinevalley.museum\0kherson.ua\0"
-"baseball.museum\0"
-"edunet.tn\0"
-"watch\0"
-"babia-gora.pl\0"
-"cri.br\0is-a-teacher.com\0"
-"am.leg.br\0"
-"television.museum\0"
-"nishinoomote.kagoshima.jp\0omi.nagano.jp\0"
+"takamori.kumamoto.jp\0biz.tj\0"
+"def.br\0"
+"legal\0platform0.app\0"
+"itabashi.tokyo.jp\0\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0"
+"takahagi.ibaraki.jp\0yodobashi\0"
+"pro.ht\0kyotanabe.kyoto.jp\0kautokeino.no\0biz.ua\0"
+"kuroishi.aomori.jp\0biz.tr\0sfr\0"
+"niimi.okayama.jp\0"
+"agriculture.museum\0biz.tt\0"
+"versailles.museum\0rwe\0"
+"!city.nagoya.jp\0"
+"platter-app.dev\0"
+"ed.pw\0"
+"sv.it\0biratori.hokkaido.jp\0"
+"nose.osaka.jp\0"
+"lasalle\0"
+"krakow.pl\0"
+"al.no\0"
+"olawa.pl\0wien.funkfeuer.at\0"
+"lur\xc3\xb8y.no\0"
+"chernovtsy.ua\0"
+"\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0"
+"bruxelles.museum\0sm.ua\0"
+"biz.vn\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
+"operaunite.com\0"
+"medecin.fr\0mywire.org\0"
+"nakano.tokyo.jp\0skiptvet.no\0"
+"netlify.app\0"
+"limanowa.pl\0"
+"yandex\0"
+"ac.za\0"
+"her\xc3\xb8y.nordland.no\0"
+"in-the-band.net\0"
+"kyowa.hokkaido.jp\0""611.to\0"
+"ac.zm\0travelers\0"
+"funahashi.toyama.jp\0tysfjord.no\0"
+"oppdal.no\0"
+"minamiminowa.nagano.jp\0"
+"pn.it\0pictures\0"
+"ac.zw\0gitapp.si\0"
+"miura.kanagawa.jp\0"
+"uslivinghistory.museum\0"
+"ski\0""12hp.de\0"
+"zachpomor.pl\0is-a-green.com\0be.gy\0"
+"hamburg\0"
+"blackbaudcdn.net\0"
+"pro.na\0homeunix.org\0"
+"aisho.shiga.jp\0verdal.no\0"
+"pro.mv\0foodnetwork\0"
"servesarcasm.com\0"
-"homeftp.net\0"
-"otsuki.kochi.jp\0"
-"shiwa.iwate.jp\0"
-"tondabayashi.osaka.jp\0"
-"better-than.tv\0impertrixcdn.com\0"
-"lib.ut.us\0"
-"mitsuke.niigata.jp\0\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0"
-"rc.it\0"
-"aurskog-holand.no\0stokke.no\0"
-"chrome\0ravendb.community\0"
-"mn.it\0spa\0xy.ax\0"
-"chippubetsu.hokkaido.jp\0lavangen.no\0"
-"taifun-dns.de\0"
-"witd.gov.pl\0"
-"mitane.akita.jp\0chijiwa.nagasaki.jp\0wlocl.pl\0"
-"barueri.br\0soy\0"
-"*.dweb.link\0"
-"immo\0"
-"omachi.nagano.jp\0n\xc3\xa1vuotna.no\0gos.pk\0"
-"jan-mayen.no\0"
+"sky\0"
+"miharu.fukushima.jp\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0"
+"soc.lk\0"
+"depot.museum\0biz.zm\0"
+"insurance.aero\0waw.pl\0"
+"tana.no\0"
+"okinawa.jp\0forde.no\0"
+"ginan.gifu.jp\0"
+"tokigawa.saitama.jp\0gitpage.si\0"
+"cheap\0"
+"takinoue.hokkaido.jp\0sydney.museum\0""12hp.at\0"
+"otobe.hokkaido.jp\0kaisei.kanagawa.jp\0versicherung\0"
+"pro.om\0"
+"ass.km\0"
+"vercel.dev\0"
+"georgia.su\0"
+"shopitsite.com\0"
+"sukumo.kochi.jp\0"
+"agdenes.no\0own.pm\0"
+"off.ai\0"
+"london.cloudapps.digital\0"
+"cloudfront.net\0"
+"training\0"
+"wakuya.miyagi.jp\0brandywinevalley.museum\0"
+"orsites.com\0"
+"shaw\0""12hp.ch\0"
+"monzaedellabrianza.it\0melhus.no\0"
+"matsubara.osaka.jp\0"
+"ma.gov.br\0dovre.no\0pro.pr\0"
+"oygarden.no\0"
+"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0"
+"misawa.aomori.jp\0"
+"maibara.shiga.jp\0health.museum\0"
+"tours\0"
+"s3-ap-northeast-2.amazonaws.com\0"
+"al.us\0to.gt\0"
+"\xec\x82\xbc\xec\x84\xb1\0"
+"\xe5\x80\x8b\xe4\xba\xba.hk\0"
+"pulawy.pl\0"
+"sorum.no\0no-ip.org\0"
+"spa\0"
+"okoppe.hokkaido.jp\0sosnowiec.pl\0holdings\0"
+"higashiomi.shiga.jp\0"
+"club\0"
+"wloclawek.pl\0"
+"kosai.shizuoka.jp\0nasushiobara.tochigi.jp\0soy\0"
+"aland.fi\0altervista.org\0"
+"sor-odal.no\0global.prod.fastly.net\0"
+"s3-website-us-west-2.amazonaws.com\0"
+"clinique\0"
+"udine.it\0turystyka.pl\0"
"tab\0"
-"ed.jp\0fh.se\0"
-"hotels\0"
-"pippu.hokkaido.jp\0"
-"\xe6\xbb\x8b\xe8\xb3\x80.jp\0"
-"openair.museum\0"
-"is-into-cars.com\0"
-"higashikagura.hokkaido.jp\0"
-"soja.okayama.jp\0"
-"he.cn\0"
-"shiftedit.io\0"
-"herokuapp.com\0"
-"midtre-gauldal.no\0directory\0"
-"tax\0"
-"friulivenezia-giulia.it\0\xe7\xbe\xa4\xe9\xa6\xac.jp\0cbre\0"
-"pymnt.uk\0"
+"mo.cn\0dnsdojo.com\0"
+"*.developer.app\0"
+"to.it\0bydgoszcz.pl\0"
+"aioi.hyogo.jp\0tsunan.niigata.jp\0nsupdate.info\0"
+"tsurugashima.saitama.jp\0"
+"sld.do\0gs.tr.no\0"
+"workers.dev\0"
+"philately.museum\0pomorze.pl\0"
+"brindisi.it\0"
+"natori.miyagi.jp\0"
+"naustdal.no\0fastlylb.net\0"
+"athleta\0tax\0"
+"nis.za\0"
+"miyashiro.saitama.jp\0"
+"kisofukushima.nagano.jp\0"
"srl\0"
-"nyny.museum\0"
-"s3.amazonaws.com\0"
-"minami-alps.yamanashi.jp\0enonic.io\0"
-"nishitosa.kochi.jp\0naustdal.no\0paas.massivegrid.com\0"
-"publishproxy.com\0"
-"halden.no\0"
-"narusawa.yamanashi.jp\0astronomy.museum\0"
-"tci\0\xe5\xae\xb6\xe9\x9b\xbb\0armenia.su\0"
-"yasuda.kochi.jp\0"
-"inf.ua\0"
-"sjc.br\0yoshimi.saitama.jp\0radoy.no\0"
-"meiwa.gunma.jp\0"
-"toyotomi.hokkaido.jp\0utashinai.hokkaido.jp\0"
-"hokuto.hokkaido.jp\0stc\0"
-"film.hu\0as.us\0ap.leg.br\0"
-"bo.nordland.no\0elastyco.com\0"
-"suisse.museum\0"
-"dnsdojo.net\0"
-"tdk\0"
-"servehumour.com\0"
-"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0"
-"chizu.tottori.jp\0"
-"tanabe.kyoto.jp\0jp.net\0azurestaticapps.net\0"
-"hjelmeland.no\0investments\0"
-"m.bg\0"
-"k12.md.us\0"
-"citadel\0and.mom\0"
-"tamakawa.fukushima.jp\0oppdal.no\0tel\0"
-"poa.br\0"
-"air-traffic-control.aero\0genova.it\0"
-"haboro.hokkaido.jp\0muika.niigata.jp\0"
-"yamanobe.yamagata.jp\0divttasvuotna.no\0"
-"sa.com\0homelinux.net\0isa-hockeynut.com\0"
-"sandoy.no\0"
-"\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0boomla.net\0"
-"lomza.pl\0"
-"chofu.tokyo.jp\0"
-"map.fastly.net\0"
-"omuta.fukuoka.jp\0"
-"seika.kyoto.jp\0"
-"land\0"
-"higashimatsushima.miyagi.jp\0playstation\0togliatti.su\0"
-"abr.it\0plaza.museum\0"
-"oshima.yamaguchi.jp\0ebiz.tw\0"
-"tt.im\0"
-"ota.gunma.jp\0ed.pw\0"
-"mail.pl\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
-"lib.tx.us\0"
-"caserta.it\0aarborte.no\0"
-"ud.it\0"
+"kawanishi.hyogo.jp\0rade.no\0"
+"appchizi.com\0"
+"spacekit.io\0"
+"torsken.no\0pro.tt\0"
+"kashima.saga.jp\0"
+"tsuno.kochi.jp\0"
+"cc.mi.us\0"
+"society.museum\0"
+"ogata.akita.jp\0tci\0"
+"royken.no\0academy\0"
+"jampa.br\0work\0"
+"film.museum\0gos.pk\0definima.io\0"
+"milan.it\0"
+"stc\0"
+"xs4all.space\0"
+"spjelkavik.no\0stcgroup\0"
+"to.md\0"
+"mining.museum\0"
+"pro.vn\0tdk\0"
+"nature.museum\0in.na\0"
+"friulivegiulia.it\0miyagi.jp\0"
+"kamioka.akita.jp\0harstad.no\0jotelulu.cloud\0"
+"engineering\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0"
+"nantan.kyoto.jp\0bindal.no\0fage\0"
+"*.uberspace.de\0"
+"kristiansand.no\0"
+"okawa.fukuoka.jp\0in.ni\0"
+"transporte.bo\0lib.az.us\0shia\0"
+"sciencecenters.museum\0"
+"kasamatsu.gifu.jp\0abbvie\0wroc.pl\0srht.site\0"
+"k12.de.us\0"
+"tel\0cloudcontrolapp.com\0"
+"*.ex.futurecms.at\0"
+"cloudaccess.net\0"
+"ohi.fukui.jp\0cloud-fr1.unispace.io\0"
+"rag-cloud.hosteur.com\0"
+"!city.kobe.jp\0"
+"coach\0voyage\0"
+"likescandy.com\0"
+"jewishart.museum\0"
"yashiro.hyogo.jp\0"
-"ogawa.ibaraki.jp\0embroidery.museum\0"
-"po.it\0bremanger.no\0"
-"thd\0fr.eu.org\0"
+"kerryproperties\0"
+"kahoku.ishikawa.jp\0"
+"\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"jewelry\0\xe6\x9b\xb8\xe7\xb1\x8d\0"
+"flog.br\0"
+"conference.aero\0bn.it\0ostroleka.pl\0eu.com\0"
+"stpetersburg.museum\0xerox\0omniwe.site\0za.org\0"
+"fail\0guge\0"
+"co.technology\0tuxfamily.org\0"
+"mo.it\0firewall-gateway.net\0"
+"nord-odal.no\0"
+"gs.mr.no\0"
+"hokuryu.hokkaido.jp\0itami.hyogo.jp\0"
+"minami.fukuoka.jp\0sor-fron.no\0"
+"thd\0"
+"koshimizu.hokkaido.jp\0arida.wakayama.jp\0"
+"voting\0"
+"la-spezia.it\0pordenone.it\0"
+"lv.ua\0"
+"kitakata.fukushima.jp\0"
+"servep2p.com\0"
+"mihama.mie.jp\0"
+"vlog.br\0directory\0"
+"taito.tokyo.jp\0"
+"vibo-valentia.it\0mito.ibaraki.jp\0ashgabad.su\0"
+"education.museum\0"
+"lancaster\0"
+"barlettatraniandria.it\0in.rs\0"
+"musica.ar\0"
+"r\xc3\xb8mskog.no\0"
+"yonezawa.yamagata.jp\0xy.ax\0"
+"yokosuka.kanagawa.jp\0sumida.tokyo.jp\0h\xc3\xb8ylandet.no\0jls-sto2.elastx.net\0"
+"shimabara.nagasaki.jp\0"
+"trentino-alto-adige.it\0tenei.fukushima.jp\0events\0lolipop.io\0"
+"from-or.com\0"
+"hamburg.museum\0"
+"frontier\0"
+"musica.bo\0casino.hu\0"
+"mat.br\0"
+"\xe4\xb8\xaa\xe4\xba\xba.hk\0"
+"yuza.yamagata.jp\0"
+"walter\0"
+"in.th\0"
+"carbonia-iglesias.it\0"
+"trentino-s-tirol.it\0"
+"svizzera.museum\0"
+"birdart.museum\0tjx\0"
+"movie\0"
+"vard\xc3\xb8.no\0"
+"takasago.hyogo.jp\0tatsuno.hyogo.jp\0gorlice.pl\0"
+"in.ua\0myfast.host\0"
+"raholt.no\0"
+"haboro.hokkaido.jp\0from-mn.com\0"
"botanicgarden.museum\0"
-"navuotna.no\0lib.hi.us\0"
-"tsu.mie.jp\0"
-"matsukawa.nagano.jp\0"
-"wakasa.tottori.jp\0"
-"cloudns.info\0"
-"kristiansand.no\0"
-"lel.br\0uhren.museum\0midsund.no\0hotel.tz\0"
-"yoshinogari.saga.jp\0"
-"*.kawasaki.jp\0"
-"catering.aero\0assabu.hokkaido.jp\0"
-"monticello.museum\0pics\0"
-"town\0"
-"media.aero\0minowa.nagano.jp\0"
-"info\0"
-"friuli-veneziagiulia.it\0kamikawa.hokkaido.jp\0torino.museum\0"
-"yokkaichi.mie.jp\0"
-"imizu.toyama.jp\0"
-"soma.fukushima.jp\0sells-it.net\0"
-"andriabarlettatrani.it\0"
-"contemporaryart.museum\0"
-"cri.nz\0\xd0\xbc\xd0\xba\xd0\xb4\0"
-"cloud.unispace.io\0"
-"news.hu\0"
-"yamada.toyama.jp\0vestby.no\0"
-"yatsuka.shimane.jp\0"
+"sucks\0"
+"shirako.chiba.jp\0"
+"shinshinotsu.hokkaido.jp\0"
+"shop\0"
+"ogaki.gifu.jp\0"
+"takanabe.miyazaki.jp\0cc.ca.us\0"
+"show\0"
+"broker\0"
+"in.us\0fans\0"
+"sld.pa\0"
+"iglesiascarbonia.it\0\xe5\x9c\xa8\xe7\xba\xbf\0"
+"help\0scjohnson\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0paris.museum\0barsy.mobi\0"
+"wskr.gov.pl\0"
+"chikushino.fukuoka.jp\0"
+"tosashimizu.kochi.jp\0jewelry.museum\0cologne\0"
+"creation.museum\0"
+"g.bg\0myiphost.com\0"
+"trader.aero\0"
"delta\0"
-"tjx\0"
-"s\xc3\xbc""dtirol.it\0"
-"nome.pt\0toys\0"
-"toyohashi.aichi.jp\0mn.us\0"
-"b\xc3\xa6rum.no\0"
-"readthedocs.io\0"
-"chattanooga.museum\0"
-"urayasu.chiba.jp\0hirono.iwate.jp\0"
-"*.vps.myjino.ru\0"
-"bruxelles.museum\0fhv.se\0"
-"archi\0"
-"narashino.chiba.jp\0broke-it.net\0"
-"okawa.kochi.jp\0"
-"test.tj\0"
-"hiraya.nagano.jp\0"
-"nyc.museum\0ap-northeast-2.elasticbeanstalk.com\0"
-"shimoji.okinawa.jp\0"
-"musica.ar\0miyama.mie.jp\0"
-"kushimoto.wakayama.jp\0"
-"prime\0"
-"ybo.review\0"
-"fujisawa.kanagawa.jp\0"
-"k12.ga.us\0"
-"deno-staging.dev\0"
-"from-in.com\0"
-"chieti.it\0kred\0"
-"krakow.pl\0"
-"s3-website-ap-southeast-2.amazonaws.com\0"
-"musica.bo\0florida.museum\0"
-"house.museum\0"
-"yoichi.hokkaido.jp\0"
-"futbol\0s3.eu-west-2.amazonaws.com\0"
-"misugi.mie.jp\0london.museum\0"
-"\xe9\x95\xb7\xe5\xb4\x8e.jp\0"
-"isla.pr\0school.za\0"
-"\xd0\xbc\xd0\xbe\xd0\xbd\0"
-"journal.aero\0bsb.br\0kawajima.saitama.jp\0"
-"webredirect.org\0"
-"homesecuritypc.com\0"
-"time.museum\0fylkesbibl.no\0"
-"lib.wy.us\0test.ru\0"
-"wakayama.wakayama.jp\0top\0"
-"hotel.lk\0shouji\0on-aptible.com\0"
-"mizumaki.fukuoka.jp\0"
-"sp.it\0"
-"urn.arpa\0mc.eu.org\0"
-"wa.au\0"
-"builders\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0"
-"versailles.museum\0"
-"naie.hokkaido.jp\0"
-"eastcoast.museum\0"
-"\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0"
-"bl.it\0"
-"611.to\0"
-"woodside\0"
-"vda.it\0"
-"hb.cldmail.ru\0"
-"mallorca.museum\0"
-"aerobatic.aero\0"
-"moriyama.shiga.jp\0sande.m\xc3\xb8re-og-romsdal.no\0"
-"dgca.aero\0rikuzentakata.iwate.jp\0tsunan.niigata.jp\0"
-"lt.eu.org\0"
-"is-a-bookkeeper.com\0"
-"cesenaforli.it\0kamioka.akita.jp\0and.museum\0"
-"otsuka\0"
-"is.gov.pl\0"
-"iveland.no\0"
-"ah.cn\0"
-"hatsukaichi.hiroshima.jp\0"
-"obu.aichi.jp\0"
-"ubs\0"
-"forex\0"
-"gouv.fr\0kvinnherad.no\0siljan.no\0trv\0"
-"lamborghini\0pgafan.net\0"
-"elverum.no\0hitachi\0"
-"halsa.no\0ping\0"
-"nordreisa.no\0"
-"pink\0"
-"rzeszow.pl\0"
-"gu.us\0eu-west-2.elasticbeanstalk.com\0ravendb.me\0"
-"hotel.hu\0filegear.me\0"
-"campobasso.it\0"
-"ouchi.saga.jp\0"
-"ravendb.run\0"
-"fnd.br\0"
-"soni.nara.jp\0qbuser.com\0"
-"\xc3\xb8rsta.no\0cloudns.pro\0"
-"cc.oh.us\0"
-"susaki.kochi.jp\0technology\0"
-"pagefrontapp.com\0"
-"gouv.ht\0homeunix.net\0"
-"k12.wa.us\0tui\0is-a-landscaper.com\0"
-"monza.it\0inagi.tokyo.jp\0"
-"indigena.bo\0mitou.yamaguchi.jp\0"
-"rmit\0from-mi.com\0"
-"kyowa.akita.jp\0setagaya.tokyo.jp\0"
-"m.se\0"
-"toyono.osaka.jp\0selje.no\0"
-"platform0.app\0"
-"stockholm\0"
-"k12.ar.us\0"
-"caravan\0"
-"tonsberg.no\0"
-"\xe7\xae\x87\xe4\xba\xba.hk\0iwi.nz\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0"
-"gouv.bj\0gb.com\0"
-"omotego.fukushima.jp\0taketomi.okinawa.jp\0"
-"tama.tokyo.jp\0salon\0"
-"isesaki.gunma.jp\0"
-"tvs\0"
-"cuiaba.br\0"
-"watari.miyagi.jp\0grong.no\0dyndns-ip.com\0"
-"news\0"
-"livinghistory.museum\0"
-"okutama.tokyo.jp\0kustanai.ru\0"
-"gouv.ci\0"
-"kawachinagano.osaka.jp\0fribourg.museum\0"
-"higashikawa.hokkaido.jp\0steigen.no\0"
-"toyokawa.aichi.jp\0ishigaki.okinawa.jp\0"
-"firenze.it\0"
-"ato.br\0tonaki.okinawa.jp\0"
-"vinnytsia.ua\0"
-"recife.br\0next\0"
-"steam.museum\0"
-"\xe4\xbd\x90\xe8\xb3\x80.jp\0onion\0"
-"north.museum\0kustanai.su\0"
-"trentinsued-tirol.it\0"
-"hinode.tokyo.jp\0"
-"raisa.no\0"
-"miura.kanagawa.jp\0"
-"showtime\0mc.ax\0"
-"eastasia.azurestaticapps.net\0"
-"*.compute.estate\0"
-"galsa.no\0"
-"moma.museum\0"
-"tsugaru.aomori.jp\0"
-"dyndns-office.com\0"
-"sn\xc3\xa5sa.no\0is-a-anarchist.com\0"
-"dyn53.io\0"
-"freiburg.museum\0"
-"kamisunagawa.hokkaido.jp\0"
-"qh.cn\0"
-"sera.hiroshima.jp\0malvik.no\0"
-"hn.cn\0"
-"obira.hokkaido.jp\0dyndns.org\0miniserver.com\0"
-"sor-fron.no\0"
-"ballangen.no\0"
-"sor-odal.no\0"
-"minato.tokyo.jp\0pfizer\0"
-"caa.aero\0"
-"adobeaemcloud.com\0"
-"\xe5\xb2\xa9\xe6\x89\x8b.jp\0legnica.pl\0"
-"southcarolina.museum\0juniper\0"
-"frei.no\0"
-"srv.br\0"
-"nishikawa.yamagata.jp\0"
-"fundacio.museum\0ok.us\0"
-"uchinada.ishikawa.jp\0botanical.museum\0"
-"nishiarita.saga.jp\0int.eu.org\0"
-"ga.us\0"
-"ogi.saga.jp\0"
-"konyvelo.hu\0"
-"mansion.museum\0rl.no\0"
-"bestbuy\0from-ky.com\0"
-"soo.kagoshima.jp\0kppsp.gov.pl\0cc.ri.us\0"
-"saiki.oita.jp\0"
-"yachts\0"
-"rec.br\0cc.mt.us\0cc.nd.us\0\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"protonet.io\0"
-"kitami.hokkaido.jp\0"
-"centralus.azurestaticapps.net\0"
-"ra-ru.ru\0"
-"v.bg\0s3.dualstack.ap-southeast-1.amazonaws.com\0"
-"ah.no\0"
-"britishcolumbia.museum\0aid.pl\0"
-"1.bg\0"
-"ybo.science\0"
-"poniatowa.pl\0"
-"rec.co\0gr.com\0"
-"k\xc3\xa5""fjord.no\0"
-"washingtondc.museum\0"
-"kamimine.saga.jp\0"
-"ichiba.tokushima.jp\0luzern.museum\0loginline.app\0"
-"tosu.saga.jp\0uno\0"
-"des.br\0myoko.niigata.jp\0"
-"otaki.chiba.jp\0"
-"is-very-good.org\0"
-"kicks-ass.net\0"
-"otsuki.yamanashi.jp\0uol\0"
-"frontier\0"
-"handa.aichi.jp\0sweetpepper.org\0wellbeingzone.co.uk\0"
-"g\xc3\xbcnstigliefern.de\0"
-"gildeskal.no\0se.net\0ru.net\0"
-"ikeda.fukui.jp\0community.museum\0osaka\0serveftp.net\0"
-"culture.museum\0fineart.museum\0"
-"from-pr.com\0"
-"mk.eu.org\0"
-"for-the.biz\0"
-"aki.kochi.jp\0"
-"yamato.fukushima.jp\0"
-"fuefuki.yamanashi.jp\0*.in.futurecms.at\0fra1-de.cloudjiffy.net\0"
-"sanfrancisco.museum\0"
-"mc.it\0kyonan.chiba.jp\0yahoo\0"
-"otsu.shiga.jp\0hoylandet.no\0konsulat.gov.pl\0ups\0"
-"nanporo.hokkaido.jp\0honefoss.no\0lib.de.us\0"
+"watarai.mie.jp\0"
+"sm\xc3\xb8la.no\0"
+"aure.no\0"
+"yame.fukuoka.jp\0otari.nagano.jp\0\xd1\x83\xd0\xba\xd1\x80\0"
+"tsukiyono.gunma.jp\0kyoto\0"
+"etc.br\0saigawa.fukuoka.jp\0"
+"\xe5\xa8\xb1\xe4\xb9\x90\0"
+"lib.as.us\0"
+"ozu.ehime.jp\0\xd0\xb1\xd0\xb8\xd0\xb7.\xd1\x80\xd1\x83\xd1\x81\0"
+"nago.okinawa.jp\0"
+"*.sch.uk\0walmart\0\xe4\xbc\x81\xe4\xb8\x9a\0adimo.co.uk\0"
+"works.aero\0"
+"iwanai.hokkaido.jp\0"
+"orangecloud.tn\0"
+"top\0"
+"farmers.museum\0"
+"farm\0international\0"
+"skole.museum\0"
+"filegear.me\0"
+"eigersund.no\0"
+"matsuyama.ehime.jp\0"
+"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0"
+"kitagata.gifu.jp\0"
+"joso.ibaraki.jp\0"
+"yokawa.hyogo.jp\0uppo.gov.pl\0green\0"
+"ing.pa\0"
+"grimstad.no\0fast\0"
+"beeldengeluid.museum\0"
+"ishigaki.okinawa.jp\0mykolaiv.ua\0"
+"travelchannel\0"
+"\xd1\x81\xd0\xbf\xd0\xb1.\xd1\x80\xd1\x83\xd1\x81\0"
+"shingu.hyogo.jp\0air.museum\0here\0ybo.faith\0"
+"santabarbara.museum\0"
+"fujimi.saitama.jp\0hammarfeasta.no\0"
+"okazaki.aichi.jp\0"
+"inder\xc3\xb8y.no\0"
+"d.gv.vc\0"
+"brussels\0charity\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x80\xd1\x83\xd1\x81\0"
+"doctor\0ubs\0"
+"masuda.shimane.jp\0"
+"trv\0\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0"
+"sondrio.it\0guru\0"
+"mo.us\0doesntexist.com\0"
+"mydissent.net\0"
+"naturalsciences.museum\0"
+"vang.no\0"
+"kosaka.akita.jp\0stateofdelaware.museum\0"
+"bjerkreim.no\0"
+"utazu.kagawa.jp\0paderborn.museum\0ilovecollege.info\0"
+"journalist.aero\0tlon.network\0"
+"ikoma.nara.jp\0"
+"oita.jp\0"
+"es.leg.br\0myforum.community\0"
+"polkowice.pl\0"
+"pasadena.museum\0"
+"va.it\0"
+"us-west-1.elasticbeanstalk.com\0"
+"mx.na\0volvo\0"
+"qsl.br\0"
+"tui\0"
+"frogans\0jp.kg\0"
+"izumo.shimane.jp\0"
+"itako.ibaraki.jp\0"
+"sampa.br\0miyoshi.saitama.jp\0"
+"h\xc3\xa1pmir.no\0"
+"*.svc.firenet.ch\0"
+"freebox-os.com\0"
+"wa.edu.au\0"
+"edunet.tn\0"
+"is-a-lawyer.com\0"
+"budapest\0"
+"*.yokohama.jp\0tanohata.iwate.jp\0tx.us\0tvs\0"
+"\xe6\x94\xbf\xe5\xba\x9c.hk\0"
+"perugia.it\0"
+"p.bg\0murayama.yamagata.jp\0jp.md\0"
+"*.advisor.ws\0"
+"dynv6.net\0"
+"verran.no\0"
+"yokote.akita.jp\0freiburg.museum\0"
+"kyonan.chiba.jp\0"
+"ri.it\0"
+"yorii.saitama.jp\0"
+"vallee-d-aoste.it\0"
+"gs.rl.no\0"
+"balat.no\0prochowice.pl\0forsale\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0diskstation.org\0"
+"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0*.landing.myjino.ru\0"
+"seiyo.ehime.jp\0austin.museum\0"
+"oristano.it\0"
+"bio.br\0leangaviika.no\0"
+"silk\0"
+"tr.eu.org\0"
+"ebina.kanagawa.jp\0obuse.nagano.jp\0"
+"sa-east-1.elasticbeanstalk.com\0"
+"television.museum\0"
+"karasuyama.tochigi.jp\0"
+"va.no\0"
+"fukagawa.hokkaido.jp\0"
+"shakotan.hokkaido.jp\0ae.org\0"
+"baghdad.museum\0*.sys.qcx.io\0"
+"bozen-s\xc3\xbc""dtirol.it\0"
+"mitoyo.kagawa.jp\0sina\0"
+"asnes.no\0homelinux.com\0"
+"8.bg\0"
+"cc.ut.us\0"
+"civilaviation.aero\0"
+"ha.cn\0hurum.no\0"
+"mg.gov.br\0"
+"flap.id\0"
+"*.compute-1.amazonaws.com\0"
+"guernsey.museum\0"
+"gs.nt.no\0"
+"is-a-player.com\0"
+"yamashina.kyoto.jp\0no-ip.net\0"
+"jur.pro\0"
+"asahikawa.hokkaido.jp\0bristol.museum\0"
"ericsson\0"
-"beiarn.no\0"
-"fujikawa.yamanashi.jp\0"
-"gsm.pl\0"
-"trentin-suedtirol.it\0"
-"mel.cloudlets.com.au\0"
-"ven.it\0"
-"cieszyn.pl\0weir\0"
-"messina.it\0"
-"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
-"static.observableusercontent.com\0"
-"mosj\xc3\xb8""en.no\0"
-"homelinux.org\0"
-"forum\0"
-"\xc3\xa5mli.no\0"
-"takasago.hyogo.jp\0eigersund.no\0"
-"trader.aero\0nakagawa.hokkaido.jp\0"
-"onjuku.chiba.jp\0americanfamily\0"
-"komatsushima.tokushima.jp\0"
-"lima-city.de\0"
-"heritage.museum\0"
-"kuju.oita.jp\0kv\xc3\xa6nangen.no\0"
-"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0columbia.museum\0"
-"cloud\0"
-"\xe5\xba\x83\xe5\xb3\xb6.jp\0hayakawa.yamanashi.jp\0scienceandhistory.museum\0"
-"couchpotatofries.org\0"
-"takamatsu.kagawa.jp\0oshima.tokyo.jp\0"
-"sar.it\0"
-"aus.basketball\0"
-"wa.us\0"
-"lu.eu.org\0me.eu.org\0"
-"nanae.hokkaido.jp\0"
-"rokunohe.aomori.jp\0naval.museum\0"
-"fyresdal.no\0"
-"asahi.chiba.jp\0murakami.niigata.jp\0"
-"cloudns.org\0"
-"christmas\0"
-"kumano.mie.jp\0"
-"savona.it\0"
-"naples.it\0chigasaki.kanagawa.jp\0blog.gt\0"
-"airline.aero\0paas.hosted-by-previder.com\0lima-city.at\0"
-"us-west-2.elasticbeanstalk.com\0"
-"oracle\0"
-"katagami.akita.jp\0oyodo.nara.jp\0"
-"ugim.gov.pl\0operaunite.com\0"
-"luroy.no\0yombo.me\0"
-"kuki.saitama.jp\0"
+"erni\0is-a-bruinsfan.org\0barsyonline.com\0"
+"campobasso.it\0museumcenter.museum\0"
+"grong.no\0durban\0"
+"likes-pie.com\0"
+"myjino.ru\0"
+"nesna.no\0"
+"ggf.br\0"
+"\xe7\xbd\x91\xe5\xba\x97\0"
+"lib.tn.us\0"
+"station.museum\0"
+"minamiyamashiro.kyoto.jp\0*.platformsh.site\0"
+"kumamoto.kumamoto.jp\0orkdal.no\0nh.us\0"
+"k12.wy.us\0"
+"batsfjord.no\0"
+"pleskns.com\0"
+"gorge.museum\0"
+"akdn\0"
+"wolterskluwer\0"
+"torahime.shiga.jp\0"
+"fukusaki.hyogo.jp\0"
+"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0"
+"kanna.gunma.jp\0career\0"
+"moscow\0"
+"shimotsuma.ibaraki.jp\0is-a-candidate.org\0"
+"lipsy\0"
+"youtube\0"
+"g.se\0"
+"sphinx.mythic-beasts.com\0"
+"neues.museum\0"
+"chizu.tottori.jp\0jelastic.regruhosting.ru\0"
+"\xe5\x98\x89\xe9\x87\x8c\0"
+"kawazu.shizuoka.jp\0"
+"uno\0"
+"chieti.it\0media\0"
+"katsuragi.nara.jp\0"
+"*.kobe.jp\0tsuruta.aomori.jp\0"
+"meguro.tokyo.jp\0"
+"calabria.it\0"
+"minnesota.museum\0googleapis.com\0"
+"hiroshima.jp\0"
+"tarnobrzeg.pl\0uol\0"
+"honjo.akita.jp\0"
+"shinjo.yamagata.jp\0"
+"cc.dc.us\0"
+"alabama.museum\0"
+"maison\0jelastic.saveincloud.net\0"
+"takayama.gifu.jp\0brand.se\0productions\0"
+"oji.nara.jp\0"
+"abruzzo.it\0"
+"meloy.no\0"
+"site\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0"
+"homes\0dnsiskinky.com\0"
+"ambulance.museum\0"
+"konan.aichi.jp\0tara.saga.jp\0"
+"ibaraki.jp\0va.us\0"
+"annaka.gunma.jp\0misato.miyagi.jp\0kommunalforbund.se\0"
+"y.bg\0ups\0"
+"sandiego.museum\0amica\0extraspace\0"
+"toyohashi.aichi.jp\0"
+"americanart.museum\0"
+"barsycenter.com\0"
+"republican\0fr-1.paas.massivegrid.net\0"
+"\xd0\xba\xd0\xbe\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
+"dyndns.biz\0"
+"gratangen.no\0"
+"kalisz.pl\0lib.ca.us\0"
+"fedex\0"
+"higashiyoshino.nara.jp\0"
+"archaeology.museum\0"
+"lib.mn.us\0"
+"ino.kochi.jp\0"
+"meiwa.mie.jp\0from-ia.com\0"
+"marnardal.no\0"
+"coz.br\0"
+"foundation.museum\0"
+"kids.us\0"
+"ri.us\0"
+"plesk.page\0"
+"kimobetsu.hokkaido.jp\0"
+"zentsuji.kagawa.jp\0"
+"sk.ca\0klodzko.pl\0"
+"catering\0"
+"gz.cn\0"
+"rogers\0"
+"higashishirakawa.gifu.jp\0"
+"ogawa.saitama.jp\0"
+"in-addr.arpa\0taobao\0"
+"levanger.no\0rnrt.tn\0"
+"tamba.hyogo.jp\0romsa.no\0"
+"lombardy.it\0study\0"
+"kadena.okinawa.jp\0"
+"kasahara.gifu.jp\0*.lclstage.dev\0"
+"sveio.no\0"
+"asso.fr\0"
+"ha.no\0"
+"oe.yamagata.jp\0"
+"tochigi.tochigi.jp\0freemyip.com\0"
"vet\0"
-"b.bg\0"
-"ise.mie.jp\0"
-"lv.eu.org\0"
-"lima-city.ch\0"
-"kawaguchi.saitama.jp\0"
-"b.br\0miharu.fukushima.jp\0"
-"koshimizu.hokkaido.jp\0minato.osaka.jp\0flatanger.no\0"
-"wassamu.hokkaido.jp\0"
-"gotsu.shimane.jp\0"
-"tohnosho.chiba.jp\0"
-"bytom.pl\0"
-"tokyo.jp\0"
-"coz.br\0rindal.no\0"
-"macapa.br\0kitakami.iwate.jp\0london.cloudapps.digital\0nyaa.am\0"
-"n\xc3\xa6r\xc3\xb8y.no\0"
-"saarland\0"
-"blog.bo\0kotoura.tottori.jp\0from-or.com\0"
-"yakage.okayama.jp\0"
-"blog.br\0gouv.sn\0"
-"upaas.kazteleport.kz\0alpha.bounty-full.com\0"
-"ukco.me\0"
-"game-server.cc\0"
-"hakata.fukuoka.jp\0yanagawa.fukuoka.jp\0"
-"mihama.wakayama.jp\0lukow.pl\0"
-"rec.nf\0"
-"ot.it\0pd.it\0saka.hiroshima.jp\0"
-"vig\0"
-"kamitsue.oita.jp\0krodsherad.no\0dnsup.net\0"
-"grimstad.no\0"
-"shintoku.hokkaido.jp\0"
-"cruise\0"
-"verdal.no\0global\0panasonic\0"
-"ce.it\0illustration.museum\0rauma.no\0lon-2.paas.massivegrid.net\0"
+"stavanger.no\0"
+"k12.ma.us\0zero\0"
+"asso.gp\0honjyo.akita.jp\0oiso.kanagawa.jp\0"
+"mitsubishi\0"
+"loan\0"
+"kani.gifu.jp\0"
+"dyn.home-webserver.de\0"
+"gifts\0us.reclaim.cloud\0"
+"siena.it\0"
+"abudhabi\0cust.retrosnub.co.uk\0"
+"kasugai.aichi.jp\0"
+"val-d-aosta.it\0"
+"kaizuka.osaka.jp\0"
+"garden\0"
+"asso.ht\0kr.it\0omaezaki.shizuoka.jp\0"
+"kariya.aichi.jp\0"
+"a\xc3\xa9roport.ci\0"
+"uk.net\0"
+"modelling.aero\0hyuga.miyazaki.jp\0"
+"fukushima.hokkaido.jp\0p.se\0"
+"isa.us\0"
+"vs.it\0tienda\0"
+"teaches-yoga.com\0"
+"prd.fr\0"
+"kalmykia.su\0"
+"lomza.pl\0"
+"asso.bj\0dnipropetrovsk.ua\0"
+"tokamachi.niigata.jp\0vig\0"
+"sosa.chiba.jp\0from-il.com\0static.land\0"
+"tagawa.fukuoka.jp\0uz.ua\0dyn-berlin.de\0"
+"hyogo.jp\0"
+"ntr.br\0"
+"s\xc3\xbc""dtirol.it\0"
"vin\0"
+"shell.museum\0"
"vip\0"
-"yachiyo.chiba.jp\0es.eu.org\0"
-"now-dns.top\0"
-"settlers.museum\0cn-north-1.eb.amazonaws.com.cn\0"
-"parma.it\0kameyama.mie.jp\0"
-"awaji.hyogo.jp\0"
-"from-la.net\0"
-"tsuruoka.yamagata.jp\0"
-"codes\0"
-"trentin-s\xc3\xbc""d-tirol.it\0yuzawa.niigata.jp\0nord-fron.no\0scrysec.com\0"
-"mino.gifu.jp\0"
-"roros.no\0js.wpenginepowered.com\0"
-"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"kawatana.nagasaki.jp\0aquarium.museum\0"
-"durban\0"
-"info.gu\0"
-"lenug.su\0"
-"ind.br\0farmequipment.museum\0search\0"
-"whaling.museum\0"
-"mydobiss.com\0"
-"info.ht\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0"
-"info.hu\0"
-"origins\0"
-"tec.br\0\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0"
-"rana.no\0sochi.su\0"
-"holmestrand.no\0"
-"\xc3\xb8vre-eiker.no\0"
-"sakai.osaka.jp\0aarp\0dyndns-work.com\0"
-"schaeffler\0"
-"shibecha.hokkaido.jp\0niyodogawa.kochi.jp\0rec.ro\0"
-"hattfjelldal.no\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0"
-"info.et\0"
-"info.fj\0"
-"cc.pa.us\0"
-"navoi.su\0"
-"ce.leg.br\0"
-"takehara.hiroshima.jp\0"
-"futsu.nagasaki.jp\0"
-"kr.eu.org\0"
-"bu.no\0"
-"yamanakako.yamanashi.jp\0"
-"roma.it\0bounty-full.com\0"
-"guardian\0"
-"stpetersburg.museum\0enterprises\0"
-"gmbh\0"
-"canon\0square7.net\0prvcy.page\0"
-"hachioji.tokyo.jp\0"
-"iwanuma.miyagi.jp\0kawasaki.miyagi.jp\0"
-"info.cx\0seidat.net\0"
-"potager.org\0"
-"business\0sydney\0s3-us-west-2.amazonaws.com\0"
-"shikabe.hokkaido.jp\0gouv.km\0"
-"furudono.fukushima.jp\0"
-"s3.us-east-2.amazonaws.com\0"
-"wellbeingzone.eu\0"
-"info.ec\0ina.saitama.jp\0sanofi\0"
-"moseushi.hokkaido.jp\0"
-"\xd0\xbe\xd1\x80\xd0\xb3\0v.ua\0"
-"civilization.museum\0filegear-au.me\0"
-"secure\0"
-"hellas.museum\0rec.ve\0"
-"ind.gt\0masfjorden.no\0"
-"act.au\0"
-"massa-carrara.it\0"
-"ashibetsu.hokkaido.jp\0"
-"place\0resindevice.io\0"
-"servebbs.net\0"
+"engerdal.no\0"
+"asso.ci\0"
+"quicksytes.com\0"
+"ichinoseki.iwate.jp\0"
+"pisa.it\0oki.fukuoka.jp\0jorpeland.no\0"
+"vall\xc3\xa9""eaoste.it\0"
+"sg-1.paas.massivegrid.net\0wixsite.com\0"
+"design.aero\0discover\0"
+"hakuba.nagano.jp\0cool\0"
+"shikama.miyagi.jp\0meldal.no\0sko.gov.pl\0uk.eu.org\0grozny.su\0"
+"pila.pl\0"
+"commbank\0"
+"coop\0"
+"encyclopedic.museum\0gs.hm.no\0"
+"app.lmpm.com\0"
+"nakamura.kochi.jp\0ostrowiec.pl\0ownip.net\0"
+"osakikamijima.hiroshima.jp\0samnanger.no\0tele.amune.org\0"
+"iide.yamagata.jp\0"
+"barclaycard\0"
+"vestnes.no\0kalmykia.ru\0"
+"trani-andria-barletta.it\0muko.kyoto.jp\0"
+"cargo.aero\0aa.no\0"
+"nichinan.miyazaki.jp\0"
+"loft\0*.paywhirl.com\0"
+"asso.dz\0"
+"stage.nodeart.io\0"
+"stjohn.museum\0"
+"southcarolina.museum\0komforb.se\0dyndns-web.com\0"
+"sb.ua\0"
+"\xe5\xba\x83\xe5\xb3\xb6.jp\0"
+"airtel\0"
+"ferrero\0"
+"backplaneapp.io\0"
+"for.sale\0"
+"pescara.it\0"
+"vxl.sh\0"
+"iizuka.fukuoka.jp\0kamaishi.iwate.jp\0prd.km\0"
+"balsan.it\0fujieda.shizuoka.jp\0"
+"yurihonjo.akita.jp\0"
+"keisen.fukuoka.jp\0"
+"hashikami.aomori.jp\0"
+"grozny.ru\0"
+"\xe6\x94\xbf\xe5\x8a\xa1\0"
+"accident-prevention.aero\0"
+"eun.eg\0"
+"honda\0"
+"pc.it\0"
+"prd.mg\0"
"half.host\0"
-"info.bb\0"
-"s3-website.eu-west-2.amazonaws.com\0"
-"tsubame.niigata.jp\0info.at\0"
-"info.au\0"
-"haga.tochigi.jp\0homeunix.org\0"
-"naklo.pl\0"
-"port.fr\0izunokuni.shizuoka.jp\0goip.de\0"
-"info.az\0"
-"noboribetsu.hokkaido.jp\0gouv.ml\0sondre-land.no\0"
-"yoshida.shizuoka.jp\0"
-"aq.it\0ba.it\0"
-"shonai.fukuoka.jp\0gulen.no\0"
-"info.bo\0"
-"saito.miyazaki.jp\0mykolaiv.ua\0"
-"kaminokawa.tochigi.jp\0arna.no\0schulserver.de\0"
-"ind.in\0ogawa.saitama.jp\0from-ok.com\0"
-"harvestcelebration.museum\0fjell.no\0"
-"cern\0"
-"info.co\0sec.ps\0on-the-web.tv\0hk.org\0"
-"chernovtsy.ua\0"
-"kochi.jp\0health.museum\0"
-"gojome.akita.jp\0"
-"cincinnati.museum\0"
-"midori.chiba.jp\0kouyama.kagoshima.jp\0"
-"vanguard\0gitlab.io\0"
-"blog.vu\0"
-"oceanographique.museum\0"
-"yorii.saitama.jp\0"
-"mobile\0is-an-anarchist.com\0"
-"\xe5\x9f\xbc\xe7\x8e\x89.jp\0ind.kw\0"
-"sekigahara.gifu.jp\0"
-"coldwar.museum\0"
-"express.aero\0"
-"namikata.ehime.jp\0"
-"edogawa.tokyo.jp\0"
-"manx.museum\0"
-"saogonca.br\0"
-"tksat.bo\0batsfjord.no\0karpacz.pl\0bananarepublic\0"
-"nishinomiya.hyogo.jp\0"
-"fi.eu.org\0"
-"cc.nm.us\0able\0"
-"sphinx.mythic-beasts.com\0"
-"\xc3\xa5krehamn.no\0"
-"gwangju.kr\0finn\xc3\xb8y.no\0"
-"obama.fukui.jp\0tsukuba.ibaraki.jp\0"
-"k12.mn.us\0"
-"kunstunddesign.museum\0landes.museum\0b.se\0"
-"amber.museum\0annefrank.museum\0\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0"
-"tsushima.aichi.jp\0k12.fl.us\0"
-"kusatsu.shiga.jp\0"
-"microlight.aero\0trentinos-tirol.it\0"
-"skierv\xc3\xa1.no\0skanland.no\0play\0"
-"g12.br\0"
-"cim.br\0"
-"is-a-geek.com\0"
-"s\xc3\xb8r-varanger.no\0"
-"kamishihoro.hokkaido.jp\0"
-"sola.no\0"
-"pa.gov.br\0telebit.io\0"
-"seven\0"
-"luster.no\0"
-"okayama.okayama.jp\0organic\0"
-"ra.it\0polkowice.pl\0"
-"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0win\0"
-"akishima.tokyo.jp\0"
-"eid.no\0"
-"balestrand.no\0"
-"caracal.mythic-beasts.com\0"
-"\xe5\x85\xac\xe5\x8f\xb8.cn\0"
-"nasu.tochigi.jp\0"
-"idf.il\0miasa.nagano.jp\0"
-"cagliari.it\0"
-"pb.gov.br\0rentals\0za.com\0"
-"room\0"
-"dyndns-at-home.com\0"
-"floripa.br\0orx.biz\0"
-"balsan-sudtirol.it\0"
-"\xe5\x85\xac\xe5\x8f\xb8.hk\0"
-"urbino-pesaro.it\0"
-"oguchi.aichi.jp\0kirkenes.no\0"
-"mombetsu.hokkaido.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0buzz\0kicks-ass.org\0"
-"jdf.br\0gs.cn\0"
-"h\xc3\xb8nefoss.no\0"
-"is-a-knight.org\0"
-"rawa-maz.pl\0e12.ve\0"
-"us-east-1.elasticbeanstalk.com\0"
-"rel.ht\0"
-"kragero.no\0"
-"kr.com\0"
-"pueblo.bo\0santoandre.br\0"
-"wme\0"
-"ind.tn\0"
-"iwakuni.yamaguchi.jp\0info.ve\0"
-"router.management\0"
-"doomdns.org\0qcx.io\0"
-"daito.osaka.jp\0"
+"pharmacy\0"
+"wmflabs.org\0"
+"takko.aomori.jp\0zhitomir.ua\0"
+"prof.pr\0"
+"maniwa.okayama.jp\0"
+"geology.museum\0"
+"k12.mt.us\0"
+"omi.nagano.jp\0"
+"forli-cesena.it\0"
+"friuli-v-giulia.it\0a.run.app\0"
+"lecce.it\0"
+"appudo.net\0"
+"grp.lk\0"
+"ohtawara.tochigi.jp\0ethnology.museum\0homelinux.net\0"
+"ikeda.nagano.jp\0"
+"rahkkeravju.no\0paris\0"
+"vagsoy.no\0"
+"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0for-more.biz\0"
+"hu.net\0onfabrica.com\0"
+"suzuki\0xbox\0"
+"tondabayashi.osaka.jp\0"
"dr.na\0"
-"vf.no\0info.vn\0pokrovsk.su\0"
-"foz.br\0"
-"bible.museum\0"
-"wielun.pl\0cc.mi.us\0"
-"nobeoka.miyazaki.jp\0"
-"cc.id.us\0"
-"nakano.nagano.jp\0"
-"miyama.fukuoka.jp\0*.cryptonomic.net\0"
-"k.bg\0"
-"\xe5\xa4\xa7\xe5\x88\x86.jp\0"
-"bozen-sudtirol.it\0"
-"hirogawa.wakayama.jp\0bargains\0"
-"nuoro.it\0minami.fukuoka.jp\0"
-"achi.nagano.jp\0egersund.no\0"
-"suzaka.nagano.jp\0tec.ve\0omg.lol\0"
-"health.nz\0"
-"higashiyamato.tokyo.jp\0"
-"kuriyama.hokkaido.jp\0dynamisches-dns.de\0"
-"info.tn\0skygearapp.com\0"
-"info.tr\0wow\0blog.kg\0"
-"info.tt\0"
-"ivgu.no\0cbg.ru\0jelastic.team\0"
-"gokase.miyazaki.jp\0"
-"u.channelsdvr.net\0"
-"parachuting.aero\0sanagochi.tokushima.jp\0info.tz\0lego\0"
-"madrid.museum\0network\0"
-"r\xc3\xb8yrvik.no\0\xe8\x87\xba\xe7\x81\xa3\0"
-"shizuoka.shizuoka.jp\0abudhabi\0"
-"and\xc3\xb8y.no\0"
-"ueda.nagano.jp\0"
-"ishikari.hokkaido.jp\0"
-"tr.it\0lib.pa.us\0"
-"*.ocs.customer-oci.com\0"
-"haram.no\0"
-"fastly-terrarium.com\0familyds.net\0"
-"info.ro\0go.leg.br\0"
-"ohkura.yamagata.jp\0"
-"contagem.br\0"
-"\xe4\xb8\xaa\xe4\xba\xba.hk\0cn.it\0info.sd\0"
-"lecco.it\0"
-"s3-website-eu-west-1.amazonaws.com\0eastus2.azurestaticapps.net\0"
-"nico\0"
-"hamburg.museum\0"
-"is-a-geek.org\0"
-"nagaokakyo.kyoto.jp\0"
-"abu.yamaguchi.jp\0kudamatsu.yamaguchi.jp\0git-pages.rit.edu\0"
-"sn.cn\0omihachiman.shiga.jp\0"
-"tomiya.miyagi.jp\0"
-"morioka.iwate.jp\0tj\xc3\xb8me.no\0"
-"info.pk\0rel.pl\0"
-"tokushima.jp\0info.pl\0"
-"wtc\0"
-"wtf\0cloudfront.net\0ghost.io\0appengine.flow.ch\0"
-"mihara.hiroshima.jp\0info.pr\0serveftp.org\0"
-"bj.cn\0med.pro\0"
-"firmdale\0"
-"sowa.ibaraki.jp\0"
-"konskowola.pl\0"
-"dr.tr\0"
-"zappos\0"
-"googleapis.com\0"
-"trentins\xc3\xbc""d-tirol.it\0info.na\0"
-"botany.museum\0""001www.com\0"
-"yanaizu.fukushima.jp\0info.mv\0info.nf\0landrover\0"
-"fermo.it\0"
-"info.ni\0myvnc.com\0"
-"aremark.no\0xihuan\0"
-"tatsuno.nagano.jp\0info.nr\0"
-"tr.no\0"
-"rennebu.no\0"
-"beeldengeluid.museum\0"
-"cyon.site\0"
-"klepp.no\0r\xc3\xb8st.no\0is-very-sweet.org\0"
-"randaberg.no\0west1-us.cloudjiffy.net\0"
-"iwafune.tochigi.jp\0"
-"floro.no\0"
-"health.vn\0"
-"myphotos.cc\0"
-"info.la\0"
-"ustka.pl\0"
-"embetsu.hokkaido.jp\0\xc3\xa5""fjord.no\0"
-"avellino.it\0"
-"\xc3\xa1k\xc5\x8boluokta.no\0"
-"trentin-sued-tirol.it\0"
-"nesna.no\0trust\0"
-"secaas.hk\0"
-"cahcesuolo.no\0"
-"info.ls\0"
-"java\0"
-"exhibition.museum\0"
-"orland.no\0vm.bytemark.co.uk\0"
-"\xe4\xb8\xad\xe5\x9b\xbd\0"
-"pi.gov.br\0yokoze.saitama.jp\0"
-"author\0smart\0"
-"works.aero\0"
-"viking\0"
-"sel.no\0komvux.se\0"
-"asahikawa.hokkaido.jp\0"
-"gs.of.no\0xin\0net-freaks.com\0"
-"karatsu.saga.jp\0"
-"georgia.su\0"
-"\xe4\xb8\xad\xe5\x9c\x8b\0"
-"adm.br\0nordre-land.no\0nike\0"
-"info.ke\0"
-"lib.ar.us\0"
-"info.ki\0frankfurt.museum\0healthcare\0"
-"tateyama.toyama.jp\0"
-"ribeirao.br\0"
-"fusa.no\0zaporizhzhe.ua\0"
-"adac\0"
-"komatsu.ishikawa.jp\0"
-"plus\0"
-"riopreto.br\0from-co.net\0"
-"withyoutube.com\0"
-"kiyosato.hokkaido.jp\0numata.hokkaido.jp\0"
-"higashiyoshino.nara.jp\0"
-"otama.fukushima.jp\0cdn-edges.net\0"
-"s3-website.eu-central-1.amazonaws.com\0"
-"barcelona\0"
-"hita.oita.jp\0"
-"nonoichi.ishikawa.jp\0jelastic.dogado.eu\0"
-"itoigawa.niigata.jp\0cn.ua\0is-a-socialist.com\0"
+"kasuya.fukuoka.jp\0"
+"qualifioapp.com\0"
+"finearts.museum\0y.se\0"
+"broker.aero\0bern.museum\0"
+"media.aero\0"
+"mino.gifu.jp\0is-an-entertainer.com\0"
+"fh-muenster.io\0"
+"b\xc3\xb8.nordland.no\0"
+"olkusz.pl\0"
+"hattfjelldal.no\0kr.ua\0yahoo\0"
+"s3-eu-central-1.amazonaws.com\0"
+"solutions\0"
+"takaishi.osaka.jp\0space-to-rent.com\0"
+"sandnessj\xc3\xb8""en.no\0fam.pk\0"
+"finnoy.no\0"
+"svalbard.no\0"
+"ichikai.tochigi.jp\0"
+"lib.sd.us\0"
+"bc.ca\0"
+"futurehosting.at\0"
+"abashiri.hokkaido.jp\0lardal.no\0"
+"erimo.hokkaido.jp\0nishiwaki.hyogo.jp\0"
+"uji.kyoto.jp\0"
+"reg.dk\0"
+"kai.yamanashi.jp\0"
+"bungoono.oita.jp\0"
+"enonic.io\0"
+"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0"
+"md.ci\0"
+"giize.com\0"
+"pc.pl\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0"
+"higashiizu.shizuoka.jp\0hitachi\0*.in.futurecms.at\0"
+"s\xc3\xb8r-odal.no\0"
+"hgtv\0"
+"cloud\0"
+"pippu.hokkaido.jp\0ikano\0toshiba\0"
+"gjemnes.no\0"
+"frei.no\0*.firenet.ch\0"
+"cinema.museum\0is-a-cpa.com\0"
+"act.edu.au\0tobe.ehime.jp\0"
+"lib.co.us\0"
+"skin\0"
+"starnberg.museum\0ally\0"
+"obninsk.su\0"
+"swiss\0"
+"friuli-vegiulia.it\0hs.kr\0"
+"flakstad.no\0"
+"nara.nara.jp\0"
+"mihama.fukui.jp\0"
+"\xe5\x95\x86\xe5\x9f\x8e\0"
+"fukuchi.fukuoka.jp\0"
+"virtualuser.de\0"
+"krokstadelva.no\0"
+"westus2.azurestaticapps.net\0"
+"gonohe.aomori.jp\0"
+"cricket\0"
+"cloudns.club\0temp-dns.com\0"
+"*.statics.cloud\0"
+"hitachiota.ibaraki.jp\0kinko.kagoshima.jp\0"
+"lig.it\0amsterdam.museum\0"
+"from.work\0"
+"koriyama.fukushima.jp\0kawachinagano.osaka.jp\0hasuda.saitama.jp\0is.gov.pl\0"
+"embroidery.museum\0"
+"andria-barletta-trani.it\0"
+"bill.museum\0guovdageaidnu.no\0dr.tr\0codes\0"
+"hokksund.no\0asso.re\0"
+"koka.shiga.jp\0"
+"fhv.se\0"
+"tm.cy\0"
+"tas.edu.au\0"
+"portland.museum\0point2this.com\0"
+"tolga.no\0win\0beep.pl\0"
+"ohira.tochigi.jp\0"
+"st.no\0zt.ua\0"
+"antiques.museum\0k12.ok.us\0myshopblocks.com\0"
+"hamaroy.no\0"
+"tm.dz\0"
+"pesaro-urbino.it\0gushikami.okinawa.jp\0salat.no\0creditunion\0"
+"s3.amazonaws.com\0"
+"minamiboso.chiba.jp\0"
+"isshiki.aichi.jp\0"
+"kakamigahara.gifu.jp\0birthplace.museum\0"
+"avellino.it\0virginia.museum\0"
+"nyc.mn\0"
+"stufftoread.com\0"
+"love\0"
+"lt.it\0"
+"tm.fr\0"
+"lerdal.no\0parts\0*.elb.amazonaws.com\0"
+"bnr.la\0"
+"dynathome.net\0"
+"bergamo.it\0tomisato.chiba.jp\0"
+"party\0"
+"rep.br\0"
+"shimonita.gunma.jp\0"
+"saga.saga.jp\0"
+"lib.il.us\0"
+"asso.nc\0video\0"
+"is-an-actress.com\0"
+"narusawa.yamanashi.jp\0"
+"wme\0"
+"moriyoshi.akita.jp\0"
+"kaminoyama.yamagata.jp\0"
+"oseto.nagasaki.jp\0"
+"belluno.it\0kurotaki.nara.jp\0averoy.no\0www.ro\0"
+"franziskaner.museum\0"
+"kanmaki.nara.jp\0"
+"tm.hu\0jetzt\0"
+"shiwa.iwate.jp\0motobu.okinawa.jp\0atami.shizuoka.jp\0"
+"tosu.saga.jp\0"
+"katori.chiba.jp\0"
+"fortal.br\0"
+"shimokawa.hokkaido.jp\0"
+"lyngdal.no\0"
+"trd.br\0flatanger.no\0"
+"miyama.mie.jp\0"
+"ryugasaki.ibaraki.jp\0skien.no\0"
+"numata.gunma.jp\0amsw.nl\0"
+"zushi.kanagawa.jp\0"
+"friulivgiulia.it\0amex\0"
+"taishi.osaka.jp\0floro.no\0\xc3\xa1laheadju.no\0onred.one\0"
+"kitahata.saga.jp\0ski.no\0gr.com\0"
+"ddnsgeek.com\0"
+"settlers.museum\0\xe5\x81\xa5\xe5\xba\xb7\0"
+"s3.ap-south-1.amazonaws.com\0"
+"entertainment.aero\0handson.museum\0"
+"hiroo.hokkaido.jp\0"
+"wow\0"
+"stj\xc3\xb8rdalshalsen.no\0ddnsking.com\0"
+"ostrowwlkp.pl\0"
+"tm.km\0"
+"tv.bb\0atsuma.hokkaido.jp\0lund.no\0under.one\0"
+"kurume.fukuoka.jp\0"
+"bilbao.museum\0balena-devices.com\0"
+"halsa.no\0platter-app.com\0"
+"democracia.bo\0"
+"isesaki.gunma.jp\0"
+"res.aero\0"
+"omihachiman.shiga.jp\0"
+"troms\xc3\xb8.no\0"
+"mamurogawa.yamagata.jp\0north.museum\0salvadordali.museum\0alaheadju.no\0"
+"tv.bo\0"
+"moriya.ibaraki.jp\0"
+"tv.br\0saotome.st\0"
+"miners.museum\0"
+"tm.mc\0estate.museum\0"
+"pu.it\0"
+"sumoto.kumamoto.jp\0coastaldefence.museum\0trysil.no\0"
+"tm.mg\0"
+"\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"e164.arpa\0asso.km\0"
+"rindal.no\0"
+"final\0"
+"mukawa.hokkaido.jp\0"
+"venezia.it\0pl.ua\0"
+"k12.dc.us\0"
+"sandvik\0"
+"evje-og-hornnes.no\0select\0"
+"toyosato.shiga.jp\0"
+"vestre-slidre.no\0club.tw\0"
+"tm.no\0"
+"ine.kyoto.jp\0higashimatsushima.miyagi.jp\0asso.mc\0"
+"england.museum\0gotdns.ch\0"
+"pharmacien.fr\0dsmynas.org\0"
+"fm.br\0paleo.museum\0slupsk.pl\0watch\0wtc\0"
+"divtasvuodna.no\0groks-this.info\0"
+"wtf\0"
+"bl.it\0"
+"sanda.hyogo.jp\0uber.space\0"
+"pubol.museum\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0"
"ryuoh.shiga.jp\0"
-"ws.na\0"
-"accountant\0"
-"firm.ht\0"
-"emr.it\0"
+"express.aero\0pcloud.host\0"
+"ppg.br\0"
+"dattolocal.net\0"
+"handa.aichi.jp\0"
+"rep.kp\0"
+"paragliding.aero\0burghof.museum\0sibenik.museum\0"
+"steiermark.museum\0"
+"tm.pl\0"
+"chernihiv.ua\0"
+"gamo.shiga.jp\0"
+"uni5.net\0"
+"skj\xc3\xa5k.no\0"
+"kartuzy.pl\0lt.ua\0"
+"k12.ak.us\0from-ut.com\0"
+"chiyoda.tokyo.jp\0panama.museum\0"
+"time.museum\0"
+"aerobatic.aero\0*.compute.amazonaws.com.cn\0"
+"bodo.no\0"
+"soc.srcf.net\0"
+"as.us\0"
+"oyabe.toyama.jp\0"
+"trapani.it\0"
+"galsa.no\0"
+"kawagoe.saitama.jp\0is-very-sweet.org\0"
+"nishikawa.yamagata.jp\0"
+"hvaler.no\0"
+"md.us\0"
+"maebashi.gunma.jp\0"
+"katagami.akita.jp\0store.nf\0"
+"dyndns-free.com\0"
+"dev.br\0nf.ca\0tm.ro\0marshalls\0"
+"politie\0lelux.site\0"
"buzen.fukuoka.jp\0"
-"knightpoint.systems\0"
-"iwatsuki.saitama.jp\0leirvik.no\0vennesla.no\0"
-"yamato.kumamoto.jp\0"
-"firm.in\0"
-"campinagrande.br\0yuu.yamaguchi.jp\0"
-"crotone.it\0"
-"onga.fukuoka.jp\0"
-"alta.no\0cc.nv.us\0"
-"yazu.tottori.jp\0"
-"azure\0"
-"cc.fl.us\0"
-"cricket\0"
-"cn.vu\0"
-"chungnam.kr\0royrvik.no\0"
-"k.se\0"
-"sumy.ua\0"
-"tateshina.nagano.jp\0"
-"youtube\0jele.cloud\0"
-"tsukigata.hokkaido.jp\0"
-"shiso.hyogo.jp\0"
-"vicenza.it\0"
-"andriatranibarletta.it\0campidanomedio.it\0"
-"firm.co\0"
-"baidar.no\0"
-"kinokawa.wakayama.jp\0"
-"lplfinancial\0"
-"shinanomachi.nagano.jp\0voss.no\0is-certified.com\0enterprisecloud.nu\0"
+"val-daosta.it\0badajoz.museum\0tm.se\0"
+"tv.im\0"
+"ibestad.no\0"
+"onga.fukuoka.jp\0kumagaya.saitama.jp\0"
+"kuokgroup\0"
+"sevastopol.ua\0"
+"tv.it\0"
+"kurashiki.okayama.jp\0"
+"umig.gov.pl\0chimkent.su\0"
+"moss.no\0"
+"mypep.link\0"
+"homeunix.com\0"
+"vagan.no\0"
+"trentino-s\xc3\xbc""d-tirol.it\0travelersinsurance\0"
+"nakatombetsu.hokkaido.jp\0"
+"xin\0"
+"inagawa.hyogo.jp\0tv.kg\0"
+"trentino-sud-tirol.it\0"
+"gj\xc3\xb8vik.no\0"
+"yotsukaido.chiba.jp\0shishikui.tokushima.jp\0"
+"wassamu.hokkaido.jp\0il.us\0*.compute.estate\0dnsfor.me\0"
+"kuromatsunai.hokkaido.jp\0"
+"\xc3\xa5rdal.no\0"
+"agrigento.it\0"
+"ipifony.net\0hicam.net\0"
+"bushey.museum\0"
+"toei.aichi.jp\0"
+"mesaverde.museum\0"
+"nom.ad\0e.bg\0"
+"fm.it\0nom.ae\0"
+"haebaru.okinawa.jp\0nom.af\0"
+"nom.ag\0mymailer.com.tw\0pyatigorsk.ru\0"
+"wanouchi.gifu.jp\0poker\0ntdll.top\0nom.ai\0"
+"archi\0homedepot\0"
+"holiday\0"
+"nom.al\0"
+"ooshika.nagano.jp\0mashiko.tochigi.jp\0"
+"\xe5\x8f\xb0\xe6\xb9\xbe\0jelastic.team\0"
+"shinshiro.aichi.jp\0"
+"democrat\0"
+"norfolk.museum\0phone\0office-on-the.net\0shacknet.nu\0"
+"pilots.museum\0"
+"tv.na\0knightpoint.systems\0"
+"\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0"
+"vefsn.no\0"
+"homelinux.org\0"
+"fireweb.app\0"
+"beiarn.no\0"
+"shikabe.hokkaido.jp\0"
+"shiftcrypto.io\0"
+"yatsushiro.kumamoto.jp\0"
+"virtual-user.de\0"
+"nom.bz\0nyan.to\0"
+"\xe0\xba\xa5\xe0\xba\xb2\xe0\xba\xa7\0"
+"nom.cl\0"
+"sicily.it\0"
+"nom.co\0sayama.osaka.jp\0verisign\0"
+"yakumo.hokkaido.jp\0withgoogle.com\0"
+"realestate\0"
+"law.za\0sport\0"
+"ce.it\0maif\0"
+"telebit.app\0"
+"miyada.nagano.jp\0"
+"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0awsmppl.com\0nh-serv.co.uk\0"
+"toyono.osaka.jp\0pony.club\0"
+"tm.za\0"
+"museum.tt\0"
+"sk\xc3\xa5nland.no\0"
+"website.yandexcloud.net\0"
+"health.nz\0"
+"yamanouchi.nagano.jp\0circle\0data\0"
+"org.ac\0trentino-suedtirol.it\0"
+"contractors\0"
+"org.ae\0mar.it\0wakkanai.hokkaido.jp\0store.ve\0"
+"org.af\0date\0is-a-designer.com\0"
+"org.ag\0is-lost.org\0"
+"org.ai\0"
+"otaki.saitama.jp\0"
+"org.al\0"
+"org.am\0fm.no\0\xe5\xa4\xa7\xe6\x8b\xbf\0freeddns.us\0"
+"stor-elvdal.no\0"
+"nom.es\0gb.net\0"
+"org.ba\0giving\0istanbul\0"
+"org.ar\0org.bb\0mymediapc.net\0"
+"caracal.mythic-beasts.com\0"
+"org.au\0"
+"alfaromeo\0"
+"ugim.gov.pl\0"
+"org.bh\0pup.gov.pl\0"
+"org.bi\0"
+"org.az\0ide.kyoto.jp\0hol.no\0"
+"uvic.museum\0"
+"org.bm\0"
+"org.bn\0rebun.hokkaido.jp\0choyo.kumamoto.jp\0kasukabe.saitama.jp\0"
+"org.bo\0nom.fr\0"
+"taranto.it\0washingtondc.museum\0"
+"airport.aero\0nom.gd\0"
+"org.br\0nom.ge\0"
+"org.bs\0"
+"org.bt\0"
+"sic.it\0builtwithdark.com\0"
+"izumisano.osaka.jp\0"
+"the.br\0org.bw\0"
+"org.ci\0kuji.iwate.jp\0yahaba.iwate.jp\0nom.gl\0"
+"org.bz\0tv.sd\0"
+"sos.pl\0"
+"org.cn\0"
+"org.co\0sport.hu\0monza-e-della-brianza.it\0"
+"nom.gt\0"
+"gyeongbuk.kr\0planetarium.museum\0equipment\0redstone\0"
+"naie.hokkaido.jp\0obihiro.hokkaido.jp\0"
+"org.cu\0"
+"azurewebsites.net\0qcx.io\0"
+"org.cw\0"
+"minami-alps.yamanashi.jp\0"
+"org.cy\0abr.it\0"
+"nerdpol.ovh\0"
+"nom.hn\0"
+"org.dm\0"
+"bu.no\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0photo\0"
+"org.do\0"
+"ushiku.ibaraki.jp\0claims\0"
+"org.ec\0br\xc3\xb8nn\xc3\xb8ysund.no\0"
+"chernigov.ua\0"
+"org.ee\0kamo.niigata.jp\0marker.no\0"
+"org.eg\0"
+"iwade.wakayama.jp\0tv.tr\0"
+"tanabe.wakayama.jp\0nordreisa.no\0webhosting.be\0"
+"org.dz\0nom.im\0"
+"bolivia.bo\0canon\0from-tn.com\0"
+"store.ro\0"
+"principe.st\0tv.tz\0"
+"codespot.com\0"
+"demo.jelastic.com\0"
+"org.es\0"
+"org.et\0"
+"tako.chiba.jp\0kanegasaki.iwate.jp\0"
+"hermes\0"
+"org.fj\0shari.hokkaido.jp\0"
+"l\xc3\xa1hppi.no\0sande.vestfold.no\0"
+"goip.de\0"
+"n.bg\0org.fm\0"
+"cloud.interhostsolutions.be\0nom.ke\0*.s5y.io\0editorx.io\0"
+"store.st\0"
+"org.ge\0bulsan.it\0intl.tn\0"
+"org.gg\0rg.it\0"
+"org.gh\0"
+"org.gi\0askim.no\0"
+"nom.km\0"
+"sayo.hyogo.jp\0"
+"org.gl\0viking\0"
+"org.gn\0giske.no\0"
+"origins\0"
+"org.gp\0plo.ps\0"
+"org.gr\0"
+"bauhaus\0"
+"org.gt\0health.vn\0"
+"org.gu\0"
+"nom.li\0"
+"miyawaka.fukuoka.jp\0oshu.iwate.jp\0ap-southeast-1.elasticbeanstalk.com\0"
+"org.gy\0"
+"vao.it\0"
+"org.hk\0"
+"org.hn\0"
+"\xc3\xa5""fjord.no\0"
+"emilia-romagna.it\0"
+"is-certified.com\0nom.lv\0"
+"org.ht\0nom.mg\0axis.museum\0bci.dnstrace.pro\0"
+"org.hu\0"
+"from-la.net\0nom.mk\0"
+"org.il\0wedding\0"
+"org.im\0"
+"6.bg\0org.in\0museum.mv\0"
+"go.ci\0cn.it\0museum.mw\0"
+"nom.nc\0"
+"org.iq\0"
+"org.ir\0"
+"org.is\0"
+"frosinone.it\0stuttgart.museum\0"
+"org.je\0"
+"godo.gifu.jp\0nom.ni\0"
+"seihi.nagasaki.jp\0museum.no\0domains\0*.kunden.ortsinfo.at\0"
+"go.cr\0no.it\0"
+"s3-eu-west-2.amazonaws.com\0"
+"naturalhistorymuseum.museum\0ufcfan.org\0"
+"org.jo\0meeres.museum\0"
+"roma.it\0nom.nu\0"
+"kanazawa.ishikawa.jp\0museum.om\0\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0xxx\0"
+"kr.com\0"
+"matsumoto.nagano.jp\0org.kg\0"
+"lierne.no\0"
+"org.ki\0"
+"oga.akita.jp\0\xe6\x96\xb0\xe9\x97\xbb\0"
+"org.km\0"
+"org.kn\0nom.pa\0"
+"org.kp\0nrw.museum\0clicketcloud.com\0"
+"org.la\0r\xc3\xb8""d\xc3\xb8y.no\0"
+"org.lb\0n\xc3\xa6r\xc3\xb8y.no\0nom.pe\0home.dyndns.org\0"
+"org.lc\0lind\xc3\xa5s.no\0"
+"kushimoto.wakayama.jp\0"
+"\xc3\xb8ygarden.no\0"
+"imperia.it\0org.kw\0dentist\0xyz\0"
+"homeoffice.gov.uk\0"
+"fussa.tokyo.jp\0org.ky\0nom.pl\0*.on-rio.io\0"
+"anamizu.ishikawa.jp\0org.kz\0"
+"noto.ishikawa.jp\0org.lk\0"
+"is-a-guru.com\0"
+"nom.qa\0"
+"org.ma\0"
+"yahiko.niigata.jp\0org.lr\0"
+"bihoro.hokkaido.jp\0org.ls\0"
+"nom.pw\0"
+"org.me\0skedsmo.no\0"
+"org.lv\0"
+"org.mg\0"
+"kota.aichi.jp\0"
+"org.ly\0"
+"gausdal.no\0"
+"org.mk\0"
+"org.ml\0dev.vu\0"
+"club.aero\0nasu.tochigi.jp\0"
+"nx.cn\0idf.il\0takahama.aichi.jp\0org.mn\0"
+"org.mo\0e.se\0"
+"gripe\0"
+"org.na\0"
+"nom.re\0centralus.azurestaticapps.net\0"
+"org.ms\0mypets.ws\0"
+"org.mt\0""2038.io\0"
+"org.mu\0"
+"org.mv\0"
+"org.mw\0org.ng\0"
+"org.mx\0unj\xc3\xa1rga.no\0"
+"nsw.au\0org.my\0org.ni\0"
+"org.mz\0vana\0g.vbrplsbx.io\0"
+"\xe8\xb0\xb7\xe6\xad\x8c\0"
+"nom.ro\0"
+"psse.gov.pl\0"
+"masoy.no\0"
+"nom.rs\0"
+"vanguard\0"
+"org.nr\0"
+"from-al.com\0"
+"web.bo\0kouhoku.saga.jp\0farmequipment.museum\0"
+"nom.si\0"
+"kg.kr\0"
+"\xe5\x9f\xbc\xe7\x8e\x89.jp\0mosjoen.no\0qoto.io\0"
+"go.id\0org.nz\0"
+"drammen.no\0org.om\0"
+"wa.au\0owariasahi.aichi.jp\0"
+"oregon.museum\0from-co.net\0"
+"org.pa\0nom.st\0"
+"act.au\0shirakawa.gifu.jp\0"
+"samsclub\0"
+"web.co\0"
+"org.pe\0"
+"org.pf\0opencraft.hosting\0"
+"nom.tj\0"
+"org.ph\0"
+"w.bg\0"
+"go.it\0murakami.niigata.jp\0nom.tm\0"
+"2000.hu\0ueda.nagano.jp\0org.pk\0"
+"pa.gov.br\0harvestcelebration.museum\0org.pl\0"
+"org.pn\0"
+"flekkefjord.no\0"
+"ninohe.iwate.jp\0"
+"org.qa\0"
+"org.pr\0"
+"org.ps\0science\0"
+"web.do\0org.pt\0nom.ug\0"
+"go.jp\0muika.niigata.jp\0"
+"sncf\0"
+"org.py\0community-pro.net\0"
+"go.ke\0"
+"yamada.fukuoka.jp\0"
+"r\xc3\xb8yken.no\0nom.vc\0"
+"ketrzyn.pl\0u2.xnbay.com\0"
+"you\0"
+"zlg.br\0nom.vg\0"
+"fot.br\0nom.uy\0"
+"higashiosaka.osaka.jp\0"
+"go.kr\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0"
+"jelastic.dogado.eu\0"
+"tamakawa.fukushima.jp\0leka.no\0"
+"pb.gov.br\0swatch\0"
+"genkai.saga.jp\0cloudera.site\0"
+"tokuyama.yamaguchi.jp\0org.ro\0"
+"noda.iwate.jp\0org.sa\0"
+"org.sb\0"
+"org.rs\0org.sc\0"
+"org.sd\0s3.ap-northeast-2.amazonaws.com\0"
+"org.se\0org.ru\0"
+"org.rw\0org.sg\0"
+"viterbo.it\0org.sh\0"
+"\xe5\x8d\x83\xe8\x91\x89.jp\0"
+"izumizaki.fukushima.jp\0bel.tr\0"
+"eurovision\0"
+"org.sl\0twmail.cc\0"
+"alta.no\0zp.gov.pl\0org.sn\0"
+"shinto.gunma.jp\0ando.nara.jp\0org.so\0"
+"gx.cn\0ybo.trade\0"
+"yoita.niigata.jp\0"
+"ogliastra.it\0kui.hiroshima.jp\0org.ss\0"
+"kawakami.nagano.jp\0org.st\0dnshome.de\0"
+"shonai.fukuoka.jp\0maritimo.museum\0org.sv\0"
+"saogonca.br\0basketball\0apigee.io\0"
+"omachi.nagano.jp\0realty\0"
+"org.sy\0"
+"web.gu\0org.sz\0org.tj\0jobs.tt\0"
+"cn.ua\0"
+"org.tm\0"
+"tohma.hokkaido.jp\0org.tn\0ro.eu.org\0"
+"org.to\0"
+"org.ua\0cloudns.info\0"
+"store.bb\0sarufutsu.hokkaido.jp\0org.tr\0"
+"yaotsu.gifu.jp\0org.tt\0"
+"ibigawa.gifu.jp\0"
+"org.tw\0org.ug\0"
+"muncie.museum\0schoenbrunn.museum\0"
+"web.id\0macerata.it\0"
+"org.uk\0"
+"ivanovo.su\0"
+"\xe7\xbb\x84\xe7\xbb\x87.hk\0porsanger.no\0in-butter.de\0"
+"nom.za\0"
+"sweetpepper.org\0"
+"sharp\0"
+"snaase.no\0lib.vi.us\0org.vc\0web.in\0"
+"miyako.iwate.jp\0farsund.no\0"
+"org.ve\0in-berlin.de\0"
+"game.tw\0"
+"sling\0"
+"org.uy\0org.vi\0usr.cloud.muni.cz\0"
+"org.uz\0"
+"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0iserv.dev\0shopware.store\0"
+"motorcycle.museum\0cc.sc.us\0"
+"sener\0"
+"org.vn\0khakassia.su\0chirurgiens-dentistes-en-france.fr\0"
+"kyotamba.kyoto.jp\0annefrank.museum\0cn.vu\0"
+"jambyl.su\0customer.mythic-beasts.com\0"
+"ventures\0"
+"nishiokoppe.hokkaido.jp\0"
+"hemne.no\0"
+"nerima.tokyo.jp\0org.vu\0"
+"catholic.edu.au\0"
+"jobs\0"
+"n.se\0yun\0store.dk\0"
+"go.pw\0"
+"niki.hokkaido.jp\0"
+"tsubata.ishikawa.jp\0oyama.tochigi.jp\0"
+"org.ws\0"
+"eu.int\0skype\0"
+"ballangen.no\0"
+"joinville.br\0"
+"cody.museum\0maryland.museum\0"
+"nsn.us\0"
+"softbank\0si.eu.org\0nov.ru\0"
+"nagahama.shiga.jp\0"
+"web.lk\0"
+"org.ye\0"
+"yoichi.hokkaido.jp\0"
+"honefoss.no\0"
+"trentino.it\0dclk\0dsmynas.net\0"
+"surgeonshall.museum\0cc.ok.us\0cog.mi.us\0"
+"nov.su\0"
+"teo.br\0homesecuritymac.com\0"
+"org.za\0"
+"ah.cn\0bluebite.io\0dscloud.mobi\0"
+"\xe9\xa3\x9f\xe5\x93\x81\0"
+"org.yt\0"
+"chiba.jp\0"
+"adm.br\0shiranuka.hokkaido.jp\0web.nf\0"
+"dyndns.tv\0"
+"tado.mie.jp\0org.zm\0with.marketing\0"
+"web.ni\0go.th\0"
+"si.it\0"
+"go.tj\0"
+"kyowa.akita.jp\0kustanai.ru\0"
+"org.zw\0"
+"basilicata.it\0"
+"go.ug\0zip\0"
+"volkenkunde.museum\0"
+"tabuse.yamaguchi.jp\0go.tz\0"
+"government.aero\0"
+"motosu.gifu.jp\0"
+"\xe5\x8f\xb0\xe7\x81\xa3\0"
+"funagata.yamagata.jp\0lib.ny.us\0kustanai.su\0"
+"est-mon-blogueur.com\0"
+"moma.museum\0"
+"nedre-eiker.no\0"
+"cc.ks.us\0sk.eu.org\0"
+"secaas.hk\0"
+"web.pk\0joburg\0"
+"kawanehon.shizuoka.jp\0bykle.no\0"
+"sano.tochigi.jp\0s3.eu-west-3.amazonaws.com\0"
+"ski.museum\0"
+"aomori.jp\0lk3.ru\0"
+"cc.vt.us\0"
+"dyndns.ws\0"
+"soma.fukushima.jp\0nikon\0"
+"comsec\0"
+"pa.it\0"
+"notodden.no\0style\0"
+"mobara.chiba.jp\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
+"blockbuster\0"
+"lugansk.ua\0"
+"ee.eu.org\0"
+"unjarga.no\0sola.no\0"
+"kaneyama.fukushima.jp\0"
+"takayama.nagano.jp\0deno-staging.dev\0"
+"tokke.no\0translate.goog\0"
+"sakuho.nagano.jp\0war.museum\0"
+"hangout\0"
+"property\0debian.net\0"
+"k\xc3\xa5""fjord.no\0"
+"oz.au\0kamiizumi.saitama.jp\0research.museum\0pvt.k12.ma.us\0"
+"cloud.jelastic.open.tim.it\0"
+"from-hi.com\0"
+"oh.us\0"
+"from-ny.net\0futuremailing.at\0*.ex.ortsinfo.at\0"
+"pi.gov.br\0"
+"ru.eu.org\0se.eu.org\0"
+"web.tj\0"
+"ochi.kochi.jp\0"
+"li.it\0lawyer\0"
+"kids.museum\0",
+
+"lucerne.museum\0hopto.me\0"
+"takata.fukuoka.jp\0"
+"w.se\0web.tr\0finance\0"
+"yasuoka.nagano.jp\0folionetwork.site\0syno-ds.de\0"
+"frogn.no\0"
+"iwi.nz\0"
+"rimini.it\0"
+"yukuhashi.fukuoka.jp\0\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0"
+"swidnica.pl\0"
+"*.devcdnaccesso.com\0"
+"nishikata.tochigi.jp\0basicserver.io\0"
+"lib.hi.us\0ma.leg.br\0"
+"usarts.museum\0web.ve\0"
+"chikuhoku.nagano.jp\0"
+"choshi.chiba.jp\0stackhero-network.com\0"
+"barsy.co.uk\0"
+"creditcard\0"
+"tempioolbia.it\0minokamo.gifu.jp\0business\0"
+"dy.fi\0"
+"ainan.ehime.jp\0"
+"mb.ca\0"
+"tone.ibaraki.jp\0"
+"wa.us\0"
+"n\xc3\xa1vuotna.no\0photography\0"
+"contagem.br\0botanicalgarden.museum\0technology\0"
+"castle.museum\0convent.museum\0halloffame.museum\0"
+"kiyosu.aichi.jp\0"
+"gildesk\xc3\xa5l.no\0isa-geek.org\0"
+"herad.no\0"
+"adv.br\0mikawa.yamagata.jp\0"
+"mihama.aichi.jp\0dlugoleka.pl\0"
+"zgora.pl\0"
+"sr.it\0loabat.no\0"
+"usculture.museum\0giehtavuoatna.no\0"
+"fl\xc3\xa5.no\0"
+"diskussionsbereich.de\0"
+"jab.br\0helsinki\0qbuser.com\0"
+"ah.no\0myddns.rocks\0"
+"horten.no\0"
+"rocks\0"
+"i234.me\0"
+"sunagawa.hokkaido.jp\0hitachinaka.ibaraki.jp\0"
+"firmdale\0"
+"cc.ak.us\0"
+"geometre-expert.fr\0"
+"school.museum\0from-id.com\0"
+"glass.museum\0web.za\0"
+"fribourg.museum\0"
+"ayabe.kyoto.jp\0"
+"hitachi.ibaraki.jp\0akiruno.tokyo.jp\0"
+"omg.lol\0"
+"omitama.ibaraki.jp\0nikolaev.ua\0"
+"taketa.oita.jp\0aca.pro\0hosting\0sohu\0"
+"naklo.pl\0"
+"boston.museum\0"
+"amot.no\0"
+"gotdns.com\0"
+"hemnes.no\0"
+"shima.mie.jp\0dp.ua\0"
+"vald-aosta.it\0"
+"kamitsue.oita.jp\0"
+"shimane.jp\0tokoname.aichi.jp\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0"
+"railroad.museum\0pramerica\0"
+"taku.saga.jp\0country\0resindevice.io\0"
+"francaise.museum\0"
"pe.gov.br\0"
-"browsersafetymark.io\0"
-"shisui.chiba.jp\0kasserver.com\0firm.dk\0"
-"qa2.com\0"
-"bib.br\0safe\0"
-"eidskog.no\0"
-"test-iserv.de\0"
-"takatsuki.osaka.jp\0gs.mr.no\0"
-"iraq.museum\0"
-"chat\0s3-sa-east-1.amazonaws.com\0"
-"hida.gifu.jp\0"
-"ehime.jp\0"
-"misato.shimane.jp\0"
-"v\xc3\xa5gs\xc3\xb8y.no\0"
-"isernia.it\0seto.aichi.jp\0"
-"valleeaoste.it\0"
-"bible\0"
-"clinton.museum\0"
-"rishiri.hokkaido.jp\0"
-"sakaki.nagano.jp\0"
-"ne.jp\0troms\xc3\xb8.no\0"
-"emergency.aero\0"
-"nayoro.hokkaido.jp\0aramco\0"
-"from-ga.com\0"
-"ne.ke\0is-an-actress.com\0"
-"gamvik.no\0"
-"rovno.ua\0bloomberg\0"
-"jus.br\0tsuiki.fukuoka.jp\0youth.museum\0raholt.no\0"
-"tube\0"
-"fedex\0"
-"ne.kr\0\xd1\x80\xd1\x83\xd1\x81\0"
-"niiza.saitama.jp\0is-a-green.com\0"
-"hl.cn\0"
-"exchange\0hopto.me\0"
-"is-a-patsfan.org\0"
-"nagatoro.saitama.jp\0"
-"nagano.nagano.jp\0"
-"nakagawa.nagano.jp\0"
-"helsinki.museum\0"
-"servebbs.org\0"
-"serveminecraft.net\0"
-"engine.aero\0yuza.yamagata.jp\0"
-"grajewo.pl\0"
-"ny.us\0"
-"seiro.niigata.jp\0"
-"oirm.gov.pl\0"
-"\xe6\x9d\xb1\xe4\xba\xac.jp\0"
-"seirou.niigata.jp\0az.us\0"
+"kotoura.tottori.jp\0s3.dualstack.ap-northeast-1.amazonaws.com\0"
+"blogsyte.com\0"
+"fuso.aichi.jp\0"
+"okinawa\0en-root.fr\0"
+"aosta-valley.it\0ralingen.no\0""4u.com\0"
+"tanagura.fukushima.jp\0protonet.io\0"
+"oshima.yamaguchi.jp\0nome.pt\0"
+"cc.id.us\0dyndns-ip.com\0"
+"g12.br\0"
+"uchiko.ehime.jp\0"
+"pa.us\0"
+"westeurope.azurestaticapps.net\0"
+"n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
+"aq.it\0ba.it\0"
+"qc.ca\0"
+"osasco.br\0ujitawara.kyoto.jp\0ap-northeast-2.elasticbeanstalk.com\0"
+"rifu.miyagi.jp\0"
+"indian.museum\0nowtv\0virgin\0"
+"forgot.her.name\0"
+"nctu.me\0"
+"mb.it\0homegoods\0"
+"ltda\0"
+"stuff-4-sale.us\0"
+"uda.nara.jp\0"
+"yombo.me\0"
+"hyatt\0"
+"music.museum\0"
+"york.museum\0"
+"kyotango.kyoto.jp\0"
+"fortmissoula.museum\0co.events\0"
+"*.gateway.dev\0"
+"from-mt.com\0from-nd.com\0"
+"piedmont.it\0"
+"song\0"
+"thingdustdata.com\0"
+"kawanishi.yamagata.jp\0"
+"tires\0"
+"mobi.gp\0"
+"owani.aomori.jp\0"
+"ky.us\0"
+"k12.ut.us\0ath.cx\0"
+"pol.dz\0"
+"warmia.pl\0"
+"\xe9\xa6\x99\xe6\xb8\xaf\0"
+"bj.cn\0aogashima.tokyo.jp\0sokndal.no\0ismaili\0"
+"news.hu\0test.tj\0sony\0"
+"from-dc.com\0"
+"yachts\0"
+"agents.aero\0"
+"b\xc3\xa1l\xc3\xa1t.no\0baby\0"
+"belau.pw\0"
+"utashinai.hokkaido.jp\0"
"pa.gov.pl\0"
-"lajolla.museum\0"
-"shizuoka.jp\0"
-"toride.ibaraki.jp\0"
-"tel.tr\0"
-"vpnplus.to\0"
-"t.bg\0"
-"sale\0"
-"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
-"k12.ma.us\0domains\0"
-"ondigitalocean.app\0"
-"minamifurano.hokkaido.jp\0cust.prod.thingdust.io\0"
-"friuliveneziagiulia.it\0"
-"webcam\0est-a-la-masion.com\0"
-"k12.ec\0kagamino.okayama.jp\0"
-"cal.it\0k12.al.us\0"
-"higashichichibu.saitama.jp\0"
-"gold\0jpn.com\0"
-"aosta-valley.it\0sandcats.io\0"
-"golf\0"
-"okoppe.hokkaido.jp\0dyndns-web.com\0"
-"hanno.saitama.jp\0"
-"uonuma.niigata.jp\0gov.scot\0"
-"xxx\0"
-"dnepropetrovsk.ua\0pages.wiardweb.com\0"
-"ne.pw\0"
-"medecin.km\0nalchik.ru\0"
-"tajimi.gifu.jp\0ipifony.net\0"
-"saga.saga.jp\0"
-"komagane.nagano.jp\0moscow.museum\0"
-"info.zm\0"
-"hitachi.ibaraki.jp\0zp.gov.pl\0"
-"jp.eu.org\0"
-"\xe4\xbf\xa1\xe6\x81\xaf\0"
-"sumoto.kumamoto.jp\0"
-"xyz\0"
-"shiogama.miyagi.jp\0tvedestrand.no\0"
-"pb.ao\0pv.it\0"
-"kosei.shiga.jp\0"
-"nalchik.su\0"
-"genoa.it\0hoteles\0"
-"or.at\0vall\xc3\xa9""e-d-aoste.it\0misawa.aomori.jp\0osoyro.no\0"
-"catania.it\0torino.it\0b\xc3\xa1id\xc3\xa1r.no\0"
+"riopreto.br\0even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0"
+"app.br\0"
+"biei.hokkaido.jp\0elblag.pl\0deal\0bookonline.app\0"
+"edu.eu.org\0"
+"radoy.no\0"
+"ws.na\0"
+"taiji.wakayama.jp\0"
+"rodeo\0"
+"\xe7\x82\xb9\xe7\x9c\x8b\0httpbin.org\0"
+"k12.ga.us\0"
+"nishinoomote.kagoshima.jp\0horse\0"
+"reggio-calabria.it\0wajima.ishikawa.jp\0"
+"verm\xc3\xb6gensberatung\0collegefan.org\0"
+"adv.mz\0lunner.no\0"
+"ia.us\0"
+"enterprises\0"
+"m\xc3\xa5s\xc3\xb8y.no\0"
+"cc.me.us\0\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0test.ru\0"
+"yabu.hyogo.jp\0cn.eu.org\0"
+"kouyama.kagoshima.jp\0"
+"pol.ht\0"
+"hasvik.no\0"
+"cc.wv.us\0azure\0"
+"is-with-theband.com\0"
+"bozen.it\0"
+"\xd9\x82\xd8\xb7\xd8\xb1\0capitalone\0"
+"global\0"
+"sardegna.it\0"
+"military.museum\0pisz.pl\0isa-geek.com\0"
+"ouchi.saga.jp\0fiat\0"
+"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0americanexpress\0prvcy.page\0"
+"g\xc3\xbcnstigliefern.de\0"
+"praxi\0"
+"shibata.miyagi.jp\0sandnes.no\0"
+"rio.br\0"
"pr.gov.br\0"
-"firm.ve\0"
-"or.bi\0"
-"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
-"abogado\0*.elb.amazonaws.com\0"
-"nishimera.miyazaki.jp\0"
-"sos.pl\0"
-"uk.kg\0"
-"sth.ac.at\0odate.akita.jp\0"
-"iglesias-carbonia.it\0"
-"stuff-4-sale.org\0"
-"barsy.support\0"
-"goog\0"
-"umb.it\0"
-"lgbt\0"
-"or.ci\0jdevcloud.com\0"
-"tos.it\0toya.hokkaido.jp\0toyama.toyama.jp\0"
-"camera\0"
-"zt.ua\0"
-"or.cr\0"
-"sue.fukuoka.jp\0"
-"k12.il\0"
+"citadel\0"
+"seiro.niigata.jp\0"
+"nord-fron.no\0"
+"git-repos.de\0"
+"smola.no\0"
+"app.gp\0"
+"tokushima.tokushima.jp\0"
+"tranibarlettaandria.it\0"
+"house.museum\0"
+"cc.tn.us\0microsoft\0"
+"fukushima.fukushima.jp\0jefferson.museum\0"
+"trentin-sudtirol.it\0ddns.net\0"
+"fido\0"
+"paris.eu.org\0"
+"catanzaro.it\0"
+"midsund.no\0"
"x443.pw\0"
-"*.stg.dev\0"
-"airtraffic.aero\0l\xc3\xa1hppi.no\0"
-"ashoro.hokkaido.jp\0farmers.museum\0hiphop\0"
-"ami.ibaraki.jp\0"
-"ne.ug\0wien\0"
-"kaminoyama.yamagata.jp\0"
-"ne.tz\0"
-"copenhagen.museum\0"
-"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0ann-arbor.mi.us\0"
-"omaezaki.shizuoka.jp\0sarl\0"
-"iron.museum\0"
-"ne.us\0"
-"grainger\0"
-"watchandclock.museum\0"
-"fst.br\0ris\xc3\xb8r.no\0"
-"koebenhavn.museum\0bounceme.net\0"
-"is-a-geek.net\0"
-"freeboxos.com\0"
-"sko.gov.pl\0cc.tx.us\0"
-"pup.gov.pl\0accesscam.org\0"
-"iwama.ibaraki.jp\0"
-"agriculture.museum\0atm.pl\0"
-"no-ip.co.uk\0"
-"hl.no\0"
-"hadano.kanagawa.jp\0"
-"firm.ro\0cc.hi.us\0"
-"cc.ct.us\0*.ocp.customer-oci.com\0"
-"bando.ibaraki.jp\0"
-"shirosato.ibaraki.jp\0you\0"
-"townnews-staging.com\0"
-"tono.iwate.jp\0hakuba.nagano.jp\0foundation.museum\0"
-"\xd1\x81\xd1\x80\xd0\xb1\0"
-"alaska.museum\0"
-"himeji.hyogo.jp\0"
-"frana.no\0comsec\0"
-"kosuge.yamanashi.jp\0"
-"hosting-cluster.nl\0"
-"natuurwetenschappen.museum\0"
-"iruma.saitama.jp\0"
-"harima.hyogo.jp\0ams1.jls.docktera.net\0"
-"archaeology.museum\0"
-"bulsan-sudtirol.it\0"
-"hof.no\0"
-"stream\0users.scale.virtualcloud.com.br\0"
-"kita.osaka.jp\0lardal.no\0cloud-fr1.unispace.io\0"
-"kitaura.miyazaki.jp\0ryokami.saitama.jp\0histoire.museum\0save\0"
-"agrigento.it\0katsuura.chiba.jp\0minami.kyoto.jp\0kv\xc3\xa6""fjord.no\0loppa.no\0"
-"or.id\0"
-"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0cc.hn\0"
-"tkmaxx\0"
-"gs.st.no\0",
-
-"pri.ee\0"
-"from-ia.com\0webthings.io\0"
-"kumatori.osaka.jp\0fetsund.no\0"
-"otobe.hokkaido.jp\0"
-"or.it\0ninomiya.kanagawa.jp\0comunica\xc3\xa7\xc3\xb5""es.museum\0j.layershift.co.uk\0"
-"balat.no\0"
-"adv.br\0aknoluokta.no\0"
-"friulivgiulia.it\0"
-"erotika.hu\0firm.nf\0"
-"taobao\0firm.ng\0"
-"torahime.shiga.jp\0wiki\0"
-"bs.it\0sites.static.land\0"
-"spy.museum\0"
-"or.jp\0"
-"mckinsey\0"
-"aichi.jp\0geelvinck.museum\0"
-"goldpoint\0definima.io\0"
-"slupsk.pl\0beep.pl\0pointto.us\0"
-"or.ke\0"
-"gs.oslo.no\0kinder\0"
-"saxo\0"
-"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
-"sumita.iwate.jp\0"
-"cards\0"
-"sc.cn\0"
-"or.kr\0ocs.opusinteractive.io\0"
-"itau\0"
-"kai.yamanashi.jp\0"
-"diskstation.me\0"
-"est.pr\0"
-"trentin-s\xc3\xbc""dtirol.it\0shijonawate.osaka.jp\0"
-"yun\0"
-"cci.fr\0"
-"numazu.shizuoka.jp\0u2-local.xnbay.com\0"
-"chirurgiens-dentistes-en-france.fr\0familyds.org\0"
-"wine\0"
-"dattolocal.com\0diskstation.eu\0"
-"yusui.kagoshima.jp\0sula.no\0"
-"is-a-nurse.com\0"
-"production.aero\0shibetsu.hokkaido.jp\0"
-"or.na\0ma.us\0"
-"slg.br\0"
-"or.mu\0"
-"masaki.ehime.jp\0"
-"isshiki.aichi.jp\0cc.na\0"
-"kmpsp.gov.pl\0cc.wy.us\0clicketcloud.com\0"
-"maebashi.gunma.jp\0"
-"ngrok.io\0"
-"samsung\0"
-"k12.tr\0"
-"happou.akita.jp\0"
-"t.se\0"
-"mysecuritycamera.com\0"
-"filegear-jp.me\0"
-"uslivinghistory.museum\0"
-"depot.museum\0"
-"fukagawa.hokkaido.jp\0"
-"shacknet.nu\0"
-"freebox-os.com\0"
-"bozen-s\xc3\xbc""dtirol.it\0oguni.yamagata.jp\0"
-"cnt.br\0nosegawa.nara.jp\0railway.museum\0"
-"lerdal.no\0*.dapps.earth\0"
-"k12.vi\0"
-"ap-southeast-2.elasticbeanstalk.com\0bitbridge.net\0"
-"zip\0zuerich\0"
-"reggio-emilia.it\0"
-"serveexchange.com\0"
-"kozaki.chiba.jp\0or.pw\0"
-"is-a-bulls-fan.com\0"
-"bjarkoy.no\0kindle\0"
-"curitiba.br\0"
-"mus.br\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0"
-"stalbans.museum\0"
-"lib.vt.us\0"
+"s3-external-1.amazonaws.com\0"
+"kv\xc3\xa6nangen.no\0"
+"madrid.museum\0"
+"sandnessjoen.no\0"
+"doesntexist.org\0"
+"s\xc3\xb8rfold.no\0"
+"s3-ap-southeast-2.amazonaws.com\0"
+"its.me\0"
+"kyuragi.saga.jp\0sn\xc3\xa5sa.no\0"
+"senseering.net\0"
+"artcenter.museum\0in-vpn.org\0"
+"flanders.museum\0"
+"tirol\0from.marketing\0"
+"nabari.mie.jp\0mimata.miyazaki.jp\0cy.eu.org\0"
+"miho.ibaraki.jp\0"
+"iopsys.se\0"
+"kizu.kyoto.jp\0"
+"kasai.hyogo.jp\0"
+"contemporary.museum\0from-wv.com\0"
+"oyamazaki.kyoto.jp\0"
+"aip.ee\0"
+"det.br\0narita.chiba.jp\0"
+"snillfjord.no\0"
+"\xe9\xa4\x90\xe5\x8e\x85\0to.work\0inc.hk\0"
+"jprs\0"
+"is.it\0"
+"tt.im\0"
+"univ.sn\0"
+"oguchi.aichi.jp\0audnedaln.no\0"
+"nemuro.hokkaido.jp\0bargains\0"
+"ud.it\0sango.nara.jp\0malvik.no\0"
+"cz.eu.org\0"
+"\xe9\xa6\x99\xe5\xb7\x9d.jp\0bible\0"
+"medio-campidano.it\0onomichi.hiroshima.jp\0"
+"minamiuonuma.niigata.jp\0band\0sandcats.io\0"
+"condos\0"
+"jele.club\0"
+"matsushima.miyagi.jp\0bank\0isteingeek.de\0"
+"studio\0"
+"berkeley.museum\0mansion.museum\0"
+"dell\0"
+"bonn.museum\0k12.sc.us\0"
+"unazuki.toyama.jp\0songdalen.no\0\xeb\x8b\xb7\xec\xbb\xb4\0"
+"swinoujscie.pl\0cc.mn.us\0agakhan\0"
+"bulsan-suedtirol.it\0"
+"okaya.nagano.jp\0"
+"dk.eu.org\0"
+"kitaura.miyazaki.jp\0hayakawa.yamanashi.jp\0"
+"c.bg\0kitadaito.okinawa.jp\0ota.tokyo.jp\0"
+"glade\0"
+"watari.miyagi.jp\0berlev\xc3\xa5g.no\0"
+"kamagaya.chiba.jp\0is-a-soxfan.org\0"
+"jl.cn\0"
+"guam.gu\0oi.kanagawa.jp\0"
+"ayagawa.kagawa.jp\0hanno.saitama.jp\0cards\0"
+"aibetsu.hokkaido.jp\0kanan.osaka.jp\0"
+"tsukui.kanagawa.jp\0"
+"boldlygoingnowhere.org\0"
+"memorial.museum\0"
+"perspecta.cloud\0"
+"arab\0"
+"management\0"
+"bib.br\0amazon\0"
+"\xe5\x85\xac\xe7\x9b\x8a\0"
+"otama.fukushima.jp\0"
+"film\0"
+"cc.hn\0"
+"katashina.gunma.jp\0"
+"s3.dualstack.eu-west-3.amazonaws.com\0"
+"lib.md.us\0"
+"yamagata.ibaraki.jp\0pol.tr\0insurance\0"
+"valleeaoste.it\0nanbu.tottori.jp\0beauty\0"
+"amsterdam\0"
+"belem.br\0"
+"customer.speedpartner.de\0"
+"indiana.museum\0nannestad.no\0"
+"hotels\0meet\0"
+"kokonoe.oita.jp\0pagefrontapp.com\0"
+"cnt.br\0"
+"g\xc3\xa1ivuotna.no\0"
+"bs.it\0"
+"gd.cn\0edgecompute.app\0"
+"rochester.museum\0"
+"atl.jelastic.vps-host.net\0"
+"mt.it\0kimino.wakayama.jp\0"
+"usui.fukuoka.jp\0spot\0wmcloud.org\0"
+"de.eu.org\0mg.leg.br\0myactivedirectory.com\0"
+"tainai.niigata.jp\0izumiotsu.osaka.jp\0"
+"nanyo.yamagata.jp\0"
+"casadelamoneda.museum\0is-a-patsfan.org\0"
+"tsukuba.ibaraki.jp\0"
+"miyazaki.miyazaki.jp\0"
+"wsa.gov.pl\0"
+"hirono.fukushima.jp\0hino.tokyo.jp\0is-a-teacher.com\0"
+"mk.ua\0"
+"nankoku.kochi.jp\0dray-dns.de\0"
+"erotika.hu\0shiftedit.io\0"
+"from-mi.com\0"
+"kashiba.nara.jp\0"
+"az.us\0"
+"shunan.yamaguchi.jp\0k12.ks.us\0auction\0"
+"olbiatempio.it\0"
+"molise.it\0"
+"maritime.museum\0heroy.nordland.no\0"
+"plurinacional.bo\0"
+"hitachiomiya.ibaraki.jp\0murmansk.su\0"
+"wroclaw.pl\0"
+"desi\0"
+"yamanashi.jp\0"
+"iwate.iwate.jp\0"
+"suifu.ibaraki.jp\0jele.host\0"
+"ako.hyogo.jp\0"
+"milano.it\0go.dyndns.org\0"
+"fjaler.no\0"
+"hiraya.nagano.jp\0"
+"user.aseinet.ne.jp\0us.org\0ddnss.de\0"
+"keymachine.de\0"
+"stokke.no\0"
+"campania.it\0familyds.net\0"
+"cc.na\0"
+"nm.cn\0"
+"hotelwithflight.com\0"
+"center\0fire\0"
+"ybo.science\0"
+"blackfriday\0"
+"mobi.tt\0"
+"memorial\0"
+"yn.cn\0"
+"eastafrica.museum\0spdns.eu\0"
"po.gov.pl\0"
-"shimoda.shizuoka.jp\0edu.scot\0"
-"umaji.kochi.jp\0"
-"shichinohe.aomori.jp\0lib.mn.us\0"
-"r.cdn77.net\0"
-"kasukabe.saitama.jp\0"
-"obninsk.su\0"
-"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0holdings\0playstation-cloud.com\0"
-"fh-muenster.io\0"
-"ichikai.tochigi.jp\0"
-"ao.it\0"
-"treviso.it\0"
-"kaas.gg\0"
-"res.aero\0"
-"sc.ke\0"
-"travelchannel\0"
-"sakai.fukui.jp\0"
-"no-ip.info\0"
-"aero\0"
-"sc.kr\0"
-"medecin.fr\0miami\0"
-"valle-d-aosta.it\0takayama.nagano.jp\0or.th\0"
-"boxfuse.io\0"
-"vard\xc3\xb8.no\0"
-"uji.kyoto.jp\0"
-"satosho.okayama.jp\0veg\xc3\xa5rshei.no\0"
-"ricoh\0ufcfan.org\0"
-"nohost.me\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0km.ua\0"
-"mitaka.tokyo.jp\0sc.ls\0pohl\0toolforge.org\0"
-"oystre-slidre.no\0discourse.group\0"
-"or.ug\0\xd1\x81\xd0\xbf\xd0\xb1.\xd1\x80\xd1\x83\xd1\x81\0"
-"stadt.museum\0or.tz\0promo\0cc.ua\0"
-"h\xc3\xa1mm\xc3\xa1rfeasta.no\0"
-"tadaoka.osaka.jp\0"
-"tomi.nagano.jp\0sakura.tochigi.jp\0"
-"adv.mz\0sa-east-1.elasticbeanstalk.com\0"
-"ube.yamaguchi.jp\0"
-"erimo.hokkaido.jp\0or.us\0"
-"emerck\0"
-"aioi.hyogo.jp\0"
-"starostwo.gov.pl\0"
-"futaba.fukushima.jp\0sor-varanger.no\0"
-"nagi.okayama.jp\0"
-"deatnu.no\0"
-"rio.br\0"
-"science.museum\0"
-"olsztyn.pl\0"
-"mayfirst.org\0noip.us\0"
-"is.eu.org\0"
-"mihama.mie.jp\0schmidt\0"
-"8.bg\0cc.al.us\0"
-"research.museum\0k12.mt.us\0"
-"dnsalias.net\0"
-"club.tw\0"
-"ono.fukushima.jp\0francaise.museum\0"
-"slattum.no\0"
-"trolley.museum\0"
-"asso.eu.org\0"
-"shingu.hyogo.jp\0from-ca.com\0"
-"amakusa.kumamoto.jp\0"
-"of.fashion\0"
-"my-wan.de\0"
-"*.triton.zone\0"
-"s3-us-gov-west-1.amazonaws.com\0wafflecell.com\0"
-"capital\0it.eu.org\0"
-"ohira.miyagi.jp\0"
-"trentino-altoadige.it\0"
-"skjervoy.no\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0corporation.museum\0gs.va.no\0"
-"customer.mythic-beasts.com\0"
-"guernsey.museum\0statefarm\0"
-"\xe8\xb4\xad\xe7\x89\xa9\0"
-"trycloudflare.com\0"
-"kamakura.kanagawa.jp\0warszawa.pl\0"
-"mcdir.ru\0"
-"\xe6\x84\x9b\xe5\xaa\x9b.jp\0"
-"oirase.aomori.jp\0"
-"rikubetsu.hokkaido.jp\0green\0"
-"british.museum\0"
-"ina.ibaraki.jp\0"
-"shishikui.tokushima.jp\0"
-"citi\0"
-"trana.no\0"
-"office\0"
-"yugawara.kanagawa.jp\0"
-"iizuna.nagano.jp\0is-found.org\0"
-"!city.kobe.jp\0money.museum\0\xd0\xb1\xd0\xb8\xd0\xb7.\xd1\x80\xd1\x83\xd1\x81\0"
-"aomori.jp\0"
-"ha.cn\0varoy.no\0city\0"
-"utazas.hu\0koto.tokyo.jp\0stavern.no\0"
-"gmina.pl\0"
-"hofu.yamaguchi.jp\0"
-"virtual.museum\0"
-"sc.ug\0"
-"in.eu.org\0"
-"honai.ehime.jp\0sc.tz\0"
-"hair\0"
-"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0"
-"higashiizumo.shimane.jp\0lorenskog.no\0"
-"asuke.aichi.jp\0"
-"namegawa.saitama.jp\0"
-"sc.us\0simple-url.com\0"
-"kaita.hiroshima.jp\0"
-"lea\xc5\x8bgaviika.no\0\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"parliament.nz\0"
-"newjersey.museum\0virgin\0"
-"dnsupdate.info\0"
-"mircloud.host\0"
-"fortmissoula.museum\0immobilien\0"
-"yao.osaka.jp\0"
-"minamata.kumamoto.jp\0"
-"creation.museum\0cc.va.us\0"
-"porn\0daemon.panel.gg\0"
-"kushiro.hokkaido.jp\0\xe5\xb9\xbf\xe4\xb8\x9c\0"
-"grp.lk\0"
-"monster\0"
-"cooperativa.bo\0"
-"jeep\0twmail.cc\0"
-"i.bg\0land-4-sale.us\0"
-"shinjo.okayama.jp\0"
-"eidsberg.no\0"
-"\xe7\xbd\x91\xe7\xab\x99\0"
-"uk.net\0"
-"\xe7\xbd\x91\xe5\x9d\x80\0"
-"hidaka.wakayama.jp\0post\0s3-website-us-west-1.amazonaws.com\0chimkent.su\0nid.io\0"
-"xen.prgmr.com\0"
-"kawanishi.yamagata.jp\0b\xc3\xa1hccavuotna.no\0serveftp.com\0"
-"def.br\0george\0"
-"free.hr\0"
-"s3.cn-north-1.amazonaws.com.cn\0"
-"funabashi.chiba.jp\0"
-"shimotsuke.tochigi.jp\0tysnes.no\0forgot.his.name\0es.leg.br\0"
-"skjerv\xc3\xb8y.no\0"
-"odo.br\0koga.ibaraki.jp\0"
-"shiraoka.saitama.jp\0"
-"gifts\0"
-"mw.gov.pl\0"
-"s3.ap-south-1.amazonaws.com\0"
-"szex.hu\0gs.tm.no\0"
-"lease\0"
-"is-a-republican.com\0"
-"\xd1\x83\xd0\xba\xd1\x80\0"
-"alessandria.it\0zamami.okinawa.jp\0noip.me\0"
-"tarama.okinawa.jp\0"
-"tp.it\0"
+"sakuragawa.ibaraki.jp\0mobi.tz\0\xe5\x85\xab\xe5\x8d\xa6\0"
+"imizu.toyama.jp\0"
+"newhampshire.museum\0fentiger.mythic-beasts.com\0*.quipelements.com\0"
+"niigata.niigata.jp\0"
+"accesscam.org\0"
+"nanae.hokkaido.jp\0"
+"fish\0"
+"ikeda.fukui.jp\0"
+"service.gov.scot\0"
+"from.hr\0luxembourg.museum\0vuelos\0home-webserver.de\0"
+"barsy.net\0"
"toon.ehime.jp\0"
-"og.ao\0scot\0"
-"condos\0"
-"bod\xc3\xb8.no\0final\0caa.li\0"
-"tottori.tottori.jp\0"
-"indianmarket.museum\0"
-"cl.it\0"
-"time.no\0"
-"iwate.jp\0"
-"sasaguri.fukuoka.jp\0dagestan.ru\0"
-"kuchinotsu.nagasaki.jp\0"
-"zapto.org\0"
-"crafting.xyz\0"
-"tysvar.no\0"
-"ms.gov.br\0"
-"kiyama.saga.jp\0meguro.tokyo.jp\0film.museum\0"
-"fm.br\0snoasa.no\0"
-"\xd5\xb0\xd5\xa1\xd5\xb5\0"
-"hachinohe.aomori.jp\0tranby.no\0"
-"dagestan.su\0"
-"pilot.aero\0lidl\0"
-"debian.net\0"
-"americanantiques.museum\0vlaanderen.museum\0"
-"bergen.no\0"
-"kita.tokyo.jp\0chintai\0mcpe.me\0"
-"birkenes.no\0"
-"kiyosu.aichi.jp\0"
-"webhop.biz\0"
-"iobb.net\0"
-"shinonsen.hyogo.jp\0"
-"dsmynas.org\0"
-"dp.ua\0"
-"homeunix.com\0"
-"mydrobo.com\0linkyard.cloud\0"
-"mt.gov.br\0ut.us\0"
-"stjohn.museum\0life\0"
-"umi.fukuoka.jp\0kolobrzeg.pl\0financial\0"
-"wegrow.pl\0"
-"charity\0"
-"in-the-band.net\0"
-"chita.aichi.jp\0"
-"synology-diskstation.de\0"
-"kouzushima.tokyo.jp\0b\xc3\xa5tsfjord.no\0vacations\0"
-"tydal.no\0de.cool\0"
-"uchihara.ibaraki.jp\0thruhere.net\0"
-"com.ac\0boutique\0"
-"com.af\0"
-"com.ag\0varggat.no\0washtenaw.mi.us\0"
-"takatori.nara.jp\0cc.ks.us\0"
-"com.ai\0ha.no\0"
-"sicilia.it\0"
-"com.al\0*.nodebalancer.linode.com\0ditchyourip.com\0"
-"com.am\0emp.br\0fortal.br\0andria-trani-barletta.it\0tonami.toyama.jp\0"
-"inawashiro.fukushima.jp\0gangaviika.no\0"
-"hiraizumi.iwate.jp\0"
-"com.ba\0lefrak\0"
-"com.ar\0com.bb\0karate.museum\0"
+"godaddy\0"
+"meme\0"
+"c.la\0"
+"l.bg\0marburg.museum\0"
+"from-oh.com\0adygeya.su\0"
+"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"canada.museum\0"
+"shiraoka.saitama.jp\0roan.no\0"
+"orange\0"
+"re.it\0vlaanderen.museum\0"
+"com.ac\0"
+"com.af\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0"
+"com.ag\0"
+"obira.hokkaido.jp\0"
+"com.ai\0lixil\0spdns.org\0"
+"com.al\0"
+"com.am\0"
+"k12.ec\0osteroy.no\0"
+"com.ba\0flor\xc3\xb8.no\0barsy.online\0"
+"com.ar\0com.bb\0moroyama.saitama.jp\0"
+"oum.gov.pl\0"
+"menu\0"
"com.au\0"
-"plantation.museum\0"
+"not.br\0rockart.museum\0"
"com.aw\0"
-"com.bh\0"
-"com.bi\0"
-"com.az\0"
-"saroma.hokkaido.jp\0"
+"com.bh\0wakayama.jp\0lib.nm.us\0"
+"com.bi\0ca.eu.org\0mcpre.ru\0"
+"com.az\0gov.nc.tr\0"
+"economia.bo\0"
"com.bm\0"
"com.bn\0"
"com.bo\0"
+"takatori.nara.jp\0re.kr\0\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0"
+"mobi.na\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0kurgan.su\0"
"com.br\0"
-"com.bs\0kanagawa.jp\0"
-"com.bt\0rsvp\0"
-"v\xc3\xa5g\xc3\xa5.no\0"
-"frog.museum\0haus\0blogdns.org\0"
-"com.by\0com.ci\0"
-"com.bz\0"
-"com.cm\0"
-"com.cn\0"
-"com.co\0worse-than.tv\0"
-"nore-og-uvdal.no\0"
-"masoy.no\0"
-"wajiki.tokushima.jp\0turen.tn\0"
+"com.bs\0moriyama.shiga.jp\0"
+"com.bt\0moscow.museum\0"
+"kamiamakusa.kumamoto.jp\0minamiise.mie.jp\0mobi.ng\0"
+"kikugawa.shizuoka.jp\0shibuya.tokyo.jp\0"
+"4.bg\0com.by\0com.ci\0dyndns-server.com\0"
+"com.bz\0cl.it\0adygeya.ru\0"
+"hiji.oita.jp\0"
+"mielec.pl\0"
+"com.cm\0omotego.fukushima.jp\0"
+"com.cn\0piacenza.it\0freeddns.org\0"
+"com.co\0"
+"minamiechizen.fukui.jp\0ninja\0"
+"repbody.aero\0"
+"trento.it\0isa-geek.net\0"
"com.cu\0com.de\0"
-"portland.museum\0gs.nt.no\0"
-"com.cw\0"
-"moss.no\0"
-"com.cy\0asakawa.fukushima.jp\0apps.fbsbx.com\0"
-"wajima.ishikawa.jp\0"
-"fukui.fukui.jp\0"
-"com.dm\0og.it\0mitoyo.kagawa.jp\0from-ne.com\0"
-"l-o-g-i-n.de\0static-access.net\0"
+"com.cw\0spdns.de\0"
+"com.cy\0"
+"okayama.okayama.jp\0"
+"cc.ua\0"
+"minami.tokushima.jp\0"
+"com.dm\0"
+"aichi.jp\0dyn-vpn.de\0"
"com.do\0"
-"like\0"
-"yorkshire.museum\0"
-"com.ec\0fm.it\0"
-"com.ee\0eu-central-1.elasticbeanstalk.com\0"
-"com.eg\0"
-"i.ng\0holiday\0"
-"com.dz\0hichiso.gifu.jp\0"
-"salat.no\0"
-"nishiazai.shiga.jp\0yoga\0"
-"fedorainfracloud.org\0"
-"com.es\0kiso.nagano.jp\0"
+"otofuke.hokkaido.jp\0epson\0"
+"com.ec\0"
+"larvik.no\0"
+"com.ee\0naruto.tokushima.jp\0army\0"
+"entomology.museum\0"
+"com.eg\0trentinosud-tirol.it\0"
+"anjo.aichi.jp\0"
+"schools.nsw.edu.au\0noshiro.akita.jp\0"
+"com.dz\0"
+"fujisawa.iwate.jp\0strand.no\0"
+"nagano.jp\0sukagawa.fukushima.jp\0"
+"nes.buskerud.no\0"
+"ome.tokyo.jp\0"
+"com.es\0is-a-rockstar.com\0"
"com.et\0"
-"naroy.no\0"
-"com.fj\0"
-"miyashiro.saitama.jp\0\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0"
-"com.fm\0"
-"svalbard.no\0"
-"federation.aero\0com.fr\0"
-"murata.miyagi.jp\0"
-"com.ge\0"
-"surgeonshall.museum\0safety\0"
-"com.gh\0kv.ua\0"
+"v\xc3\xa5gan.no\0"
+"bus.museum\0mt.us\0nd.us\0"
+"k12.il\0dance\0"
+"bar.pro\0"
+"com.fj\0togane.chiba.jp\0"
+"sakahogi.gifu.jp\0glass\0"
+"arpa\0com.fm\0"
+"fedje.no\0talk\0"
+"*.spectrum.myjino.ru\0zakopane.pl\0"
+"com.fr\0"
+"coop.ht\0"
+"of.by\0"
+"com.ge\0ondigitalocean.app\0"
+"forte.id\0"
+"com.gh\0"
"com.gi\0"
-"i.ph\0limo\0"
+"c.se\0uk.oxa.cloud\0bar0.net\0"
+"qld.gov.au\0brother\0"
"com.gl\0"
-"sciencecenters.museum\0"
"com.gn\0"
-"tamba.hyogo.jp\0"
-"com.gp\0"
-"com.gr\0"
-"com.gt\0nagareyama.chiba.jp\0"
-"com.gu\0vegas\0dd-dns.de\0"
-"link\0"
-"database.museum\0"
-"academy.museum\0baths.museum\0"
-"vic.edu.au\0com.gy\0"
-"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0"
-"com.hk\0granvin.no\0"
-"com.hn\0aquila.it\0perugia.it\0"
-"tagawa.fukuoka.jp\0"
-"defense.tn\0"
-"amagasaki.hyogo.jp\0misato.wakayama.jp\0"
-"com.hr\0"
-"com.ht\0amli.no\0"
-"bibai.hokkaido.jp\0money\0"
-"user.srcf.net\0"
-"com.im\0ohi.fukui.jp\0naamesjevuemie.no\0dy.fi\0"
-"wiki.bo\0fm.no\0jgora.pl\0gallery\0"
-"com.io\0bolzano.it\0sandefjord.no\0freesite.host\0"
-"hioki.kagoshima.jp\0"
-"wiki.br\0com.iq\0s3.dualstack.us-east-2.amazonaws.com\0"
-"com.is\0ogori.fukuoka.jp\0"
-"k12.ok.us\0"
-"saijo.ehime.jp\0"
-"i.se\0"
-"mosjoen.no\0"
-"issmarterthanyou.com\0"
-"kanna.gunma.jp\0"
-"com.jo\0drangedal.no\0"
-"aerodrome.aero\0lima.zone\0"
-"dynalias.com\0"
-"kanoya.kagoshima.jp\0"
-"pacific.museum\0protection\0"
-"oristano.it\0com.kg\0redstone\0"
-"localhost.daplie.me\0"
-"com.ki\0austevoll.no\0infiniti\0servebbs.com\0"
-"nexus\0"
-"trentino-sued-tirol.it\0*.0emm.com\0firewall-gateway.net\0"
-"com.km\0limited\0"
-"tokai.ibaraki.jp\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0lotte\0"
-"yura.wakayama.jp\0evje-og-hornnes.no\0"
-"com.kp\0"
-"com.la\0"
-"iheya.okinawa.jp\0com.lb\0law.za\0"
-"com.lc\0bjugn.no\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0msk.ru\0"
+"cloud.goog\0"
+"com.gp\0achi.nagano.jp\0h\xc3\xb8yanger.no\0herokuapp.com\0"
+"bomlo.no\0d\xc3\xb8nna.no\0singles\0alpha.bounty-full.com\0"
+"com.gr\0conn.uk\0"
+"!www.ck\0com.gt\0"
+"com.gu\0hinohara.tokyo.jp\0mobi.ke\0"
+"akishima.tokyo.jp\0b\xc3\xa1id\xc3\xa1r.no\0"
+"koeln\0"
+"com.gy\0from-ar.com\0cd.eu.org\0"
+"com.hk\0ancona.it\0"
+"\xe5\x85\xac\xe5\x8f\xb8\0"
+"com.hn\0"
+"yoshida.saitama.jp\0"
+"ven.it\0inazawa.aichi.jp\0*.banzai.cloud\0"
+"coop.br\0"
+"com.hr\0free.hr\0"
+"cc.co.us\0"
+"com.ht\0bod\xc3\xb8.no\0"
+"adachi.tokyo.jp\0macys\0"
+"sjc.br\0"
+"toyota.yamaguchi.jp\0"
+"marketing\0"
+"computer\0"
+"com.im\0"
+"com.io\0mydrobo.com\0"
+"experts-comptables.fr\0yonaguni.okinawa.jp\0"
+"com.iq\0"
+"taifun-dns.de\0"
+"com.is\0"
+"u.bg\0higashimatsuyama.saitama.jp\0"
+"loginline.services\0"
+"bozen-sudtirol.it\0\xe6\x96\xb0\xe6\xbd\x9f.jp\0"
+"uzhgorod.ua\0"
+"map.fastlylb.net\0"
+"asda\0"
+"rn.it\0"
+"com.jo\0\xc3\xa1lt\xc3\xa1.no\0"
+"arte\0"
+"komatsu.ishikawa.jp\0"
+"yokkaichi.mie.jp\0"
+"luxe\0"
+"cherkassy.ua\0de.gt\0"
+"com.kg\0museumvereniging.museum\0kaluga.su\0"
+"devices.resinstaging.io\0"
+"com.ki\0embaixada.st\0"
+"messina.it\0\xe5\xa4\xa7\xe9\x98\xaa.jp\0"
+"gv.ao\0"
+"com.km\0"
+"com.kp\0aviation.museum\0shell\0"
+"gv.at\0com.la\0"
+"com.lb\0"
+"com.lc\0"
"com.kw\0"
-"lotto\0"
-"com.ky\0lib.va.us\0works\0blogsite.xyz\0"
-"com.kz\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0world\0"
-"londrina.br\0com.lk\0"
-"nasushiobara.tochigi.jp\0"
-"kurume.fukuoka.jp\0"
-"glug.org.uk\0"
-"adult\0"
-"ms.it\0com.lr\0"
-"msk.su\0ciscofreak.com\0"
-"kuzumaki.iwate.jp\0juedisches.museum\0gs.aa.no\0"
-"com.lv\0homegoods\0stada\0"
-"com.mg\0cn.com\0"
-"davvenj\xc3\xa1rga.no\0"
-"minamiizu.shizuoka.jp\0com.ly\0"
-"higashi.fukuoka.jp\0"
-"com.mk\0wuoz.gov.pl\0"
+"vf.no\0"
+"fujisato.akita.jp\0com.ky\0"
+"com.kz\0"
+"com.lk\0"
+"\xe6\xb2\x96\xe7\xb8\x84.jp\0barsy.pro\0"
+"bbva\0"
+"shimosuwa.nagano.jp\0"
+"omura.nagasaki.jp\0"
+"\xc3\xb8yer.no\0sorreisa.no\0"
+"com.lr\0gub.uy\0"
+"historical.museum\0l\xc3\xb8renskog.no\0shiksha\0"
+"com.lv\0cc.vi.us\0dynalias.net\0"
+"livorno.it\0kawaminami.miyazaki.jp\0com.mg\0"
+"com.ly\0"
+"seirou.niigata.jp\0com.mk\0trustee.museum\0"
"com.ml\0"
-"kamijima.ehime.jp\0is-a-democrat.com\0"
"com.mo\0"
+"crafts.museum\0of.je\0"
"com.na\0"
-"*.kobe.jp\0com.ms\0"
+"com.ms\0"
"com.mt\0"
-"com.mu\0"
+"tomi.nagano.jp\0com.mu\0"
"com.mv\0com.nf\0"
-"ad.jp\0com.mw\0com.ng\0krokstadelva.no\0\xd8\xb9\xd8\xb1\xd8\xa8\0"
-"yn.cn\0com.mx\0sokndal.no\0seat\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0"
-"com.my\0com.ni\0"
-"bolivia.bo\0ltd.cy\0otago.museum\0est-a-la-maison.com\0"
-"dance\0"
-"ms.kr\0"
+"com.mw\0com.ng\0"
+"com.mx\0mw.gov.pl\0clickrising.net\0"
+"com.my\0com.ni\0exchange\0"
+"virtual.museum\0"
+"skaun.no\0"
+"barsy.pub\0"
"com.nr\0"
-"sakura.chiba.jp\0"
-"gz.cn\0hashbang.sh\0"
-"from-tn.com\0"
-"air.museum\0"
-"review\0"
-"\xc3\xa5rdal.no\0"
-"\xe4\xbc\x81\xe4\xb8\x9a\0"
-"boavista.br\0com.om\0auction\0"
-"net.eu.org\0"
-"dell-ogliastra.it\0live\0"
-"medicina.bo\0com.pa\0is-a-nascarfan.com\0"
-"taiji.wakayama.jp\0lon.wafaicloud.com\0"
-"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0"
-"com.pe\0"
-"res.in\0lebesby.no\0com.pf\0"
-"valleaosta.it\0"
-"artsandcrafts.museum\0com.ph\0"
-"shoes\0"
-"hasvik.no\0"
+"campidano-medio.it\0"
+"hanyu.saitama.jp\0nid.io\0"
+"markets\0certmgr.org\0"
+"\xd9\x83\xd9\x88\xd9\x85\0"
+"cloudycluster.net\0*.on-rancher.cloud\0"
+"*.kawasaki.jp\0k12.me.us\0"
+"bergbau.museum\0"
+"asia\0shinichi.hiroshima.jp\0com.om\0"
+"ovre-eiker.no\0"
+"accenture\0"
+"kasuga.hyogo.jp\0com.pa\0"
+"nm.us\0"
+"schlesisches.museum\0s\xc3\xb8mna.no\0"
+"s3.dualstack.us-east-2.amazonaws.com\0issmarterthanyou.com\0"
+"com.pe\0de.ls\0"
+"com.pf\0de.md\0"
+"suli.hu\0"
+"com.ph\0"
+"lewismiller.museum\0"
+"organic\0blog.gt\0"
"com.pk\0"
"com.pl\0"
-"dyr\xc3\xb8y.no\0embaixada.st\0"
-"uwajima.ehime.jp\0"
-"beauxarts.museum\0"
-"tunes\0"
+"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0"
+"ms.gov.br\0historyofscience.museum\0"
+"barletta-trani-andria.it\0holmestrand.no\0"
"com.qa\0"
-"in.na\0namdalseid.no\0com.pr\0"
-"com.ps\0uber.space\0"
-"com.pt\0"
-"\xe9\x80\x9a\xe8\xb2\xa9\0"
-"org.ac\0"
-"gjerdrum.no\0com.py\0"
-"org.ae\0ltd.gi\0in.ni\0training\0"
-"org.af\0philately.museum\0"
-"org.ag\0"
-"revista.bo\0"
-"org.ai\0"
-"aguni.okinawa.jp\0seek\0"
-"org.al\0"
-"org.am\0arakawa.tokyo.jp\0"
-"k12.vi.us\0"
-"r.bg\0com.re\0"
-"org.ba\0"
-"org.ar\0org.bb\0inder\xc3\xb8y.no\0"
-"hawaii.museum\0co.network\0"
-"org.au\0"
-"k12.id.us\0ltd.hk\0"
-"org.bh\0minano.saitama.jp\0"
-"org.bi\0udono.mie.jp\0"
-"org.az\0com.ro\0"
-"taishi.osaka.jp\0"
-"com.sa\0"
-"org.bm\0oishida.yamagata.jp\0rygge.no\0com.sb\0pt.eu.org\0"
-"org.bn\0naruto.tokushima.jp\0com.sc\0"
-"org.bo\0com.sd\0"
-"niepce.museum\0hitra.no\0com.se\0com.ru\0"
-"org.br\0naka.ibaraki.jp\0com.sg\0"
-"org.bs\0com.sh\0"
-"org.bt\0"
-"yusuhara.kochi.jp\0syncloud.it\0indowapblog.com\0"
-"barsyonline.co.uk\0urown.cloud\0"
-"org.bw\0com.sl\0"
-"de.gt\0"
-"org.ci\0com.sn\0"
-"org.bz\0com.so\0"
-"org.cn\0com.ss\0"
-"org.co\0com.st\0nym.by\0"
-"jaworzno.pl\0nym.bz\0"
-"com.sv\0"
-"ebina.kanagawa.jp\0"
-"\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0"
-"com.sy\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0"
-"org.cu\0com.tj\0"
-"\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0"
-"org.cw\0"
-"com.tm\0ams.cloudswitches.com\0"
-"org.cy\0ora.gunma.jp\0com.tn\0"
-"tamano.okayama.jp\0com.to\0"
+"fukui.fukui.jp\0com.pr\0dontexist.net\0"
+"fla.no\0com.ps\0"
+"brussel.museum\0com.pt\0"
+"komono.mie.jp\0"
+"l.se\0"
+"kakegawa.shizuoka.jp\0"
+"komae.tokyo.jp\0com.py\0\xe5\x95\x86\xe5\xba\x97\0"
+"boleslawiec.pl\0"
+"k12.tr\0yali.mythic-beasts.com\0"
+"art.br\0fusa.no\0"
+"sakata.yamagata.jp\0discount\0"
+"abu.yamaguchi.jp\0"
+"us-gov-west-1.elasticbeanstalk.com\0jed.wafaicloud.com\0"
+"sakegawa.yamagata.jp\0"
+"vix.br\0asahi.ibaraki.jp\0ohira.miyagi.jp\0com.re\0"
+"kanie.aichi.jp\0natura\0"
+"graphics\0"
+"of.no\0"
+"philadelphiaarea.museum\0taxi\0"
+"mt.gov.br\0"
+"com.ro\0"
+"otsuchi.iwate.jp\0com.sa\0"
+"yawata.kyoto.jp\0com.sb\0"
+"yazu.tottori.jp\0com.sc\0"
+"com.sd\0k12.tx.us\0k12.vi\0withyoutube.com\0"
+"blog.bo\0com.se\0com.ru\0"
+"com.sg\0"
+"blog.br\0com.sh\0cc.ny.us\0tunk.org\0"
+"\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0no-ip.biz\0"
+"art.do\0\xe6\x8b\x9b\xe8\x81\x98\0githubpreview.dev\0"
+"com.sl\0"
+"bahn.museum\0com.sn\0"
+"ogori.fukuoka.jp\0com.so\0"
+"kainan.tokushima.jp\0"
+"usa.oita.jp\0hemsedal.no\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0"
+"caxias.br\0mo\xc3\xa5reke.no\0skierva.no\0"
+"com.ss\0"
+"com.st\0"
+"art.dz\0kawaba.gunma.jp\0com.sv\0"
+"laspezia.it\0"
+"merseine.nu\0"
+"trentinos\xc3\xbc""dtirol.it\0com.sy\0"
+"com.tj\0eastasia.azurestaticapps.net\0"
+"loab\xc3\xa1t.no\0poltava.ua\0*.customer-oci.com\0"
+"com.tm\0"
+"com.tn\0turen.tn\0"
+"teramo.it\0com.to\0"
"com.ua\0"
-"parliament.cy\0org.dm\0com.tr\0"
-"org.do\0pt.it\0shimofusa.chiba.jp\0com.tt\0"
-"nishiokoppe.hokkaido.jp\0uscountryestate.museum\0user.party.eus\0"
-"ruhr\0"
-"forl\xc3\xac-cesena.it\0lo.it\0com.tw\0com.ug\0"
-"org.ec\0hadsel.no\0"
-"abc.br\0org.ee\0"
-"tselinograd.su\0"
-"org.eg\0oceanographic.museum\0"
-"dnsalias.org\0dyn-berlin.de\0nym.ec\0"
-"org.dz\0"
-"*.kunden.ortsinfo.at\0"
-"com.vc\0"
-"catholic.edu.au\0chikusei.ibaraki.jp\0in.rs\0"
+"com.tr\0"
+"com.tt\0"
+"pilot.aero\0"
+"com.tw\0com.ug\0audible\0"
+"ezproxy.kuleuven.be\0"
+"yasaka.nagano.jp\0"
+"cremona.it\0j.scaleforce.com.cy\0"
+"chicago.museum\0"
+"tamaki.mie.jp\0"
+"seki.gifu.jp\0timekeeping.museum\0lib.ok.us\0"
+"tysv\xc3\xa6r.no\0"
+"reliance\0"
+"com.vc\0in-vpn.net\0"
+"is-a-musician.com\0"
"com.ve\0"
-"artanddesign.museum\0komforb.se\0"
-"org.es\0"
-"org.et\0com.uy\0com.vi\0"
-"state.museum\0com.uz\0appspot.com\0"
-"barclays\0"
-"int.ar\0ltd.lk\0"
-"xj.cn\0taka.hyogo.jp\0"
-"com.vn\0"
-"org.fj\0"
-"romskog.no\0"
-"tuva.su\0"
-"org.fm\0"
-"plc.co.im\0leclerc\0\xe8\x81\x94\xe9\x80\x9a\0"
-"int.az\0"
+"cam.it\0nisshin.aichi.jp\0takahama.fukui.jp\0aga.niigata.jp\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0"
+"zarow.pl\0cc.la.us\0com.uy\0com.vi\0"
+"com.uz\0"
+"kyiv.ua\0"
+"california.museum\0"
+"ibaraki.osaka.jp\0\xc3\xa5krehamn.no\0com.vn\0"
+"kokubunji.tokyo.jp\0skjervoy.no\0"
"com.vu\0"
-"matsuyama.ehime.jp\0"
-"int.bo\0satte.saitama.jp\0in.th\0"
-"org.ge\0larvik.no\0"
-"ac.gov.br\0org.gg\0vall\xc3\xa9""e-aoste.it\0"
-"org.gh\0fukushima.hokkaido.jp\0"
-"org.gi\0\xe9\x9d\x92\xe6\xa3\xae.jp\0"
-"rendalen.no\0"
-"nc.tr\0"
-"org.gl\0repair.men\0"
-"in.ua\0"
-"int.ci\0org.gn\0com.ws\0"
-"pubol.museum\0"
-"org.gp\0"
-"org.gr\0shop.ht\0toyama.jp\0"
-"shop.hu\0yoro.gifu.jp\0ltd.ng\0"
-"int.co\0org.gt\0yamagata.jp\0"
-"org.gu\0katori.chiba.jp\0"
-"soc.srcf.net\0de.ls\0"
-"nym.gr\0de.md\0"
-"org.gy\0"
-"democracia.bo\0shiga.jp\0wblog.id\0"
-"org.hk\0"
-"tysv\xc3\xa6r.no\0ms.us\0nc.us\0"
-"aland.fi\0org.hn\0"
-"valleedaoste.it\0in.us\0nym.gy\0"
-"finearts.museum\0bardu.no\0com.ye\0"
-"nym.hk\0"
-"yamada.fukuoka.jp\0"
-"org.ht\0city.hu\0"
-"org.hu\0cipriani\0temasek\0"
-"omasvuotna.no\0"
-"okagaki.fukuoka.jp\0ashgabad.su\0"
-"for.sale\0"
-"flakstad.no\0nym.ie\0"
-"org.il\0"
-"org.im\0"
-"org.in\0monzabrianza.it\0chiba.jp\0storage.yandexcloud.net\0"
-"ask\xc3\xb8y.no\0"
-"mutsu.aomori.jp\0homes\0j.scaleforce.net\0"
-"org.iq\0"
-"org.ir\0"
-"org.is\0"
-"org.je\0translate.goog\0"
-"krym.ua\0com.zm\0today\0wmflabs.org\0"
-"habikino.osaka.jp\0sandiego.museum\0k12.ks.us\0"
-"manaus.br\0"
-"ushiku.ibaraki.jp\0fedorapeople.org\0"
-"org.jo\0k12.ca.us\0intuit\0"
-"cambridge.museum\0global.prod.fastly.net\0"
-"gujo.gifu.jp\0kaluga.su\0"
-"bryne.no\0"
-"rankoshi.hokkaido.jp\0monash\0"
-"arts.co\0"
-"org.kg\0idrett.no\0"
-"isa.kagoshima.jp\0org.ki\0jewishart.museum\0"
-"yalta.ua\0"
-"3utilities.com\0"
-"modena.it\0"
-"org.km\0"
-"saku.nagano.jp\0org.kn\0"
-"izumizaki.fukushima.jp\0mypi.co\0"
-"org.kp\0"
-"org.la\0"
-"kanmaki.nara.jp\0org.lb\0"
-"chikuzen.fukuoka.jp\0org.lc\0"
-"zlg.br\0"
-"izumo.shimane.jp\0kikugawa.shizuoka.jp\0"
-"org.kw\0pramerica\0nym.la\0"
-"uk0.bigv.io\0endoftheinternet.org\0"
-"fujimino.saitama.jp\0org.ky\0nym.lc\0"
-"org.kz\0"
-"org.lk\0"
-"brussels.museum\0"
-"higashishirakawa.gifu.jp\0nym.li\0"
-"nym.kz\0"
-"te.it\0org.ma\0"
-"org.lr\0utsira.no\0"
-"org.ls\0davvenjarga.no\0"
-"bunkyo.tokyo.jp\0"
-"org.me\0"
-"org.lv\0"
-"sa.au\0org.mg\0b-data.io\0"
-"betainabox.com\0"
-"org.ly\0"
-"*.magentosite.cloud\0nym.lt\0"
-"org.mk\0demo.datacenter.fi\0nym.lu\0nym.me\0"
-"org.ml\0"
-"ca.it\0"
-"shobara.hiroshima.jp\0settsu.osaka.jp\0org.mn\0szkola.pl\0"
-"org.mo\0"
-"org.na\0"
-"org.ms\0"
-"org.mt\0nym.mn\0"
-"org.mu\0budapest\0"
-"nl.ca\0org.mv\0"
-"org.mw\0org.ng\0"
-"int.is\0org.mx\0"
-"org.my\0org.ni\0"
-"org.mz\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
-"\xe9\xa6\x99\xe5\xb7\x9d.jp\0stateofdelaware.museum\0"
-"surrey.museum\0"
-"ltd.ua\0"
-"nym.mx\0nl.ci\0"
-"am.br\0trentinostirol.it\0s3.dualstack.ap-northeast-1.amazonaws.com\0"
-"h\xc3\xa1pmir.no\0org.nr\0"
-"sa.cr\0lancaster\0"
-"pages.dev\0no-ip.org\0"
-"paragliding.aero\0politica.bo\0"
-"riodejaneiro.museum\0ltd.uk\0"
-"coloradoplateau.museum\0"
-"org.nz\0\xe5\x9c\xa8\xe7\xba\xbf\0teaches-yoga.com\0"
-"oum.gov.pl\0"
-"org.om\0"
-"ltd.co.im\0"
-"nym.nz\0"
-"lib.ee\0org.pa\0"
-"lincoln.museum\0"
-"dallas.museum\0org.pe\0"
-"int.la\0org.pf\0"
-"freebox-os.fr\0"
-"org.ph\0"
-"r\xc3\xa6lingen.no\0"
-"org.pk\0nym.pe\0"
-"org.pl\0"
-"vadso.no\0s3-ca-central-1.amazonaws.com\0"
-"heroy.more-og-romsdal.no\0org.pn\0"
-"int.lk\0"
-"futtsu.chiba.jp\0kongsberg.no\0org.qa\0"
-"org.pr\0property\0mypep.link\0"
-"org.ps\0"
-"valle-daosta.it\0gjemnes.no\0org.pt\0"
-"de.us\0"
-"station.museum\0"
-"org.py\0"
-"trentinosudtirol.it\0ca.na\0nym.pt\0"
-"\xe5\xa8\xb1\xe4\xb9\x90\0"
-"seoul.kr\0colonialwilliamsburg.museum\0"
-"yamagata.gifu.jp\0sarpsborg.no\0servehalflife.com\0"
-"helsinki\0"
-"in-addr.arpa\0catanzaro.it\0"
-"uk.oxa.cloud\0"
-"trentinoaadige.it\0"
-"is-uberleet.com\0"
-"katashina.gunma.jp\0trading\0"
-"sarufutsu.hokkaido.jp\0that.win\0"
-"bulsan-suedtirol.it\0"
-"int.mv\0"
-"int.mw\0"
-"niikappu.hokkaido.jp\0dsmynas.net\0"
-"int.ni\0r.se\0verisign\0"
-"org.ro\0na4u.ru\0"
-"org.sa\0"
-"takaharu.miyazaki.jp\0org.sb\0"
-"org.rs\0org.sc\0hdfc\0"
-"org.sd\0"
-"ochi.kochi.jp\0hammarfeasta.no\0org.se\0org.ru\0nym.ro\0"
-"shikama.miyagi.jp\0org.rw\0org.sg\0"
-"org.sh\0"
-"uozu.toyama.jp\0"
-"naumburg.museum\0usculture.museum\0org.sl\0"
-"broadcast.museum\0org.sn\0"
-"org.so\0"
-"bas.it\0laakesvuemie.no\0"
-"nym.sk\0"
-"moriyoshi.akita.jp\0omi.niigata.jp\0"
-"beskidy.pl\0org.ss\0"
-"nagahama.shiga.jp\0org.st\0"
-"org.sv\0grozny.su\0"
-"family.museum\0"
-"nishihara.kumamoto.jp\0"
-"org.sy\0"
-"org.sz\0org.tj\0"
-"nym.su\0"
-"org.tm\0"
-"org.tn\0mayfirst.info\0nym.sx\0"
-"hokuryu.hokkaido.jp\0ushistory.museum\0org.to\0"
-"\xe6\x94\xbf\xe5\xba\x9c.hk\0airtel\0prod\0"
-"sandnessj\xc3\xb8""en.no\0org.ua\0*.hosting.myjino.ru\0"
-"trani-barletta-andria.it\0ruovat.no\0org.tr\0prof\0"
-"vv.it\0karasjohka.no\0"
-"org.tt\0bnr.la\0"
-"medizinhistorisches.museum\0stjordalshalsen.no\0"
-"nsw.edu.au\0press.cy\0sa.it\0annaka.gunma.jp\0\xed\x95\x9c\xea\xb5\xad\0"
-"emiliaromagna.it\0davvesiida.no\0org.tw\0org.ug\0"
-"sexy\0"
-"carrara-massa.it\0int.pt\0pioneer\0"
-"idv.hk\0org.uk\0"
-"dni.us\0arts.ve\0club\0"
-"nym.tw\0"
-"freeddns.org\0"
-"org.vc\0"
-"hyuga.miyazaki.jp\0"
-"org.ve\0"
-"asso.fr\0"
-"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0czeladz.pl\0"
-"design.museum\0org.uy\0org.vi\0"
-"org.uz\0"
-"engerdal.no\0"
-"org.vn\0"
-"sciencecenter.museum\0v\xc3\xa5ler.\xc3\xb8stfold.no\0blogdns.net\0"
-"russia.museum\0"
-"leka.no\0"
-"tamayu.shimane.jp\0weber\0"
-"asso.gp\0org.vu\0"
-"vix.br\0grozny.ru\0"
-"netbank\0"
-"is-a-bruinsfan.org\0"
-"int.ru\0gets-it.net\0"
-"awsmppl.com\0"
-"chuo.tokyo.jp\0"
-"nebraska.museum\0snasa.no\0"
-"te.ua\0honda\0"
-"piacenza.it\0"
-"is-by.us\0"
-"kashiwazaki.niigata.jp\0"
-"org.ws\0"
-"asakuchi.okayama.jp\0"
-"asso.ht\0finnoy.no\0"
-"jessheim.no\0"
-"ragusa.it\0"
-"couk.me\0"
-"aikawa.kanagawa.jp\0hamar.no\0"
-"int.tj\0"
-"technology.museum\0r\xc3\xb8ros.no\0"
-"kisarazu.chiba.jp\0kaszuby.pl\0"
-"lighting\0"
-"iwanai.hokkaido.jp\0opensocial.site\0"
-"hanamaki.iwate.jp\0org.ye\0"
-"al.gov.br\0"
-"int.tt\0"
-"q-a.eu.org\0"
-"geo.br\0divtasvuodna.no\0ca.us\0"
-"masuda.shimane.jp\0"
-"asso.bj\0"
-"org.za\0"
-"chikushino.fukuoka.jp\0nl.no\0org.yt\0"
-"ekloges.cy\0"
-"arts.ro\0"
-"sport.hu\0taiwa.miyagi.jp\0"
-"int.ve\0"
-"hidaka.hokkaido.jp\0"
-"org.zm\0"
-"asso.ci\0wakuya.miyagi.jp\0"
-"6.bg\0chuo.chiba.jp\0takarazuka.hyogo.jp\0"
-"perso.ht\0int.vn\0"
-"yatomi.aichi.jp\0altervista.org\0cloudapp.net\0"
-"chambagri.fr\0"
-"shop.th\0"
-"mo\xc3\xa5reke.no\0org.zw\0vlaanderen\0"
-"koza.wakayama.jp\0troandin.no\0"
-"tjome.no\0"
-"it1.jenv-aruba.cloud\0"
-"kamisato.saitama.jp\0"
-"iwaki.fukushima.jp\0computer.museum\0"
-"kuromatsunai.hokkaido.jp\0"
-"of.london\0"
-"hikimi.shimane.jp\0"
-"lillesand.no\0"
-"williamhill\0"
-"okinawa.jp\0voting\0"
-"computerhistory.museum\0lanbib.se\0"
-"abarth\0"
-"asso.dz\0"
-"shiraoi.hokkaido.jp\0swidnik.pl\0"
-"biella.it\0bosch\0"
-"kami.miyagi.jp\0"
-"musashino.tokyo.jp\0byen.site\0"
-"vb.it\0"
-"shoo.okayama.jp\0lib.md.us\0"
-"arts.nf\0shop.ro\0"
-"fage\0rogers\0"
-"tmall\0"
-"guam.gu\0kakegawa.shizuoka.jp\0"
-"naka.hiroshima.jp\0tara.saga.jp\0"
-"solar\0"
-"machida.tokyo.jp\0is-a-chef.org\0"
-"\xe5\xae\xae\xe5\xb4\x8e.jp\0"
-"nahari.kochi.jp\0"
-"minami.tokushima.jp\0family\0"
-"carrd.co\0"
-"shop.pl\0merckmsd\0"
-"go.ci\0wakkanai.hokkaido.jp\0urasoe.okinawa.jp\0"
-"discover\0"
-"hs.kr\0ontario.museum\0imamat\0"
-"r\xc3\xa5""de.no\0"
-"jozi.biz\0"
-"go.cr\0anpachi.gifu.jp\0penza.su\0"
-"audible\0"
-"fukushima.fukushima.jp\0oregontrail.museum\0"
-"s3-eu-west-1.amazonaws.com\0"
-"cloud.goog\0"
-"khmelnytskyi.ua\0fail\0zara\0"
-"rackmaze.com\0"
-"uda.nara.jp\0"
-"s3.dualstack.eu-west-3.amazonaws.com\0"
-"tabuse.yamaguchi.jp\0clinique\0"
-"merseine.nu\0"
-"\xe5\x98\x89\xe9\x87\x8c\0"
-"lindesnes.no\0"
-"jcloud.ik-server.com\0siteleaf.net\0"
-"prof.pr\0"
-"lublin.pl\0"
-"gobo.wakayama.jp\0"
-"moka.tochigi.jp\0"
-"voyage\0conn.uk\0"
-"kudoyama.wakayama.jp\0bukhara.su\0"
-"higashitsuno.kochi.jp\0lilly\0"
-"katsushika.tokyo.jp\0dopaas.com\0"
-"idv.tw\0"
-"museumvereniging.museum\0"
-"ancona.it\0"
-"cc.me.us\0dyndns-server.com\0"
-"shioya.tochigi.jp\0"
-"wsa.gov.pl\0"
-"g.bg\0"
-"friuli-vegiulia.it\0andoy.no\0"
-"inabe.mie.jp\0"
-"americanexpress\0wedding\0"
-"ketrzyn.pl\0"
-"namegata.ibaraki.jp\0"
-"goiania.br\0hekinan.aichi.jp\0pyatigorsk.ru\0"
-"cn-northwest-1.eb.amazonaws.com.cn\0"
-"k12.ct.us\0"
-"\xe6\x9b\xb8\xe7\xb1\x8d\0lelux.site\0"
-"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0fujiidera.osaka.jp\0"
-"gaivuotna.no\0"
-"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0"
-"lawyer\0"
-"guge\0is-a-chef.com\0"
-"wallonie.museum\0tuxfamily.org\0"
-"partners\0dvrdns.org\0"
-"donostia.museum\0"
-"nanto.toyama.jp\0salvadordali.museum\0"
-"\xc3\xa5lesund.no\0"
-"software.aero\0dnsking.ch\0"
-"commune.am\0"
-"dattoweb.com\0"
-"bergamo.it\0"
-"go.id\0kiho.mie.jp\0dnsupdater.de\0"
-"gj\xc3\xb8vik.no\0"
-"losangeles.museum\0"
-"tn.it\0"
-"kitchen\0"
-"pi.it\0fans\0"
-"hakodate.hokkaido.jp\0"
-"tsukumi.oita.jp\0nodum.co\0"
-"go.it\0"
-"kunohe.iwate.jp\0"
-"static.land\0"
-"bz.it\0hazu.aichi.jp\0kui.hiroshima.jp\0cruises\0"
-"ddnsfree.com\0"
-"sunagawa.hokkaido.jp\0ryugasaki.ibaraki.jp\0"
-"harstad.no\0"
-"nu.ca\0go.jp\0"
-"alstom\0"
-"chanel\0"
-"cloudns.asia\0"
-"go.ke\0*.gateway.dev\0"
-"oita.oita.jp\0"
-"nikolaev.ua\0"
+"szex.hu\0"
+"telebit.io\0"
+"bearalvahki.no\0"
+"art.ht\0"
+"murata.miyagi.jp\0"
+"groks-the.info\0vaporcloud.io\0"
+"com.ws\0"
+"floripa.br\0""3utilities.com\0"
+"far.br\0"
+"woltlab-demo.com\0"
+"fukuroi.shizuoka.jp\0"
+"morimachi.shizuoka.jp\0bridgestone\0"
+"bestbuy\0"
+"keliweb.cloud\0"
+"cleverapps.io\0"
+"yamagata.gifu.jp\0"
+"yoshino.nara.jp\0"
+"de.us\0com.ye\0svn-repos.de\0"
+"coop.rw\0k12.nh.us\0"
+"landrover\0azure-mobile.net\0"
+"ogawara.miyagi.jp\0cc.hi.us\0"
+"ekloges.cy\0pri.ee\0"
+"puglia.it\0nv.us\0"
+"paas.hosted-by-previder.com\0"
+"gru.br\0idv.hk\0"
+"now-dns.net\0"
+"koza.wakayama.jp\0\xd0\xba\xd1\x80\xd1\x8b\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
+"\xe9\x9d\x92\xe6\xa3\xae.jp\0"
+"nakamichi.yamanashi.jp\0"
+"nalchik.ru\0"
+"b\xc3\xa6rum.no\0"
+"poa.br\0kiwi.nz\0"
+"com.zm\0"
+"patria.bo\0fukuoka.jp\0urasoe.okinawa.jp\0bjugn.no\0"
+"sakyo.kyoto.jp\0"
+"omigawa.chiba.jp\0u.se\0"
+"coop.tt\0"
+"\xd9\x85\xd8\xb5\xd8\xb1\0"
+"uhren.museum\0"
+"hamada.shimane.jp\0other.nf\0"
+"lg.jp\0nalchik.su\0ent.platform.sh\0"
+"shinanomachi.nagano.jp\0"
+"lucca.it\0kamakura.kanagawa.jp\0"
+"rec.br\0steinkjer.no\0house\0"
+"daplie.me\0"
+"loans\0"
+"avoues.fr\0eiheiji.fukui.jp\0kishiwada.osaka.jp\0"
+"gamvik.no\0"
+"dnepropetrovsk.ua\0yalta.ua\0"
+"pictet\0barsy.org\0"
+"ltd.cy\0coop.mv\0"
+"coop.mw\0motorcycles\0"
+"skodje.no\0"
+"rec.co\0"
+"forgot.his.name\0"
+"aero.tt\0"
+"building.museum\0freesite.host\0"
+"\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0\xe9\x9b\x86\xe5\x9b\xa2\0"
+"shingu.wakayama.jp\0"
+"cc.or.us\0"
+"liguria.it\0"
+"podzone.net\0"
+"skedsmokorset.no\0mazowsze.pl\0ivano-frankivsk.ua\0"
+"aero.mv\0"
+"odessa.ua\0"
+"sp.it\0kep.tr\0"
+"koeln.museum\0newyork.museum\0"
+"urausu.hokkaido.jp\0"
+"kuki.saitama.jp\0"
+"fuossko.no\0"
+"scrapping.cc\0eating-organic.net\0"
+"mima.tokushima.jp\0lib.dc.us\0"
+"ltd.gi\0eaton.mi.us\0"
+"shonai.yamagata.jp\0"
+"coop.py\0*.webpaas.ovh.net\0art.pl\0"
+"nakaniikawa.toyama.jp\0\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0"
+"mashiki.kumamoto.jp\0sandvikcoromant\0"
+"tysnes.no\0blog.vu\0"
+"saiki.oita.jp\0"
+"kaneyama.yamagata.jp\0gucci\0"
+"kagoshima.jp\0legnica.pl\0"
+"gv.vc\0"
+"archaeological.museum\0agric.za\0"
+"bloomberg\0"
+"ullensvang.no\0*.cryptonomic.net\0"
+"nat.tn\0"
+"press.aero\0ltd.hk\0"
+"mombetsu.hokkaido.jp\0"
+"ch.eu.org\0"
+"os\xc3\xb8yro.no\0"
+"ternopil.ua\0"
+"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0"
+"jinsekikogen.hiroshima.jp\0"
+"kagoshima.kagoshima.jp\0"
+"center.museum\0"
+"ann-arbor.mi.us\0"
+"barum.no\0"
+"servequake.com\0"
+"coop.km\0gentlentapis.com\0familyds.org\0"
+"brescia.it\0nyaa.am\0"
+"dn.ua\0"
+"technology.museum\0"
+"lib.ak.us\0"
+"host\0"
+"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0*.oci.customer-oci.com\0"
+"\xe7\xbd\x91\xe7\xb5\xa1.hk\0"
+"yasugi.shimane.jp\0marine.ru\0"
+"\xe9\x95\xb7\xe5\xb4\x8e.jp\0art.sn\0"
+"recreation.aero\0"
+"zuerich\0de.trendhosting.cloud\0"
+"ddr.museum\0"
+"zp.ua\0"
+"ube.yamaguchi.jp\0airguard.museum\0k12.mo.us\0"
+"happou.akita.jp\0ny-2.paas.massivegrid.net\0"
+"oppegard.no\0mragowo.pl\0"
+"terni.it\0lib.wi.us\0christmas\0"
+"kisosaki.mie.jp\0wios.gov.pl\0fidelity\0"
+"beppu.oita.jp\0"
+"troitsk.su\0"
+"ao.it\0impertrix.com\0"
+"hiratsuka.kanagawa.jp\0"
+"ltd.lk\0"
+"sanfrancisco.museum\0"
+"amber.museum\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
+"hjelmeland.no\0"
"gov.ac\0"
-"nakasatsunai.hokkaido.jp\0oy.lc\0"
-"gov.ae\0*.quipelements.com\0"
-"gov.af\0myfritz.net\0"
-"natori.miyagi.jp\0press.se\0\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"tanagura.fukushima.jp\0"
-"go.kr\0dolls.museum\0nodum.io\0"
-"gov.al\0kyotamba.kyoto.jp\0"
-"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0"
-"courses\0flap.id\0"
-"gov.ba\0"
+"gov.ae\0"
+"gov.af\0kddi\0"
+"gwiddle.co.uk\0"
+"gojome.akita.jp\0kumano.hiroshima.jp\0"
+"higashikurume.tokyo.jp\0"
+"gov.al\0"
+"est-a-la-maison.com\0"
+"lg.ua\0"
+"gov.ba\0flir\0"
"gov.ar\0gov.bb\0"
"gov.as\0"
-"gov.au\0"
-"iris.arpa\0gov.bf\0dn.ua\0"
-"\xe7\xb5\x84\xe7\xbb\x87.hk\0susono.shizuoka.jp\0"
-"gov.bh\0"
-"gov.az\0east-kazakhstan.su\0"
-"ojiya.niigata.jp\0"
-"kamikawa.hyogo.jp\0"
-"gov.bm\0marriott\0"
-"gov.bn\0goto.nagasaki.jp\0"
-"asso.re\0farm\0"
-"western.museum\0"
-"gov.br\0\xe7\xbd\x91\xe7\xbb\x9c\0"
-"gov.bs\0watarai.mie.jp\0"
-"gov.bt\0gov.cd\0asahi.ibaraki.jp\0saintlouis.museum\0"
-"ostrowiec.pl\0help\0phx.enscaled.us\0"
-"mod.gi\0"
-"tunk.org\0"
-"gov.by\0koganei.tokyo.jp\0"
-"gov.bz\0suzuka.mie.jp\0"
-"gov.cl\0marnardal.no\0"
+"iwate.jp\0"
+"gov.au\0jor.br\0demon.nl\0"
+"gov.bf\0misato.shimane.jp\0"
+"gov.bh\0ltd.ng\0"
+"gov.az\0michigan.museum\0"
+"gov.bm\0"
+"gov.bn\0selfip.info\0"
+"idv.tw\0"
+"gov.br\0"
+"gov.bs\0"
+"gov.bt\0gov.cd\0js.wpenginepowered.com\0"
+"sassari.it\0nyny.museum\0rec.nf\0"
+"staples\0"
+"gov.by\0"
+"gov.bz\0"
+"mcpe.me\0"
+"gov.cl\0"
"gov.cm\0"
-"gov.cn\0"
-"gov.co\0nabari.mie.jp\0"
-"barcelona.museum\0"
-"tourism.tn\0"
-"gov.cu\0cc.la.us\0grondar.za\0"
-"fast\0"
-"priv.hu\0misato.miyagi.jp\0no-ip.net\0"
-"gov.cx\0"
+"gov.cn\0dyn-o-saur.com\0"
+"gov.co\0"
+"karm\xc3\xb8y.no\0"
+"haugesund.no\0"
+"osen.no\0"
+"rennesoy.no\0"
+"gov.cu\0"
+"toyoake.aichi.jp\0knx-server.net\0"
+"gov.cx\0\xe5\xae\xae\xe5\xb4\x8e.jp\0"
"gov.cy\0"
+"takino.hyogo.jp\0cya.gg\0"
+"hellas.museum\0"
+"medicina.bo\0xj.cn\0"
"gov.dm\0"
-"vagsoy.no\0"
-"gov.do\0tome.miyagi.jp\0"
-"crimea.ua\0"
+"at.eu.org\0"
+"gov.do\0vanylven.no\0"
+"cn-north-1.eb.amazonaws.com.cn\0"
+"izumi.osaka.jp\0"
+"nakagusuku.okinawa.jp\0"
"gov.ec\0"
"gov.ee\0"
-"historyofscience.museum\0"
-"gov.eg\0"
-"gov.dz\0\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0"
-"tohma.hokkaido.jp\0"
-"imari.saga.jp\0nesodden.no\0"
-"gov.et\0balsan.it\0noda.iwate.jp\0"
-"capitalone\0"
-"niigata.jp\0berlin\0"
-"gov.fj\0unnan.shimane.jp\0"
-"asso.nc\0karm\xc3\xb8y.no\0"
-"go.pw\0"
-"jur.pro\0"
-"toei.aichi.jp\0oki.fukuoka.jp\0gb.net\0"
-"farmstead.museum\0cuisinella\0"
-"perso.sn\0"
-"press.ma\0"
-"gov.gd\0wodzislaw.pl\0academy\0"
-"gov.ge\0lifeinsurance\0"
-"lib.ny.us\0"
-"gov.gh\0berlin.museum\0"
-"gov.gi\0fla.no\0"
-"nu.it\0"
-"birdart.museum\0hisamitsu\0shaw\0"
-"wazuka.kyoto.jp\0"
-"orsites.com\0"
-"gov.gn\0"
-"sekikawa.niigata.jp\0"
-"\xce\xb5\xce\xbb\0"
-"gov.gr\0yoshioka.gunma.jp\0perso.tn\0"
-"av.it\0"
-"gov.gu\0ujiie.tochigi.jp\0elblag.pl\0gripe\0"
-"gov.gy\0"
-"trentino-s\xc3\xbc""dtirol.it\0fujikawaguchiko.yamanashi.jp\0\xce\xb5\xcf\x85\0akdn\0here\0"
-"gov.hk\0higashi.fukushima.jp\0"
-"jp.kg\0"
-"presidio.museum\0"
-"cable-modem.org\0"
-"usdecorativearts.museum\0hyllestad.no\0"
-"ab.ca\0gov.ie\0gyeongbuk.kr\0beats\0london\0"
-"priv.at\0"
-"zushi.kanagawa.jp\0"
-"niigata.niigata.jp\0guru\0repair\0"
-"gov.il\0"
-"gov.in\0palmsprings.museum\0"
-"echizen.fukui.jp\0go.th\0"
-"gov.iq\0go.tj\0diskussionsbereich.de\0"
-"gov.ir\0dreamhosters.com\0"
-"gov.is\0hagebostad.no\0barsy.site\0to.work\0"
+"gov.eg\0himi.toyama.jp\0"
+"esashi.hokkaido.jp\0"
+"morena.br\0gov.dz\0vda.it\0skygearapp.com\0"
+"works\0"
+"firm.ht\0cc.ar.us\0world\0"
+"tenkawa.nara.jp\0"
+"tokashiki.okinawa.jp\0"
+"gov.et\0"
+"press\0"
+"tempio-olbia.it\0gobo.wakayama.jp\0"
+"firm.in\0land-4-sale.us\0"
+"gov.fj\0s3.ca-central-1.amazonaws.com\0"
+"ox.rs\0"
+"\xe7\x86\x8a\xe6\x9c\xac.jp\0"
+"asago.hyogo.jp\0"
+"\xe5\xa4\xa7\xe5\x88\x86.jp\0kita.tokyo.jp\0flickr\0"
+"otaru.hokkaido.jp\0us-east-2.elasticbeanstalk.com\0"
+"urbino-pesaro.it\0chihayaakasaka.osaka.jp\0"
+"isumi.chiba.jp\0artsandcrafts.museum\0essex.museum\0"
+"nagoya\0"
+"is-a-linux-user.org\0"
+"gov.gd\0"
+"gov.ge\0"
+"gov.gh\0"
+"gov.gi\0"
+"izena.okinawa.jp\0kirovograd.ua\0audi\0vologda.su\0"
+"monster\0"
+"mediocampidano.it\0shiogama.miyagi.jp\0endofinternet.net\0"
+"gov.gn\0powiat.pl\0rec.ro\0"
+"rel.ht\0s\xc3\xb8r-varanger.no\0"
+"degree\0"
+"gov.gr\0pimienta.org\0blog.kg\0"
+"qld.edu.au\0"
+"elasticbeanstalk.com\0"
+"gov.gu\0ujiie.tochigi.jp\0exeter.museum\0"
+"firm.co\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
+"gov.gy\0\xe5\xb2\xa9\xe6\x89\x8b.jp\0newmexico.museum\0"
+"kunisaki.oita.jp\0"
+"gov.hk\0star\0"
+"yusuhara.kochi.jp\0lib.la.us\0"
+"shinkamigoto.nagasaki.jp\0sandoy.no\0minisite.ms\0"
+"dating\0"
+"hirata.fukushima.jp\0chattanooga.museum\0ltd.ua\0small-web.org\0"
+"beer\0"
+"media.museum\0firm.dk\0"
+"gov.ie\0"
+"palace.museum\0plumbing\0"
+"taka.hyogo.jp\0"
+"kami.kochi.jp\0chrome\0"
+"gov.il\0ltd.uk\0"
+"gov.in\0"
+"yakage.okayama.jp\0"
+"toyo.kochi.jp\0vadso.no\0"
+"gov.iq\0kvitsoy.no\0"
+"gov.ir\0"
+"gov.is\0"
"gov.it\0"
-"filegear-sg.me\0"
-"gob.ar\0"
-"yuki.ibaraki.jp\0"
-"is-very-evil.org\0"
-"avoues.fr\0traniandriabarletta.it\0official.academy\0"
-"sakae.chiba.jp\0"
-"miyazu.kyoto.jp\0murayama.yamagata.jp\0jp.md\0"
-"go.ug\0"
-"gov.jo\0"
-"ikano\0"
-"sardinia.it\0go.tz\0tn.us\0epson\0"
-"tainai.niigata.jp\0"
-"daejeon.kr\0"
-"gob.bo\0\xc3\xb8ksnes.no\0"
-"utsunomiya.tochigi.jp\0"
-"taranto.it\0tateyama.chiba.jp\0"
-"gov.kg\0"
-"\xe5\x95\x86\xe5\x9f\x8e\0"
-"aisai.aichi.jp\0kanan.osaka.jp\0gov.ki\0glogow.pl\0"
-"tako.chiba.jp\0gov.km\0"
-"gov.kn\0"
-"tsk.tr\0istanbul\0"
-"gov.kp\0railroad.museum\0aver\xc3\xb8y.no\0dovre.no\0"
-"gob.cl\0gov.la\0smile\0"
-"gov.lb\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0pl.eu.org\0"
-"iwade.wakayama.jp\0gov.lc\0seljord.no\0"
-"hokkaido.jp\0"
-"asso.km\0gov.kw\0"
-"tingvoll.no\0"
+"priv.hu\0"
+"hiraizumi.iwate.jp\0"
+"fi.cr\0mi.it\0aurland.no\0passagens\0istmein.de\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0"
+"nonoichi.ishikawa.jp\0"
+"ac.gov.br\0kagawa.jp\0"
+"lanxess\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
+"gov.jo\0\xe7\xa7\xbb\xe5\x8a\xa8\0"
+"trentinsued-tirol.it\0"
+"geisei.kochi.jp\0lighting\0"
+"rec.ve\0"
+"ato.br\0gov.kg\0"
+"guardian\0"
+"gov.ki\0"
+"security\0stockholm\0"
+"\xe6\x89\x8b\xe6\x9c\xba\0"
+"diet\0unusualperson.com\0"
+"gov.km\0surnadal.no\0"
+"gov.kn\0bnpparibas\0"
+"gov.kp\0bloger.id\0"
+"gov.la\0sebastopol.ua\0shouji\0*.tst.site\0"
+"gov.lb\0group\0"
+"gov.lc\0g\xc3\xa1ls\xc3\xa1.no\0zone\0"
+"gratis\0"
+"tsushima.nagasaki.jp\0gov.kw\0"
+"maringa.br\0"
"gov.ky\0"
"gov.kz\0"
-"gov.lk\0\xe5\x81\xa5\xe5\xba\xb7\0"
-"logoip.com\0"
-"royken.no\0"
-"\xc3\xa5lg\xc3\xa5rd.no\0tele.amune.org\0"
-"cc.as.us\0"
-"gov.ma\0"
-"iizuka.fukuoka.jp\0gov.lr\0"
-"gov.ls\0"
-"gob.do\0gov.lt\0g.se\0k12.in.us\0"
+"slg.br\0gov.lk\0l\xc3\xb8ten.no\0"
+"newspaper.museum\0contact\0"
+"k12.va.us\0"
+"grosseto.it\0trogstad.no\0piw.gov.pl\0"
+"noheji.aomori.jp\0rocher\0"
+"gov.ma\0stordal.no\0trust\0"
+"nb.ca\0gov.lr\0duckdns.org\0"
+"nagaoka.niigata.jp\0gov.ls\0"
+"gov.lt\0is-a-landscaper.com\0tuva.su\0"
"gov.me\0"
"gov.lv\0"
-"gov.mg\0leksvik.no\0"
-"gob.ec\0myjino.ru\0"
+"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0gov.mg\0"
"gov.ly\0"
-"aparecida.br\0"
-"gov.mk\0"
-"gov.ml\0"
-"asso.mc\0keymachine.de\0"
-"gov.mn\0"
+"echizen.fukui.jp\0gov.mk\0"
+"fukuchiyama.kyoto.jp\0gov.ml\0"
+"gov.mn\0norton\0dynalias.org\0"
"gov.mo\0"
-"gov.mr\0"
-"gov.ms\0"
-"engineer.aero\0cng.br\0"
-"gov.mu\0ostroleka.pl\0shia\0"
-"gov.mv\0"
+"history.museum\0deno.dev\0"
+"gov.mr\0cincinnati.museum\0"
+"tr.it\0gov.ms\0"
+"kiyama.saga.jp\0mypsx.net\0"
+"gov.mu\0"
+"gov.mv\0schulserver.de\0"
"gov.mw\0gov.ng\0"
-"gob.es\0"
+"tsuchiura.ibaraki.jp\0"
"gov.my\0"
-"gov.mz\0"
-"erni\0barsy.info\0"
-"california.museum\0"
-"cloud.interhostsolutions.be\0"
+"gov.mz\0ollo\0"
+"r\xc3\xb8yrvik.no\0"
+"africa\0"
+"n\xc3\xb8tter\xc3\xb8y.no\0"
"gov.nr\0"
-"pharmacien.fr\0"
-"marumori.miyagi.jp\0cust.disrec.thingdust.io\0"
-"shikaoi.hokkaido.jp\0"
-"sakata.yamagata.jp\0"
-"nichinan.tottori.jp\0"
-"hino.tottori.jp\0"
-"zaporizhzhia.ua\0barsy.shop\0"
-"utazu.kagawa.jp\0lib.nm.us\0"
-"gov.om\0"
-"na.it\0saskatchewan.museum\0"
-"aaa.pro\0"
-"tourism.pl\0"
-"nanyo.yamagata.jp\0"
-"qld.gov.au\0nokia\0"
-"gov.ph\0"
-"gob.gt\0"
-"glitch.me\0"
-"gov.pk\0fastvps.host\0"
+"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
+"kikonai.hokkaido.jp\0mifune.kumamoto.jp\0johana.toyama.jp\0"
+"hs.zone\0"
+"academy.museum\0priv.at\0"
+"rel.pl\0pgfog.com\0applinzi.com\0"
+"tokorozawa.saitama.jp\0"
+"banamex\0"
+"gov.om\0channelsdvr.net\0"
+"tateyama.chiba.jp\0r\xc3\xb8st.no\0babia-gora.pl\0"
+"whaling.museum\0"
+"\xce\xb5\xce\xbb\0ownprovider.com\0"
+"observer\0diadem.cloud\0"
+"kragero.no\0gov.ph\0"
+"a.bg\0fhsk.se\0"
+"fi.it\0monza.it\0ginoza.okinawa.jp\0gov.pk\0\xce\xb5\xcf\x85\0"
"gov.pl\0"
-"omniwe.site\0"
-"gov.pn\0"
-"cinema.museum\0"
-"schokokeks.net\0"
-"windmill.museum\0gov.qa\0"
-"gov.pr\0"
-"gob.hn\0potenza.it\0kiwa.mie.jp\0gov.ps\0"
-"chocolate.museum\0gov.pt\0"
-"nsupdate.info\0"
-"tw.cn\0"
-"gov.py\0"
-"miyada.nagano.jp\0s3.eu-central-1.amazonaws.com\0"
-"ethnology.museum\0"
-"hitachiota.ibaraki.jp\0"
-"gx.cn\0inzai.chiba.jp\0higashiagatsuma.gunma.jp\0"
-"reggioemilia.it\0kunstsammlung.museum\0"
-"kagami.kochi.jp\0"
-"linde\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0bmoattachments.org\0"
-"arkhangelsk.su\0"
-"lesja.no\0"
-"my-router.de\0"
-"swiebodzin.pl\0"
-"miyagi.jp\0"
-"isleofman.museum\0r\xc3\xa1isa.no\0"
-"alstahaug.no\0mielno.pl\0"
-"forsand.no\0gov.sa\0av.tr\0"
+"gdansk.pl\0"
+"gov.pn\0meteorapp.com\0"
+"minowa.nagano.jp\0"
+"tabayama.yamanashi.jp\0"
+"gov.qa\0"
+"samukawa.kanagawa.jp\0gov.pr\0"
+"gov.ps\0nodum.co\0"
+"pz.it\0gov.pt\0"
+"mitake.gifu.jp\0"
+"infiniti\0lincoln\0"
+"heroy.more-og-romsdal.no\0gov.py\0"
+"dontexist.org\0"
+"airforce\0jele.site\0"
+"bifuka.hokkaido.jp\0"
+"somna.no\0"
+"carrara-massa.it\0"
+"orsta.no\0"
+"shiroishi.saga.jp\0"
+"school\0"
+"buyshouses.net\0"
+"joetsu.niigata.jp\0"
+"kembuchi.hokkaido.jp\0"
+"seg.br\0"
+"tr.no\0firm.ve\0"
+"*.backyards.banzaicloud.io\0"
+"gen.in\0tateshina.nagano.jp\0gov.sa\0"
"gov.sb\0"
-"gov.rs\0gov.sc\0"
-"gov.sd\0"
-"kawanishi.hyogo.jp\0furniture.museum\0gov.ru\0"
-"dellogliastra.it\0legal\0"
-"takata.fukuoka.jp\0gov.rw\0gov.sg\0"
-"kumejima.okinawa.jp\0costume.museum\0gov.sh\0"
-"economia.bo\0pesarourbino.it\0schoenbrunn.museum\0"
-"is-with-theband.com\0"
-"gov.sl\0"
-"drud.io\0"
-"gov.so\0"
-"trentinoalto-adige.it\0"
-"is-a-chef.net\0"
+"gov.rs\0gov.sc\0ens.tn\0nodum.io\0"
+"toga.toyama.jp\0naval.museum\0gov.sd\0author\0"
+"mutsu.aomori.jp\0gov.ru\0"
+"himeji.hyogo.jp\0gov.rw\0gov.sg\0"
+"kitakami.iwate.jp\0gov.sh\0"
+"certification.aero\0"
+"koga.fukuoka.jp\0"
+"dnsdojo.org\0"
+"ca.it\0gov.sl\0"
+"gov.so\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0eu.org\0"
+"qpon\0"
+"moka.tochigi.jp\0salon\0pokrovsk.su\0"
"gov.ss\0"
-"lavagis.no\0gov.st\0"
-"*.yokohama.jp\0work\0"
"gov.sx\0"
-"gov.sy\0*.on-rio.io\0"
-"gov.tj\0"
-"gov.tl\0cc.mn.us\0coupons\0"
-"gov.tm\0"
-"esp.br\0gov.tn\0"
-"*.kitakyushu.jp\0gov.to\0"
-"greta.fr\0gov.ua\0"
-"p.bg\0gov.tr\0"
-"opencraft.hosting\0"
-"shikokuchuo.ehime.jp\0gov.tt\0shop\0"
-"her\xc3\xb8y.nordland.no\0k12.me.us\0"
-"ashikaga.tochigi.jp\0gov.tw\0"
-"psi.br\0"
-"logistics.aero\0"
-"cremona.it\0gov.uk\0show\0"
-"\xe7\xbd\x91\xe7\xb5\xa1.hk\0"
-"aeroclub.aero\0"
-"hanamigawa.chiba.jp\0accountants\0"
-"gov.vc\0"
-"kishiwada.osaka.jp\0muenchen.museum\0gov.ve\0from-wa.com\0"
-"malopolska.pl\0"
-"fuji.shizuoka.jp\0"
-"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
-"gob.mx\0senseering.net\0"
-"gob.ni\0gov.vn\0is-a-celticsfan.org\0"
-"higashimatsuyama.saitama.jp\0catholic\0"
-"bir.ru\0"
-"tawaramoto.nara.jp\0"
-"ballooning.aero\0komaki.aichi.jp\0pagexl.com\0"
-"lom.it\0"
-"moriguchi.osaka.jp\0latrobe\0qc.com\0"
-"funagata.yamagata.jp\0"
-"store.nf\0"
-"from-id.com\0"
-"video.hu\0aomori.aomori.jp\0"
-"plc.ly\0"
-"pr.it\0lib.la.us\0"
-"kepno.pl\0"
-"gov.ws\0"
-"bentley\0homedns.org\0"
-"coop.ht\0gob.pa\0kerryhotels\0"
-"modum.no\0"
-"cs.it\0gob.pe\0"
-"olayangroup\0*.dev.adobeaemcloud.com\0"
-"hughes\0balena-devices.com\0"
-"ichikawamisato.yamanashi.jp\0gob.pk\0pixolino.com\0"
-"tc.br\0"
-"modelling.aero\0on.ca\0"
-"cultural.museum\0"
-"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0b\xc3\xa1l\xc3\xa1t.no\0gov.ye\0"
-"shimamaki.hokkaido.jp\0tsushima.nagasaki.jp\0"
-"niteroi.br\0slask.pl\0cool\0"
-"coop\0"
-"artdeco.museum\0stranda.no\0"
-"gov.za\0"
-"risor.no\0"
-"zp.ua\0is-an-entertainer.com\0"
-"coop.br\0"
-"unzen.nagasaki.jp\0vaporcloud.io\0"
-"gd.cn\0spacekit.io\0"
-"orange\0"
+"treviso.it\0gov.sy\0"
+"soeda.fukuoka.jp\0takasu.hokkaido.jp\0gov.tj\0"
+"balsan-sudtirol.it\0"
+"gov.tl\0"
+"mi.th\0gov.tm\0"
+"gov.tn\0"
+"arao.kumamoto.jp\0gov.to\0"
+"askoy.no\0framer.app\0"
+"langev\xc3\xa5g.no\0gov.ua\0"
+"gov.tr\0"
+"gov.tt\0"
+"friulive-giulia.it\0ulsan.kr\0gov.tw\0"
+"gov.uk\0"
+"rsc.cdn77.org\0"
+"kotohira.kagawa.jp\0hirakata.osaka.jp\0cyou\0"
+"suedtirol.it\0myoko.niigata.jp\0k12.ky.us\0"
+"podzone.org\0"
+"minamitane.kagoshima.jp\0gov.vc\0"
+"iz.hr\0cc.fl.us\0"
+"gov.ve\0"
+"googlecode.com\0"
+"mi.us\0"
+"tarui.gifu.jp\0k12.vt.us\0"
+"kitagawa.miyazaki.jp\0notteroy.no\0"
+"gov.vn\0au.eu.org\0be.eu.org\0"
+"minakami.gunma.jp\0"
+"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
+"kinokawa.wakayama.jp\0kudamatsu.yamaguchi.jp\0usa.museum\0"
+"best\0"
+"suisse.museum\0s3.dualstack.eu-west-1.amazonaws.com\0"
+"firm.ro\0"
+"ca.na\0"
+"nishio.aichi.jp\0gen.ng\0"
+"eidfjord.no\0malopolska.pl\0"
+"pruszkow.pl\0in.net\0"
+"mizusawa.iwate.jp\0"
+"community.museum\0"
+"auto\0"
+"arteducation.museum\0mircloud.host\0"
+"koge.tottori.jp\0oster\xc3\xb8y.no\0gov.ws\0"
+"hazu.aichi.jp\0"
+"team\0"
+"\xd1\x81\xd0\xbe\xd1\x87\xd0\xb8.\xd1\x80\xd1\x83\xd1\x81\0"
+"ogasawara.tokyo.jp\0"
+"anquan\0channel\0hughes\0"
+"gen.nz\0"
+"futtsu.chiba.jp\0"
+"mr.no\0dish\0"
+"nikaho.akita.jp\0"
+"uk.kg\0"
+"swiftcover\0"
+"profesional.bo\0"
+"gov.ye\0"
+"shinyoshitomi.fukuoka.jp\0"
+"nakasatsunai.hokkaido.jp\0"
+"nosegawa.nara.jp\0caravan\0"
+"s3.dualstack.ap-southeast-1.amazonaws.com\0"
+"wellbeingzone.co.uk\0"
+"shimodate.ibaraki.jp\0mo-i-rana.no\0cc.ne.us\0"
+"brasil.museum\0\xc3\xb8stre-toten.no\0"
+"gov.za\0tech\0"
+"kamifurano.hokkaido.jp\0"
+"takatsuki.shiga.jp\0filatelia.museum\0"
+"j.bg\0"
+"fr.it\0"
+"stalowa-wola.pl\0mckinsey\0"
+"haga.tochigi.jp\0hyundai\0bplaced.com\0"
+"now-dns.org\0"
+"barcelona.museum\0ap-south-1.elasticbeanstalk.com\0"
+"js.cn\0hokkaido.jp\0"
+"gov.zm\0"
+"bg.eu.org\0pa.leg.br\0"
+"firm.nf\0vapor.cloud\0"
+"rc.it\0firm.ng\0"
+"firebaseapp.com\0"
+"padova.it\0"
+"gov.zw\0s3-us-west-1.amazonaws.com\0myfritz.net\0"
+"kibichuo.okayama.jp\0"
+"from-nj.com\0api.stdlib.com\0"
+"seto.aichi.jp\0"
+"union.aero\0townnews-staging.com\0"
+"yaese.okinawa.jp\0"
+"s3.dualstack.sa-east-1.amazonaws.com\0"
+"takaharu.miyazaki.jp\0"
+"neyagawa.osaka.jp\0"
+"matsumoto.kagoshima.jp\0"
+"yakumo.shimane.jp\0"
+"is-a-blogger.com\0"
+"al.gov.br\0"
+"vaga.no\0acct.pro\0pb.leg.br\0"
+"lpages.co\0"
+"yanagawa.fukuoka.jp\0"
+"fvg.it\0"
+"sejny.pl\0raid\0"
+"2.bg\0"
+"bz.it\0alipay\0no-ip.co.uk\0"
+"lillehammer.no\0"
+"virtualserver.io\0"
+"yamagata.jp\0"
+"mini\0"
+"londrina.br\0"
+"lodi.it\0health-carereform.com\0"
+"sogndal.no\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0"
+"gen.tr\0traeumtgerade.de\0"
+"khplay.nl\0"
+"kikuchi.kumamoto.jp\0mint\0"
+"nagasu.kumamoto.jp\0"
+"equipment.aero\0*.elb.amazonaws.com.cn\0"
+"barsyonline.co.uk\0"
+"tomari.hokkaido.jp\0"
+"asakuchi.okayama.jp\0"
+"asahi.nagano.jp\0locus\0"
+"akita.jp\0"
+"bosch\0insure\0"
+"my-gateway.de\0"
+"ca.us\0"
+"inabe.mie.jp\0webthings.io\0"
+"nt.au\0"
+"brunel.museum\0neat-url.com\0"
+"kvam.no\0"
+"arvo.network\0"
+"lubartow.pl\0"
+"massacarrara.it\0from-wy.com\0"
+"yorkshire.museum\0"
+"lamer\0"
+"glogow.pl\0vps.mcdir.ru\0"
+"nt.ca\0"
+"usdecorativearts.museum\0"
+"hr.eu.org\0"
+"narviika.no\0"
+"miyakonojo.miyazaki.jp\0kitayama.wakayama.jp\0"
+"children.museum\0"
+"kimitsu.chiba.jp\0"
+"a.se\0"
+"js.org\0synology-ds.de\0"
+"kamo.kyoto.jp\0"
+"nahari.kochi.jp\0"
+"takahashi.okayama.jp\0curv.dev\0"
+"priv.pl\0"
+"u2-local.xnbay.com\0"
+"tranoy.no\0"
+"tajimi.gifu.jp\0"
+"trentino-sudtirol.it\0"
+"urakawa.hokkaido.jp\0"
+"readmyblog.org\0"
+"k12.id.us\0dyn-ip24.de\0"
+"\xd1\x8f.\xd1\x80\xd1\x83\xd1\x81\0"
+"kunimi.fukushima.jp\0williamsburg.museum\0"
+"raisa.no\0from-ma.com\0"
+"barrell-of-knowledge.info\0scrysec.com\0"
+"awaji.hyogo.jp\0"
+"luxury\0"
+"yugawa.fukushima.jp\0"
+"sund.no\0"
+"synology-diskstation.de\0"
+"kamikawa.saitama.jp\0miasta.pl\0"
+"barueri.br\0"
+"stj\xc3\xb8rdal.no\0is-a-photographer.com\0"
+"trentinsuedtirol.it\0priv.no\0"
+"s.bg\0"
+"gaular.no\0"
+"taa.it\0hizen.saga.jp\0"
+"oguni.yamagata.jp\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0"
+"slattum.no\0"
+"hyllestad.no\0"
+"tsushima.aichi.jp\0"
"\xe4\xb8\x89\xe9\x87\x8d.jp\0"
-"sibenik.museum\0"
-"govt.nz\0tychy.pl\0"
-"ito.shizuoka.jp\0gov.zm\0"
-"daisen.akita.jp\0mizuho.tokyo.jp\0from-tx.com\0"
-"kounosu.saitama.jp\0"
-"eidfjord.no\0katowice.pl\0"
-"piw.gov.pl\0"
-"tsubetsu.hokkaido.jp\0"
-"seranishi.hiroshima.jp\0gov.zw\0own.pm\0"
-"workers.dev\0"
-"gorge.museum\0"
-"scienceandindustry.museum\0"
-"plurinacional.bo\0"
-"shinjuku.tokyo.jp\0austrheim.no\0priv.pl\0zhitomir.ua\0"
-"wakayama.jp\0mukawa.hokkaido.jp\0"
-"lom.no\0"
-"il.us\0"
-"from-dc.com\0"
-"joboji.iwate.jp\0nishiizu.shizuoka.jp\0"
-"hemsedal.no\0"
-"itako.ibaraki.jp\0"
-"taiki.mie.jp\0gob.sv\0"
-"cust.dev.thingdust.io\0"
-"ikoma.nara.jp\0lacaixa\0"
-"kasahara.gifu.jp\0\xe6\x94\xbf\xe5\x8a\xa1\0"
-"trentino-suedtirol.it\0"
-"langevag.no\0"
-"cc.gu.us\0"
-"eng.br\0leadpages.co\0"
-"nom.ad\0"
-"nom.ae\0"
-"nom.af\0"
-"nom.ag\0podlasie.pl\0edugit.org\0"
-"conference.aero\0k12.ky.us\0"
-"nom.ai\0"
-"from-va.com\0"
-"nom.al\0"
-"matsumae.hokkaido.jp\0priv.no\0"
-"dazaifu.fukuoka.jp\0"
-"gob.ve\0"
-"kokonoe.oita.jp\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0"
-"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0loginline.site\0"
-"pavia.it\0iveco\0"
-"waw.pl\0"
-"rennes\xc3\xb8y.no\0"
-"nativeamerican.museum\0aca.pro\0"
-"toba.mie.jp\0"
-"katsuragi.wakayama.jp\0"
-"fed.us\0store.ve\0nctu.me\0"
-"careers\0nom.bz\0"
-"univ.sn\0ma.leg.br\0nom.cl\0"
-"namsskogan.no\0"
-"sosa.chiba.jp\0"
-"nom.co\0plc.uk\0drud.us\0"
-"ss.it\0kawanehon.shizuoka.jp\0"
-"onrender.com\0"
-"toyo.kochi.jp\0kvafjord.no\0"
-"kannami.shizuoka.jp\0rackmaze.net\0"
+"seidat.net\0"
+"intelligence.museum\0"
+"is-very-nice.org\0"
+"awsglobalaccelerator.com\0"
+"air-traffic-control.aero\0davvesiida.no\0"
+"k12.fl.us\0hk.com\0"
+"lib.mt.us\0lib.nd.us\0barsy.me\0"
+"takatsuki.osaka.jp\0"
"priv.me\0"
-"\xe5\x8f\xb0\xe6\xb9\xbe\0"
-"akrehamn.no\0"
-"education.museum\0flekkefjord.no\0vinnica.ua\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0"
-"matta-varjjat.no\0"
-"salvador.br\0"
-"bo.it\0*.compute-1.amazonaws.com\0"
-"koga.fukuoka.jp\0"
-"bizen.okayama.jp\0mandal.no\0"
-"jelenia-gora.pl\0ally\0"
-"v\xc3\xa6r\xc3\xb8y.no\0pomorze.pl\0"
-"kariwa.niigata.jp\0"
-"fosnes.no\0"
-"walter\0"
-"silk\0"
-"sor-aurdal.no\0"
-"pila.pl\0"
-"kamo.niigata.jp\0sweden.museum\0no.eu.org\0"
-"rag-cloud-ch.hosteur.com\0"
-"nom.es\0ushuaia.museum\0jorpeland.no\0"
-"rivne.ua\0"
-"tula.su\0"
-"aoki.nagano.jp\0"
-"saikai.nagasaki.jp\0"
-"servep2p.com\0"
-"minamiuonuma.niigata.jp\0"
-"nom.fr\0itayanagi.aomori.jp\0sauda.no\0sina\0"
-"genting\0"
-"nom.gd\0"
-"asago.hyogo.jp\0nom.ge\0"
-"bolt.hu\0"
-"kitashiobara.fukushima.jp\0jobs.tt\0mintere.site\0"
-"nom.gl\0"
-"pr.us\0"
-"carboniaiglesias.it\0"
-"choyo.kumamoto.jp\0"
-"motobu.okinawa.jp\0store.ro\0"
-"it1-eur.jenv-arubabiz.cloud\0"
-"nom.gt\0"
-"dc.us\0loan\0"
-"yahiko.niigata.jp\0"
-"hashikami.aomori.jp\0likescandy.com\0"
-"giehtavuoatna.no\0"
-"kameoka.kyoto.jp\0*.sch.uk\0"
-"space-to-rent.com\0nom.hn\0"
-"cc.ok.us\0"
-"webhop.me\0"
-"ownip.net\0"
-"kawazu.shizuoka.jp\0nyuzen.toyama.jp\0store.st\0cc.ga.us\0"
-"kouhoku.saga.jp\0"
-"owariasahi.aichi.jp\0"
-"benevento.it\0azurewebsites.net\0"
-"al.eu.org\0"
-"p.se\0nom.im\0"
-"nakaniikawa.toyama.jp\0"
-"plants.museum\0"
-"jetzt\0ssl.origin.cdn77-secure.org\0"
-"leasing.aero\0k12.as.us\0"
-"\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
-"l\xc3\xa4ns.museum\0"
-"sci.eg\0higashimurayama.tokyo.jp\0career\0"
-"semine.miyagi.jp\0"
-"patria.bo\0"
-"2ix.at\0"
-"nom.ke\0"
-"chuo.yamanashi.jp\0"
-"nom.km\0"
-"gs.rl.no\0ro.im\0"
-"nz.eu.org\0"
-"kumagaya.saitama.jp\0mazury.pl\0twmail.net\0"
-"kvalsund.no\0"
-"vt.it\0ino.kochi.jp\0"
-"koka.shiga.jp\0volkswagen\0"
-"myasustor.com\0"
-"arezzo.it\0ro.it\0\xe5\x85\xb5\xe5\xba\xab.jp\0"
-"2ix.ch\0"
-"kagawa.jp\0austin.museum\0nom.li\0"
-"gs.ah.no\0"
-"lib.fl.us\0"
-"energy\0"
-"plesk.page\0"
-"forsale\0"
-"\xc3\xa5snes.no\0dynv6.net\0"
-"sasebo.nagasaki.jp\0""2ix.de\0"
-"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
-"site\0nom.lv\0"
-"nom.mg\0"
-"froland.no\0"
-"glade\0"
-"tromsa.no\0*.lcl.dev\0"
-"kashiwara.osaka.jp\0nom.mk\0"
-"miki.hyogo.jp\0kyiv.ua\0loft\0"
-"from-oh.com\0"
-"minamitane.kagoshima.jp\0"
-"amex\0"
-"industria.bo\0nom.nc\0kvits\xc3\xb8y.no\0is-a-llama.com\0es-1.axarnet.cloud\0brasilia.me\0"
-"sevastopol.ua\0"
-"j\xc3\xb8lster.no\0coop.rw\0"
-"trentino-s-tirol.it\0"
-"minamiboso.chiba.jp\0*.s5y.io\0"
-"nom.ni\0"
-"v-info.info\0"
-"fujimi.saitama.jp\0"
+"rotorcraft.aero\0"
+"cahcesuolo.no\0playstation\0"
+"healthcare\0"
+"trentinoalto-adige.it\0kaminokawa.tochigi.jp\0"
+"trentinsudtirol.it\0"
+"niikappu.hokkaido.jp\0"
+"usercontent.jp\0"
+"cs.it\0is-a-libertarian.com\0"
+"ragusa.it\0"
+"x.mythic-beasts.com\0"
+"kunitomi.miyazaki.jp\0juedisches.museum\0"
+"caltanissetta.it\0koryo.nara.jp\0langevag.no\0"
+"satx.museum\0etnedal.no\0"
+"database.museum\0"
+"muroran.hokkaido.jp\0"
+"denmark.museum\0"
+"presse.km\0"
+"chocolate.museum\0"
+"dyroy.no\0"
+"uchinomi.kagawa.jp\0"
+"surf\0"
+"science-fiction.museum\0\xc3\xb8ksnes.no\0"
+"kazimierz-dolny.pl\0"
+"eastus2.azurestaticapps.net\0"
+"dali.museum\0rl.no\0fairwinds\0"
+"media.hu\0"
+"trentino-s\xc3\xbc""dtirol.it\0"
+"\xe6\x84\x9b\xe7\x9f\xa5.jp\0sykkylven.no\0"
+"kwpsp.gov.pl\0"
+"getmyip.com\0"
+"santamaria.br\0"
+"taishin.fukushima.jp\0bygland.no\0"
+"latina.it\0modum.no\0"
+"shinjuku.tokyo.jp\0"
+"izumozaki.niigata.jp\0presse.ml\0"
+"mitsue.nara.jp\0tendo.yamagata.jp\0r\xc3\xa5holt.no\0"
+"properties\0"
+"fetsund.no\0myasustor.com\0"
+"pistoia.it\0verona.it\0githubusercontent.com\0jcloud.kz\0"
+"\xe6\x85\x88\xe5\x96\x84\0pi.leg.br\0"
+"dazaifu.fukuoka.jp\0environmentalconservation.museum\0"
+"kounosu.saitama.jp\0*.on-k3s.io\0"
+"khmelnytskyi.ua\0"
+"exnet.su\0"
+"fuoisku.no\0"
+"tos.it\0"
+"imakane.hokkaido.jp\0"
+"adult\0endofinternet.org\0"
+"visa\0"
+"workinggroup.aero\0higashisumiyoshi.osaka.jp\0isa-hockeynut.com\0"
+"gob.ar\0nagara.chiba.jp\0colonialwilliamsburg.museum\0"
+"m\xc4\x81ori.nz\0"
+"is-into-anime.com\0"
+"nt.no\0webspace.rocks\0"
+"oizumi.gunma.jp\0furniture\0hsbc\0icbc\0"
+"teva\0"
"padua.it\0"
-"michigan.museum\0"
-"tolga.no\0"
-"toshiba\0"
-"wroclaw.pl\0"
-"za.net\0"
-"varese.it\0lind\xc3\xa5s.no\0"
-"nom.nu\0"
-"from-mn.com\0"
-"kyowa.hokkaido.jp\0"
-"hgtv\0"
-"honjo.akita.jp\0"
-"caxias.br\0"
-"\xe5\xa4\xa7\xe6\x8b\xbf\0"
-"broker\0"
-"yufu.oita.jp\0nom.pa\0"
-"securitytactics.com\0"
-"coop.tt\0is-a-student.com\0vladimir.su\0"
-"nom.pe\0"
-"verona.it\0beardu.no\0"
-"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0"
-"foggia.it\0capebreton.museum\0civilwar.museum\0"
-"nemuro.hokkaido.jp\0"
-"nom.pl\0"
-"cc.wa.us\0tushu\0poznan.pl\0"
-"oharu.aichi.jp\0"
-"mormon\0nom.qa\0"
-"hitachiomiya.ibaraki.jp\0hopto.org\0wedeploy.sh\0"
-"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0"
-"higashine.yamagata.jp\0"
-"coop.mv\0"
-"coop.mw\0"
-"eti.br\0nom.pw\0"
-"schweiz.museum\0"
-"agdenes.no\0joburg\0"
-"y.bg\0"
-"hiroo.hokkaido.jp\0torsken.no\0tn.oxa.cloud\0"
-"tachikawa.tokyo.jp\0"
-"4.bg\0audio\0windows\0*.linodeobjects.com\0"
-"k12.nh.us\0philips\0"
-"yachimata.chiba.jp\0jeonnam.kr\0cog.mi.us\0"
-"bulsan.it\0catering\0"
-"powiat.pl\0k12.ia.us\0does-it.net\0"
-"kodaira.tokyo.jp\0"
-"intl.tn\0"
-"nom.re\0"
-"aejrie.no\0"
-"ureshino.mie.jp\0bievat.no\0casacam.net\0"
-"*.nagoya.jp\0kuroiso.tochigi.jp\0"
-"dev.br\0"
-"samegawa.fukushima.jp\0"
-"nom.ro\0"
-"nrw.museum\0bplaced.com\0"
-"nanjo.okinawa.jp\0"
-"vladimir.ru\0nom.rs\0"
-"sogndal.no\0"
-"asn.au\0"
-"sg.cloudswitches.com\0"
-"kuwana.mie.jp\0pinb.gov.pl\0nom.si\0"
-"makeup\0"
-"soundcast.me\0"
-"vestv\xc3\xa5g\xc3\xb8y.no\0"
-"for-better.biz\0"
-"cloudns.biz\0nom.st\0"
-"togo.aichi.jp\0"
-"coop.py\0"
-"nom.tj\0"
-"is-a-guru.com\0"
-"wada.nagano.jp\0"
-"nom.tm\0netflix\0"
+"ponpes.id\0"
+"settsu.osaka.jp\0voagat.no\0test-iserv.de\0azimuth.network\0"
+"gob.bo\0showtime\0"
+"rygge.no\0\xd8\xa7\xd9\x84\xd8\xa8\xd8\xad\xd8\xb1\xd9\x8a\xd9\x86\0"
+"iwakuni.yamaguchi.jp\0"
+"wodzislaw.pl\0"
+"ut.us\0"
+"koto.tokyo.jp\0alvdal.no\0"
+"gob.cl\0"
+"hostyhosting.io\0"
+"yokoze.saitama.jp\0sauda.no\0is-a-doctor.com\0"
+"sado.niigata.jp\0"
+"\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0"
+"mazeplay.com\0"
+"amami.kagoshima.jp\0vegas\0barsy.uk\0"
+"oxford.museum\0u.channelsdvr.net\0"
+"chirurgiens-dentistes.fr\0kasuga.fukuoka.jp\0"
+"wpdevcloud.com\0"
+"jelastic.tsukaeru.net\0mysecuritycamera.net\0"
+"nakagawa.fukuoka.jp\0"
+"gob.do\0seven\0"
+"viva\0"
+"authgear-staging.com\0"
+"mus.br\0"
+"gob.ec\0"
+"valleedaoste.it\0"
+"tomakomai.hokkaido.jp\0"
+"oita.oita.jp\0dnsdojo.net\0"
+"futsu.nagasaki.jp\0"
+"is-a-techie.com\0"
+"tas.au\0"
+"kumenan.okayama.jp\0"
+"vivo\0alp1.ae.flow.ch\0"
+"l\xc3\xb8""dingen.no\0"
+"storj.farm\0"
+"gob.es\0maori.nz\0"
+"nt.ro\0"
+"pagespeedmobilizer.com\0"
+"akabira.hokkaido.jp\0"
+"lakas.hu\0"
+"oarai.ibaraki.jp\0berlevag.no\0"
+"cagliari.it\0"
+"goodyear\0bplaced.net\0"
+"hakusan.ishikawa.jp\0"
+"pavia.it\0nichinan.tottori.jp\0selje.no\0media.pl\0"
+"restaurant\0"
+"apps.fbsbx.com\0"
+"racing\0"
+"sekigahara.gifu.jp\0"
+"hamatonbetsu.hokkaido.jp\0"
+"sn.cn\0"
+"lucania.it\0"
+"toyooka.hyogo.jp\0cyber.museum\0"
+"\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
+"tagajo.miyagi.jp\0"
+"gob.gt\0togitsu.nagasaki.jp\0"
+"cat.ax\0"
+"square.museum\0"
+"jls-sto3.elastx.net\0"
"koya.wakayama.jp\0"
-"entomology.museum\0"
-"sellsyourhome.org\0"
-"yawara.ibaraki.jp\0"
-"from-nh.com\0"
-"environment.museum\0usgarden.museum\0creditunion\0nom.ug\0"
-"palmas.br\0gok.pk\0"
-"kamogawa.chiba.jp\0"
-"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0"
-"mima.tokushima.jp\0"
-"principe.st\0\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
-"hino.tokyo.jp\0surnadal.no\0"
-"rockart.museum\0"
-"nom.vc\0"
-"s3-ap-northeast-1.amazonaws.com\0"
-"shopitsite.com\0"
-"trogstad.no\0contact\0nom.vg\0"
-"nom.uy\0"
-"jc.neen.it\0"
-"kasamatsu.gifu.jp\0coop.km\0kyoto\0"
-"panel.gg\0"
-"labor.museum\0n4t.co\0myftp.org\0"
-"audnedaln.no\0"
-"store.bb\0"
-"mikasa.hokkaido.jp\0africa\0"
-"ebetsu.hokkaido.jp\0itano.tokushima.jp\0higashikurume.tokyo.jp\0"
-"forlicesena.it\0"
-"flickr\0"
-"nakanoto.ishikawa.jp\0"
-"b\xc3\xb8.nordland.no\0"
-"nomi.ishikawa.jp\0mydatto.com\0"
-"vt.us\0"
-"gotdns.org\0"
-"kutno.pl\0"
-"busan.kr\0"
-"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0nj.us\0"
-"swinoujscie.pl\0"
-"namsos.no\0"
-"garden\0"
-"ak.us\0"
-"kamiamakusa.kumamoto.jp\0"
-"crafts.museum\0*.r.appspot.com\0"
-"fot.br\0"
-"yonezawa.yamagata.jp\0"
-"pvt.k12.ma.us\0"
-"quebec\0*.sensiosite.cloud\0"
-"sande.vestfold.no\0bar0.net\0"
-"store.dk\0"
-"k12.tn.us\0church\0"
-"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0azimuth.network\0"
-"e.bg\0\xe7\x86\x8a\xe6\x9c\xac.jp\0kinko.kagoshima.jp\0"
-"government.aero\0nom.za\0"
-"ddnsgeek.com\0"
-"k12.gu.us\0fresenius\0"
-"higashiosaka.osaka.jp\0"
-"cookingchannel\0"
-"geisei.kochi.jp\0fbx-os.fr\0"
-"kunitachi.tokyo.jp\0commbank\0jelastic.tsukaeru.net\0"
-"porsangu.no\0"
-"homesense\0wedeploy.me\0"
-"lewismiller.museum\0"
-"norfolk.museum\0institute\0repl.co\0"
-"blogspot.vn\0"
-"radio.am\0"
-"baseball\0"
-"lund.no\0"
-"cheltenham.museum\0vantaa.museum\0"
-"chosei.chiba.jp\0"
-"sannan.hyogo.jp\0"
-"kitadaito.okinawa.jp\0"
-"\xe7\xbd\x91\xe5\xba\x97\0"
-"radio.br\0"
-"kisofukushima.nagano.jp\0love\0"
-"pg.it\0suzuki\0"
-"gs.bu.no\0"
-"kr.it\0tenkawa.nara.jp\0lib.ga.us\0"
-"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0matsushige.tokushima.jp\0"
-"kamoenai.hokkaido.jp\0"
-"glass\0"
-"ch.it\0"
-"webhop.org\0"
-"jelastic.saveincloud.net\0"
-"ns.ca\0"
-"guitars\0"
-"asn.lv\0"
-"suifu.ibaraki.jp\0muroto.kochi.jp\0gausdal.no\0zero\0"
-"artgallery.museum\0"
-"sh.cn\0blogspot.re\0"
-"meinforum.net\0"
-"columbus.museum\0physio\0services\0"
-"aip.ee\0"
-"blogspot.ro\0"
-"fi.cr\0"
-"blogspot.rs\0"
-"lv.ua\0\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0"
-"insurance.aero\0blogspot.ru\0blogspot.se\0"
-"mg.leg.br\0"
-"blogspot.sg\0"
-"mt.eu.org\0blogspot.si\0"
-"chiyoda.tokyo.jp\0"
-"tmp.br\0blogspot.sk\0bloxcms.com\0"
-"e4.cz\0de.trendhosting.cloud\0"
-"sayama.saitama.jp\0blogspot.sn\0"
-"radio.fm\0"
-"!city.sendai.jp\0"
-"maserati\0blogspot.td\0jed.wafaicloud.com\0website.yandexcloud.net\0"
-"yamanouchi.nagano.jp\0"
-"online\0"
-"dating\0"
-"homelink.one\0"
-"ia.us\0"
-"sannohe.aomori.jp\0"
-"froya.no\0"
-"us.com\0"
-"blogsite.org\0"
-"kagoshima.jp\0"
-"kiev.ua\0"
-"s3.ap-northeast-2.amazonaws.com\0from-ct.com\0"
-"medio-campidano.it\0qoto.io\0"
-"opole.pl\0"
-"bari.it\0"
-"toyone.aichi.jp\0data\0blogspot.tw\0blogspot.ug\0"
-"sobetsu.hokkaido.jp\0arida.wakayama.jp\0"
-"namie.fukushima.jp\0"
-"date\0tatar\0"
-"gwiddle.co.uk\0"
-"lenvik.no\0ap-northeast-1.elasticbeanstalk.com\0"
-"neues.museum\0"
-"kaga.ishikawa.jp\0"
-"bronnoysund.no\0"
-"blogspot.mr\0"
-"countryestate.museum\0y.se\0"
-"hannan.osaka.jp\0ralingen.no\0\xe5\x8f\xb0\xe7\x81\xa3\0"
-"fitjar.no\0"
-"unusualperson.com\0"
-"oppegard.no\0"
-"blogspot.mx\0"
-"skin\0blogspot.my\0"
-"quebec.museum\0"
-"fastvps-server.com\0blogspot.nl\0rdv.to\0"
-"iwata.shizuoka.jp\0"
-"kisosaki.mie.jp\0blogspot.no\0"
+"cadaques.museum\0od.ua\0global.ssl.fastly.net\0"
+"joboji.iwate.jp\0"
+"pe.leg.br\0"
+"gob.hn\0"
+"moonscale.net\0pagexl.com\0"
+"coal.museum\0"
+"mikasa.hokkaido.jp\0"
+"dc.us\0"
+"tsk.tr\0"
+"sakawa.kochi.jp\0"
+"yamaguchi.jp\0"
+"ostre-toten.no\0weber\0"
+"is-into-cartoons.com\0"
+"bulsan-s\xc3\xbc""dtirol.it\0"
+"ikaruga.nara.jp\0smart\0"
+"tottori.tottori.jp\0"
+"tychy.pl\0us-4.evennode.com\0"
+"dyndns.org\0"
+"\xeb\x8b\xb7\xeb\x84\xb7\0"
+"skoczow.pl\0hasura-app.io\0"
+"makurazaki.kagoshima.jp\0"
+"filegear-de.me\0"
+"salem.museum\0"
+"le.it\0"
+"arezzo.it\0\xe5\xb2\x90\xe9\x98\x9c.jp\0"
+"ad.jp\0nanto.toyama.jp\0"
+"il.eu.org\0"
+"lillesand.no\0s.se\0ru.com\0bar1.net\0*.sensiosite.cloud\0"
+"online.th\0"
+"vv.it\0glitch.me\0"
+"jdf.br\0jpmorgan\0"
+"bir.ru\0"
+"ybo.party\0"
+"chuo.fukuoka.jp\0"
+"jaguar\0"
+"k12.in.us\0is-by.us\0"
+"email\0"
+"wiih.gov.pl\0blogspot.vn\0"
+"cim.br\0"
+"am.br\0chikuzen.fukuoka.jp\0"
+"siracusa.it\0"
+"tateyama.toyama.jp\0vega.no\0co.financial\0"
+"yaita.tochigi.jp\0tj\xc3\xb8me.no\0hu.eu.org\0ie.eu.org\0"
+"mulhouse.museum\0"
+"homeftp.org\0"
+"food\0"
+"finland.museum\0selbu.no\0lenug.su\0"
+"anan.nagano.jp\0"
+"oamishirasato.chiba.jp\0"
+"rivne.ua\0voorloper.cloud\0"
+"inawashiro.fukushima.jp\0"
+"is-a-personaltrainer.com\0"
+"ln.cn\0alsace\0us-3.evennode.com\0"
+"pvh.br\0kumano.mie.jp\0*.r.appspot.com\0"
+"matsukawa.nagano.jp\0"
+"\xe6\x94\xbf\xe5\xba\x9c\0authgearapps.com\0"
+"001www.com\0"
+"dnsalias.com\0"
+"gob.mx\0"
+"gob.ni\0"
+"realm.cz\0"
+"myvnc.com\0"
+"mihama.chiba.jp\0"
+"lib.de.us\0"
+"ribeirao.br\0yamazoe.nara.jp\0"
+"utsunomiya.tochigi.jp\0"
+"co.education\0"
+"takayama.gunma.jp\0"
+"is-very-good.org\0"
+"toyotsu.fukuoka.jp\0blogspot.re\0"
+"iglesias-carbonia.it\0hichiso.gifu.jp\0"
+"gorizia.it\0gob.pa\0"
+"hamar.no\0ford\0"
+"is-an-anarchist.com\0\xd0\xbc\xd0\xb8\xd1\x80.\xd1\x80\xd1\x83\xd1\x81\0gda.pl\0"
"hashimoto.wakayama.jp\0"
-"saves-the-whales.com\0"
-"barsyonline.com\0hicam.net\0"
-"wanggou\0"
-"s3-eu-west-3.amazonaws.com\0"
-"virtuel.museum\0"
-"ibestad.no\0"
-"hermes\0"
-"newspaper.museum\0s3.dualstack.eu-west-1.amazonaws.com\0"
-"law.pro\0horse\0mozilla-iot.org\0"
-"takanabe.miyazaki.jp\0yasaka.nagano.jp\0"
-"sorfold.no\0"
-"ny-1.paas.massivegrid.net\0"
-"gratis\0privatizehealthinsurance.net\0"
-"lib.wa.us\0scrapper-site.net\0blogspot.pe\0"
-"furniture\0"
-"lib.sd.us\0"
-"trentino-sud-tirol.it\0"
-"lib.ok.us\0"
-"ca.reclaim.cloud\0"
-"gjovik.no\0lib.in.us\0"
-"med.br\0"
-"olbia-tempio.it\0blogspot.qa\0"
-"co.com\0"
-"fi.it\0yame.fukuoka.jp\0allfinanz\0blogspot.pt\0"
-"*.cloud.metacentrum.cz\0"
-"exnet.su\0"
-"at.it\0"
-"mytuleap.com\0"
-"cargo.aero\0xbox\0"
-"imabari.ehime.jp\0supplies\0is-into-anime.com\0"
-"nagasaki.nagasaki.jp\0"
-"\xe6\x96\xb0\xe6\xbd\x9f.jp\0"
-"kosai.shizuoka.jp\0onza.mythic-beasts.com\0"
-"lipsy\0"
-"mitsue.nara.jp\0blogspot.is\0"
+"gob.pe\0"
+"\xe6\x95\x99\xe8\x82\xb2.hk\0"
+"birkenes.no\0blogspot.ro\0"
+"ishikari.hokkaido.jp\0mel\xc3\xb8y.no\0"
+"gob.pk\0cc.wi.us\0gehirn.ne.jp\0"
+"cafjs.com\0blogspot.rs\0"
+"blogspot.ru\0blogspot.se\0"
+"shiriuchi.hokkaido.jp\0blogspot.sg\0"
+"wif.gov.pl\0"
+"blogspot.si\0"
+"barsy.bg\0"
+"blogspot.sk\0"
+"blogspot.sn\0on-web.fr\0"
+"abkhazia.su\0"
+"kharkiv.ua\0barsy.ca\0blogspot.td\0"
+"forl\xc3\xac""cesena.it\0fujikawa.yamanashi.jp\0us-2.evennode.com\0"
+"stat.no\0"
+"deatnu.no\0"
+"hm.no\0j\xc3\xb8lster.no\0mus.mi.us\0"
+"isla.pr\0"
+"ogawa.nagano.jp\0"
+"mandal.no\0"
+"pors\xc3\xa1\xc5\x8bgu.no\0pr.leg.br\0"
+"city.hu\0"
+"k12.ne.us\0"
+"blogspot.tw\0blogspot.ug\0"
+"barsy.de\0"
+"aguni.okinawa.jp\0"
+"latino\0"
+"aizumisato.fukushima.jp\0"
+"habikino.osaka.jp\0"
+"blogspot.mr\0"
+"isen.kagoshima.jp\0"
+"bozen-suedtirol.it\0blogspot.mx\0"
+"yoshida.shizuoka.jp\0saarland\0blogspot.my\0"
+"ravendb.me\0"
+"botanical.museum\0blogspot.nl\0"
+"gob.sv\0"
+"blogspot.no\0"
+"barsy.eu\0"
+"aukra.no\0"
+"gifu.jp\0prime\0"
+"brussels.museum\0decorativearts.museum\0schaeffler\0"
+"network\0"
+"yomitan.okinawa.jp\0niepce.museum\0penza.su\0"
+"kunitachi.tokyo.jp\0"
+"and.mom\0"
+"koshu.yamanashi.jp\0richardli\0blogspot.pe\0"
+"us-1.evennode.com\0"
+"presse.ci\0"
+"valdaosta.it\0"
+"lib.sc.us\0"
+"gob.ve\0"
+"shiraoi.hokkaido.jp\0"
+"blogspot.qa\0"
+"ivgu.no\0"
+"kopervik.no\0dedyn.io\0"
+"gr.eu.org\0blogspot.pt\0"
+"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0"
+"orskog.no\0"
+"circus.museum\0"
+"filegear-gb.me\0"
+"h\xc3\xb8nefoss.no\0"
+"dagestan.ru\0"
+"okinoshima.shimane.jp\0winb.gov.pl\0"
+"med.pro\0blogspot.is\0"
"blogspot.it\0"
-"egyptian.museum\0dev.vu\0"
-"mo.cn\0"
-"med.ec\0blogspot.jp\0vipsinaapp.com\0"
-"ch.tc\0"
-"med.ee\0"
-"blogspot.co.at\0wedeploy.io\0"
-"dscloud.biz\0"
-"civilaviation.aero\0taa.it\0"
-"tochio.niigata.jp\0"
-"kr.ua\0a.run.app\0"
-"asker.no\0"
-"author.aero\0"
-"blogspot.kr\0"
-"minamiaiki.nagano.jp\0"
-"at.md\0"
-"gru.br\0"
-"lombardy.it\0sogne.no\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0blogspot.li\0"
-"fujisato.akita.jp\0kwpsp.gov.pl\0vpndns.net\0"
-"valdaosta.it\0naha.okinawa.jp\0nanbu.tottori.jp\0"
-"soccer\0"
-"yonago.tottori.jp\0wskr.gov.pl\0bplaced.net\0"
-"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0blogspot.lt\0blogspot.md\0"
-"blogspot.lu\0"
-"luxury\0"
-"soundandvision.museum\0my.eu.org\0myeffect.net\0"
-"oga.akita.jp\0blogspot.mk\0"
-"misaki.osaka.jp\0"
-"yoka.hyogo.jp\0k12.wi.us\0"
-"\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0"
-"takaishi.osaka.jp\0"
-"k12.mo.us\0groks-this.info\0"
-"e.se\0"
-"ecn.br\0blogspot.fi\0"
-"gangwon.kr\0"
-"chiropractic.museum\0historichouses.museum\0k12.az.us\0"
-"fhsk.se\0za.org\0"
-"med.ht\0brescia.it\0"
-"blogspot.fr\0"
-"h\xc3\xb8ylandet.no\0yamaxun\0"
-"community\0"
-"bharti\0"
-"kl\xc3\xa6""bu.no\0"
-"taki.mie.jp\0"
-"itabashi.tokyo.jp\0"
-"hvaler.no\0nov.ru\0"
-"leitungsen.de\0"
-"ing.pa\0"
+"does-it.net\0ryd.wafaicloud.com\0"
+"scienceandhistory.museum\0"
+"nishi.osaka.jp\0"
+"yatsuka.shimane.jp\0"
+"fukui.jp\0kunstsammlung.museum\0homedns.org\0"
+"v\xc3\xa5ler.hedmark.no\0"
+"dagestan.su\0"
+"jessheim.no\0andasuolo.no\0"
+"blogspot.jp\0"
+"abira.hokkaido.jp\0barsy.in\0"
+"east-kazakhstan.su\0barsy.io\0ciscofreak.com\0"
+"vall\xc3\xa9""e-d-aoste.it\0appspot.com\0"
+"furano.hokkaido.jp\0"
+"namsskogan.no\0"
+"takasaki.gunma.jp\0"
+"shop.ht\0traniandriabarletta.it\0meiwa.gunma.jp\0kushima.miyazaki.jp\0karpacz.pl\0"
+"shop.hu\0"
+"aki.kochi.jp\0"
+"asahi.chiba.jp\0review\0blogspot.kr\0"
+"kumatori.osaka.jp\0"
+"computer.museum\0"
+"cc.ma.us\0"
+"takagi.nagano.jp\0"
+"kvits\xc3\xb8y.no\0"
+"arts.museum\0"
+"blogspot.li\0"
+"nikko.tochigi.jp\0\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"usantiques.museum\0"
+"en.it\0historisches.museum\0gok.pk\0"
+"communications.museum\0int.eu.org\0"
+"saves-the-whales.com\0"
+"abc.br\0"
+"compare\0blogspot.lt\0blogspot.md\0"
+"psi.br\0beats\0blogspot.lu\0unicloud.pl\0"
+"empresa.bo\0dyndns-mail.com\0us.platform.sh\0"
+"po.it\0"
+"in-dsl.org\0"
+"imageandsound.museum\0us.eu.org\0blogspot.mk\0"
+"rennebu.no\0"
+"broadway\0j.scaleforce.net\0"
+"is-very-bad.org\0"
+"aya.miyazaki.jp\0"
+"britishcolumbia.museum\0"
+"co.place\0"
+"faith\0"
+"mol.it\0blogspot.fi\0"
+"hidora.com\0"
+"lib.ks.us\0"
+"judygarland.museum\0"
+"dyn.ddnss.de\0onthewifi.com\0"
+"k12.oh.us\0design\0blogspot.fr\0"
+"asahi.yamagata.jp\0dontexist.com\0"
+"cng.br\0agrinet.tn\0"
+"ecologia.bo\0"
+"direct\0"
+"lon-1.paas.massivegrid.net\0"
+"av.it\0open\0"
+"koganei.tokyo.jp\0"
"blogspot.gr\0"
-"vikna.no\0"
-"gs.vf.no\0pomorskie.pl\0"
-"military.museum\0compare\0"
-"zgorzelec.pl\0space\0nov.su\0blogspot.hk\0hidora.com\0"
-"mihama.fukui.jp\0"
-"vi.it\0os.hedmark.no\0"
-"\xe6\x95\x8e\xe8\x82\xb2.hk\0"
-"wroc.pl\0"
-"blogspot.hr\0dev-myqnapcloud.com\0"
-"mo.it\0"
-"web.app\0"
-"blogspot.hu\0blogspot.ie\0"
-"gv.ao\0"
-"motorcycle.museum\0"
-"lib.al.us\0"
-"tinn.no\0flights\0"
-"gv.at\0pp.az\0*.customer-oci.com\0"
-"black\0"
-"taishi.hyogo.jp\0blogspot.in\0"
-"cistron.nl\0"
+"try-snowplow.com\0"
+"bunkyo.tokyo.jp\0stathelle.no\0"
+"riik.ee\0"
+"pharmacy.museum\0"
+"med.br\0is-a-republican.com\0"
+"blogspot.hk\0"
+"qh.cn\0t\xc3\xb8nsberg.no\0"
+"namikata.ehime.jp\0*.hosting.myjino.ru\0""4lima.de\0"
+"reggio-emilia.it\0yugawara.kanagawa.jp\0mallorca.museum\0"
+"yuu.yamaguchi.jp\0"
+"blogspot.hr\0"
+"kawatana.nagasaki.jp\0volyn.ua\0"
+"solund.no\0blogspot.hu\0blogspot.ie\0"
+"webredirect.org\0"
+"grondar.za\0"
+"*.compute.amazonaws.com\0"
+"dsmynas.com\0"
+"ichihara.chiba.jp\0from-mo.com\0"
+"blogspot.in\0"
"blogspot.ba\0"
-"sp.gov.br\0blogspot.co.id\0"
-"agrinet.tn\0hotmail\0"
-"blogspot.be\0"
-"blogspot.bg\0"
-"bd.se\0"
-"xz.cn\0dyroy.no\0hyatt\0"
+"kv\xc3\xa6""fjord.no\0"
+"tomigusuku.okinawa.jp\0blogspot.be\0"
+"loppa.no\0blogspot.bg\0"
+"lanbib.se\0company\0"
+"nobeoka.miyazaki.jp\0"
"blogspot.bj\0"
-"blogspot.co.il\0"
-"higashi.okinawa.jp\0"
-"sveio.no\0repl.run\0"
-"rotorcraft.aero\0"
-"sugito.saitama.jp\0blogspot.ca\0"
-"med.ly\0blogspot.cf\0eu.platform.sh\0"
-"cq.cn\0maif\0blogspot.ch\0"
-"nl.eu.org\0"
-"blogspot.cl\0"
-"twmail.org\0"
-"oyamazaki.kyoto.jp\0"
-"takaoka.toyama.jp\0"
-"ipiranga\0"
+"med.ec\0living\0"
+"med.ee\0"
+"4lima.at\0"
+"civilwar.museum\0cc.pr.us\0"
+"panasonic\0blogspot.ca\0"
+"mp.br\0nakijin.okinawa.jp\0mircloud.us\0"
+"yamatsuri.fukushima.jp\0"
+"blogspot.cf\0"
+"bolt.hu\0kagamiishi.fukushima.jp\0is-a-hunter.com\0mysecuritycamera.org\0"
+"knowsitall.info\0blogspot.ch\0"
+"laz.it\0nakagawa.nagano.jp\0"
+"b-data.io\0"
+"manchester.museum\0"
+"fujikawaguchiko.yamanashi.jp\0blogspot.cl\0"
+"aknoluokta.no\0"
+"trading.aero\0"
+"s3-ap-southeast-1.amazonaws.com\0"
+"tp.it\0alibaba\0irish\0""4lima.ch\0"
+"s3-website-ap-northeast-1.amazonaws.com\0"
+"tashkent.su\0"
"blogspot.de\0"
-"mihama.aichi.jp\0blogspot.cv\0"
-"myhome-server.de\0localzone.xyz\0stage.nodeart.io\0"
-"blogspot.cz\0"
-"blogspot.dk\0"
-"app.banzaicloud.io\0"
-"kakuda.miyagi.jp\0shimosuwa.nagano.jp\0"
-"otaki.saitama.jp\0"
-"chuo.fukuoka.jp\0"
-"desa.id\0"
-"kasugai.aichi.jp\0med.om\0at.vg\0"
-"novara.it\0company\0"
-"so.gov.pl\0"
-"indianapolis.museum\0med.pa\0firestone\0"
-"yawata.kyoto.jp\0"
-"valled-aosta.it\0chihayaakasaka.osaka.jp\0usarts.museum\0"
-"n.bg\0"
-"reggio-calabria.it\0t\xc3\xb8nsberg.no\0"
-"groundhandling.aero\0"
-"med.pl\0"
-"kakinoki.shimane.jp\0ringebu.no\0"
-"yokaichiba.chiba.jp\0ap-south-1.elasticbeanstalk.com\0"
-"*.compute.amazonaws.com\0is-a-liberal.com\0"
-"lyngdal.no\0"
-"quest\0"
-"\xe6\x96\xb0\xe9\x97\xbb\0"
-"moroyama.saitama.jp\0lugs.org.uk\0"
-"unicloud.pl\0"
-"accident-prevention.aero\0"
-"iyo.ehime.jp\0oguni.kumamoto.jp\0"
-"aizubange.fukushima.jp\0itakura.gunma.jp\0"
-"gitpage.si\0"
-"suldal.no\0bip.sh\0"
-"la-spezia.it\0"
-"oyama.tochigi.jp\0gs.tr.no\0"
-"cosenza.it\0"
-"cloudera.site\0"
-"club.aero\0med.sa\0"
-"med.sd\0"
-"lib.ks.us\0blogspot.ae\0"
-"amsterdam.museum\0"
-"fr-1.paas.massivegrid.net\0"
-"rieti.it\0brumunddal.no\0ng.eu.org\0"
-"recipes\0rhcloud.com\0"
+"ushuaia.museum\0blogspot.cv\0"
+"vall\xc3\xa9""edaoste.it\0asaminami.hiroshima.jp\0"
+"if.ua\0blogspot.cz\0"
+"urawa.saitama.jp\0blogspot.dk\0"
+"io.kg\0storage.yandexcloud.net\0"
+"tobishima.aichi.jp\0jls-sto1.elastx.net\0"
+"corvette.museum\0"
+"jeonbuk.kr\0is-a-hard-worker.com\0"
+"gyeongnam.kr\0hoyanger.no\0"
+"mytis.ru\0"
+"games.hu\0"
+"finn\xc3\xb8y.no\0"
+"utwente.io\0"
+"*.alces.network\0wbq.me\0"
+"is-a-democrat.com\0"
+"alwaysdata.net\0"
+"melbourne\0"
+"schmidt\0"
+"publishproxy.com\0"
+"\xe5\xae\xae\xe5\x9f\x8e.jp\0"
+"hirado.nagasaki.jp\0"
+"astronomy.museum\0"
+"iwata.shizuoka.jp\0"
+"fg.it\0"
+"med.ht\0bike\0"
+"trentin-sued-tirol.it\0"
+"tagami.niigata.jp\0"
+"ichinomiya.chiba.jp\0"
+"ieee\0id.repl.co\0"
+"austevoll.no\0"
+"res.in\0mircloud.ru\0"
+"izunokuni.shizuoka.jp\0"
+"catering.aero\0austrheim.no\0"
+"toolforge.org\0"
+"servebeer.com\0"
+"aoki.nagano.jp\0tjmaxx\0"
+"lib.wy.us\0"
+"blogspot.ae\0"
+"sortland.no\0*.triton.zone\0"
+"ito.shizuoka.jp\0"
+"pittsburgh.museum\0leikanger.no\0"
+"bo.it\0"
"blogspot.al\0"
-"blogspot.am\0"
-"knowsitall.info\0svn-repos.de\0"
-"bearalv\xc3\xa1hki.no\0"
-"media.museum\0"
-"firewall-gateway.de\0"
-"cody.museum\0"
-"yamatsuri.fukushima.jp\0"
-"drobak.no\0n\xc3\xb8tter\xc3\xb8y.no\0"
-"omega\0"
-"athleta\0khplay.nl\0"
-"rexroth\0"
-"frogans\0"
-"\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0"
-"mragowo.pl\0"
-"is-a-cpa.com\0"
-"\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0"
-"r\xc3\xa5holt.no\0"
-"inderoy.no\0"
-"camdvr.org\0"
-"askoy.no\0aaa\0doesntexist.com\0"
-"izumozaki.niigata.jp\0"
-"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0qualifioapp.com\0"
-"agric.za\0"
-"ota.tokyo.jp\0town.museum\0"
-"uryu.hokkaido.jp\0"
-"movie\0"
-"vi.us\0"
-"teo.br\0noheji.aomori.jp\0eidsvoll.no\0nesset.no\0tran\xc3\xb8y.no\0"
-"nakagusuku.okinawa.jp\0"
-"abb\0"
-"mo.us\0abc\0"
-"kawakita.ishikawa.jp\0"
-"hob\xc3\xb8l.no\0realestate\0"
-"media\0"
-"shunan.yamaguchi.jp\0"
-"takko.aomori.jp\0dyn.home-webserver.de\0map.fastlylb.net\0"
-"uchiko.ehime.jp\0"
-"imageandsound.museum\0"
-"mup.gov.pl\0dclk\0"
-"minamimaki.nagano.jp\0dnsfor.me\0"
-"read-books.org\0"
-"blogspot.co.uk\0"
-"bristol.museum\0gehirn.ne.jp\0"
-"naganohara.gunma.jp\0vik.no\0"
-"pvh.br\0daiwa.hiroshima.jp\0aco\0"
-"nerima.tokyo.jp\0"
-"cupcake.is\0"
-"chicago.museum\0"
-"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0"
-"stalowa-wola.pl\0"
-"songdalen.no\0"
-"\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
-"sr.gov.pl\0"
-"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0bingo\0"
-"deloitte\0email\0from-ny.net\0"
-"shopware.store\0"
-"ads\0"
+"merckmsd\0tunes\0blogspot.am\0"
+"newport.museum\0bing\0"
+"minamidaito.okinawa.jp\0"
+"kinghost.net\0"
+"rovigo.it\0\xe7\xa7\x8b\xe7\x94\xb0.jp\0"
+"mielno.pl\0"
+"navuotna.no\0"
+"maintenance.aero\0vennesla.no\0"
+"missile.museum\0"
+"living.museum\0kinder\0"
+"av.tr\0"
+"zaporizhzhe.ua\0"
+"manno.kagawa.jp\0odda.no\0"
+"med.ly\0"
+"soni.nara.jp\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0"
+"mizumaki.fukuoka.jp\0vestre-toten.no\0"
+"*.nagoya.jp\0contemporaryart.museum\0soccer\0software\0theater\0"
+"ofunato.iwate.jp\0hidaka.kochi.jp\0homeftp.net\0"
+"\xd2\x9b\xd0\xb0\xd0\xb7\0"
+"sth.ac.at\0"
+"folldal.no\0paas.beebyte.io\0"
+"mup.gov.pl\0"
+"hof.no\0"
+"moriguchi.osaka.jp\0"
+"b\xc3\xa5tsfjord.no\0"
+"tsuru.yamanashi.jp\0"
+"gose.nara.jp\0lajolla.museum\0lesja.no\0"
+"minamiashigara.kanagawa.jp\0"
+"v\xc3\xa6r\xc3\xb8y.no\0"
+"yamada.iwate.jp\0"
+"ota.gunma.jp\0"
+"kawahara.tottori.jp\0med.om\0"
+"tokai.aichi.jp\0mozilla-iot.org\0"
+"tatsuno.nagano.jp\0med.pa\0"
+"game\0"
+"read\0s3-website.eu-west-3.amazonaws.com\0"
+"historisch.museum\0"
+"chichibu.saitama.jp\0"
+"statebank\0us-west-2.elasticbeanstalk.com\0"
+"xz.cn\0dynamisches-dns.de\0"
+"skjak.no\0med.pl\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.cn\0"
+"mangyshlak.su\0"
+"vacations\0"
+"lombardia.it\0""16-b.it\0"
+"dep.no\0"
+"atm.pl\0"
+"shop.th\0"
+"mie.jp\0is-not-certified.com\0"
"wzmiuw.gov.pl\0"
-"hyogo.jp\0"
-"kobierzyce.pl\0aeg\0"
-"naturhistorisches.museum\0"
-"shimokawa.hokkaido.jp\0"
-"trentinsud-tirol.it\0"
-"philadelphia.museum\0"
-"belau.pw\0"
-"altoadige.it\0nagasu.kumamoto.jp\0"
-"ikusaka.nagano.jp\0ambulance.museum\0ringerike.no\0"
-"ta.it\0"
-"uenohara.yamanashi.jp\0grue.no\0"
+"yamato.kanagawa.jp\0lyngen.no\0"
+"ono.hyogo.jp\0cc.ms.us\0cc.nc.us\0s3.dualstack.eu-west-2.amazonaws.com\0"
+"macapa.br\0"
+"v\xc3\xa5ler.\xc3\xb8stfold.no\0tiaa\0"
+"online.museum\0"
+"tecnologia.bo\0"
+"no-ip.info\0"
+"h.bg\0louvre.museum\0aver\xc3\xb8y.no\0namsos.no\0"
+"parti.se\0"
+"med.sa\0"
+"monmouth.museum\0"
+"med.sd\0"
+"idrett.no\0"
+"ra.it\0kindle\0"
+"abarth\0"
+"date.hokkaido.jp\0"
+"*.frusky.de\0"
+"aaa\0"
+"page\0"
+"parachuting.aero\0"
+"bronnoy.no\0worse-than.tv\0shop.ro\0"
+"valle-daosta.it\0"
+"shisui.chiba.jp\0durham.museum\0*.telebit.xyz\0"
+"9guacu.br\0"
+"saskatchewan.museum\0online\0"
+"info.gu\0"
+"lib.ma.us\0abb\0"
+"nombre.bo\0abc\0"
+"leclerc\0is-a-nascarfan.com\0"
+"helsinki.museum\0k12.or.us\0protection\0"
+"tawaramoto.nara.jp\0"
+"my.id\0freemasonry.museum\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.hk\0kitaakita.akita.jp\0os.hordaland.no\0blogspot.com\0"
+"info.ht\0\xe6\x9d\xb1\xe4\xba\xac.jp\0"
+"info.hu\0ishikawa.okinawa.jp\0kamitonda.wakayama.jp\0beta.bounty-full.com\0"
+"0.bg\0trolley.museum\0shop.pl\0"
+"ch.it\0rokunohe.aomori.jp\0eu.meteorapp.com\0"
+"qld.au\0zgorzelec.pl\0"
+"steigen.no\0"
+"tarumizu.kagoshima.jp\0cloudns.asia\0"
+"chonan.chiba.jp\0aco\0"
+"info.et\0s3-website.eu-central-1.amazonaws.com\0"
+"gs.nl.no\0"
+"is-gone.com\0"
+"seljord.no\0"
+"info.fj\0urbinopesaro.it\0hirokawa.fukuoka.jp\0"
+"edugit.org\0"
+"alt.za\0"
+"shizukuishi.iwate.jp\0"
+"rost.no\0"
+"kanoya.kagoshima.jp\0\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0"
+"chikugo.fukuoka.jp\0hongo.hiroshima.jp\0"
+"foggia.it\0"
+"guide\0"
+"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
+"ads\0"
+"film.hu\0"
+"evenassi.no\0"
+"aeg\0free\0"
+"toshima.tokyo.jp\0kurobe.toyama.jp\0"
+"tajiri.osaka.jp\0"
+"fosnes.no\0"
+"yosemite.museum\0"
+"tynset.no\0"
+"naka.ibaraki.jp\0nakano.nagano.jp\0freebox-os.fr\0"
+"k12.wa.us\0"
+"daigo.ibaraki.jp\0"
+"nishiarita.saga.jp\0bardu.no\0info.cx\0"
+"bibai.hokkaido.jp\0sannan.hyogo.jp\0sochi.su\0"
+"rexroth\0"
+"muni.il\0furukawa.miyagi.jp\0reit\0vladikavkaz.ru\0"
+"cq.cn\0lutsk.ua\0"
+"takamori.nagano.jp\0"
"afl\0"
-"ichinohe.iwate.jp\0"
-"fr.it\0"
-"forum.hu\0clock.museum\0"
-"*.statics.cloud\0"
-"pp.se\0pp.ru\0"
-"\xe5\x85\xac\xe7\x9b\x8a\0"
-"shika.ishikawa.jp\0"
-"tromso.no\0"
-"miyoshi.tokushima.jp\0myactivedirectory.com\0"
-"pizza\0"
-"ikawa.akita.jp\0omitama.ibaraki.jp\0juegos\0"
-"daigo.ibaraki.jp\0kunisaki.oita.jp\0"
-"dlugoleka.pl\0discourse.team\0"
-"kawakami.nara.jp\0"
-"rissa.no\0"
-"oshino.yamanashi.jp\0wif.gov.pl\0"
-"kg.kr\0"
-"vagan.no\0"
-"war.museum\0"
-"pp.ua\0"
-"blogspot.co.ke\0"
+"nara.jp\0"
+"vads\xc3\xb8.no\0"
+"info.ec\0northwesternmutual\0g\xc3\xbcnstigbestellen.de\0"
+"storfjord.no\0"
+"mitsuke.niigata.jp\0supplies\0ms.leg.br\0"
+"inagi.tokyo.jp\0fly.dev\0"
+"shibetsu.hokkaido.jp\0"
+"vb.it\0szczytno.pl\0"
+"hidaka.wakayama.jp\0of.fashion\0"
+"vladikavkaz.su\0"
+"iki.fi\0"
+"info.bb\0"
+"olayangroup\0"
+"rieti.it\0gs.jan-mayen.no\0info.at\0"
+"info.au\0czest.pl\0"
+"atlanta.museum\0environment.museum\0oya.to\0wblog.id\0"
+"haibara.shizuoka.jp\0"
+"info.az\0oto.fukuoka.jp\0"
+"hirono.iwate.jp\0"
+"info.bo\0"
+"nishinoshima.shimane.jp\0service.one\0sites.static.land\0"
+"adult.ht\0pointto.us\0"
+"on-the-web.tv\0"
+"kodaira.tokyo.jp\0"
+"fr.eu.org\0mt.leg.br\0"
+"chippubetsu.hokkaido.jp\0in-dsl.net\0"
+"tsukigata.hokkaido.jp\0hospital\0"
+"hobol.no\0"
"aig\0"
-"misaki.okayama.jp\0"
-"kawagoe.mie.jp\0warmia.pl\0"
-"hikone.shiga.jp\0weibo\0"
-"nankoku.kochi.jp\0webhop.net\0"
-"friulivegiulia.it\0\xe5\x85\xab\xe5\x8d\xa6\0"
-"horokanai.hokkaido.jp\0"
-"usr.cloud.muni.cz\0"
-"g\xc3\xbcnstigbestellen.de\0"
-"togakushi.nagano.jp\0"
-"gv.vc\0"
-"ug.gov.pl\0"
-"midori.gunma.jp\0bus.museum\0nysa.pl\0"
-"amami.kagoshima.jp\0"
-"zapto.xyz\0"
-"takahashi.okayama.jp\0dyndns-home.com\0"
-"gniezno.pl\0"
-"ol.no\0orskog.no\0"
-"pmn.it\0"
-"maringa.br\0yoshikawa.saitama.jp\0cc.ny.us\0"
-"\xe5\xae\xae\xe5\x9f\x8e.jp\0"
-"glas.museum\0"
-"nationalheritage.museum\0"
-"frosinone.it\0"
-"motegi.tochigi.jp\0"
-"stj\xc3\xb8rdal.no\0"
-"chernigov.ua\0cc.az.us\0"
-"discovery.museum\0withgoogle.com\0"
-"jobs\0"
-"starnberg.museum\0"
-"casadelamoneda.museum\0n.se\0"
-"trentino-alto-adige.it\0"
-"koshigaya.saitama.jp\0eastafrica.museum\0s3.dualstack.sa-east-1.amazonaws.com\0"
-"stuff-4-sale.us\0"
-"chonan.chiba.jp\0""0e.vc\0"
-"journalist.aero\0lasalle\0"
-"mobi.gp\0"
-"holtalen.no\0"
-"blogspot.co.nz\0"
-"upow.gov.pl\0"
-"support\0"
-"ogliastra.it\0"
-"higashiura.aichi.jp\0sopot.pl\0"
-"lubartow.pl\0"
-"anthropology.museum\0gucci\0"
-"ikaruga.nara.jp\0"
-"ayabe.kyoto.jp\0"
-"ferrara.it\0verbania.it\0"
-"wphostedmail.com\0"
-"vr.it\0"
-"rm.it\0lib.mt.us\0lib.nd.us\0"
-"childrens.museum\0"
-"kasuya.fukuoka.jp\0"
-"is.it\0"
-"acct.pro\0"
-"en.it\0"
-"valle-aosta.it\0"
-"ascolipiceno.it\0nanmoku.gunma.jp\0"
-"furukawa.miyagi.jp\0attorney\0\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0"
-"targi.pl\0anz\0"
-"in-butter.de\0"
-"aol\0"
-"is-a-doctor.com\0"
-"stordal.no\0bbs.tr\0"
-"kimobetsu.hokkaido.jp\0"
-"16-b.it\0"
-"yasuoka.nagano.jp\0"
-"apple\0"
-"md.ci\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
-"minamisanriku.miyagi.jp\0"
-"otaru.hokkaido.jp\0"
-"aogaki.hyogo.jp\0"
-"tlon.network\0"
-"app\0"
-"ginan.gifu.jp\0giessen.museum\0"
-"verm\xc3\xb6gensberatung\0"
-"lierne.no\0mywire.org\0"
-"kashiwa.chiba.jp\0"
-"fukuroi.shizuoka.jp\0musashimurayama.tokyo.jp\0tjeldsund.no\0"
-"naturalsciences.museum\0"
-"jele.host\0"
-"schwarz\0ui.nabu.casa\0"
-"kamo.kyoto.jp\0"
-"bar\0"
-"sciences.museum\0bbc\0gdynia.pl\0"
-"akita.akita.jp\0wv.us\0"
-"atl.jelastic.vps-host.net\0"
-"starachowice.pl\0"
-"mx.na\0herokussl.com\0"
-"sorum.no\0"
-"eng.pro\0"
-"art\0bbt\0"
-"takinoue.hokkaido.jp\0"
-"s\xc3\xb8rreisa.no\0"
-"iida.nagano.jp\0bcg\0"
-"cc.ne.us\0baby\0"
-"kobayashi.miyazaki.jp\0medical.museum\0bcn\0forumz.info\0"
-"gov.nc.tr\0vercel.app\0"
-"w.bg\0"
-"atsugi.kanagawa.jp\0\xe5\x85\xac\xe5\x8f\xb8\0"
-"2.bg\0"
-"hospital\0"
-"redirectme.net\0"
-"kozagawa.wakayama.jp\0tana.no\0"
-"sncf\0"
-"det.br\0to.gov.br\0takazaki.miyazaki.jp\0jele.club\0"
-"chernivtsi.ua\0"
-"gub.uy\0"
-"ong.br\0"
-"shoparena.pl\0"
-"katsuragi.nara.jp\0tokashiki.okinawa.jp\0prudential\0"
-"project.museum\0giize.com\0"
-"r\xc3\xa1hkker\xc3\xa1vju.no\0"
-"vana\0from-pa.com\0"
-"studio\0"
+"yamanashi.yamanashi.jp\0"
+"info.co\0dealer\0ukco.me\0"
+"tamano.okayama.jp\0przeworsk.pl\0is-a-painter.com\0"
+"iveland.no\0bedzin.pl\0"
+"q.bg\0"
+"supply\0"
+"from-ks.com\0"
+"koto.shiga.jp\0"
+"niyodogawa.kochi.jp\0soundandvision.museum\0"
+"santoandre.br\0\xe4\xbd\x90\xe8\xb3\x80.jp\0"
+"kasama.ibaraki.jp\0christiansburg.museum\0"
+"minoh.osaka.jp\0"
+"gbiz\0gives\0"
+"imari.saga.jp\0jaworzno.pl\0"
+"futbol\0browsersafetymark.io\0"
+"uryu.hokkaido.jp\0"
+"arte.bo\0"
+"minamiizu.shizuoka.jp\0"
+"de.com\0"
+"elk.pl\0"
+"aircraft.aero\0rent\0"
+"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0"
+"*.ocs.customer-oci.com\0"
+"osoyro.no\0"
+"kitaaiki.nagano.jp\0*.otap.co\0"
+"\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"per.la\0"
+"k12.pa.us\0"
+"openair.museum\0hb.cldmail.ru\0"
+"bronnoysund.no\0"
+"odate.akita.jp\0yuki.ibaraki.jp\0"
+"tamayu.shimane.jp\0"
+"komagane.nagano.jp\0freedesktop.org\0"
+"wales.museum\0kiwi\0"
+"app.render.com\0"
+"aoste.it\0recipes\0"
+"shitara.aichi.jp\0can.museum\0"
+"9.bg\0dyndns.ddnss.de\0"
+"kochi.jp\0"
+"pars\0"
+"ch.tc\0idnblogger.com\0"
+"hb.cn\0umbria.it\0haram.no\0"
+"torino.museum\0custom.metacentrum.cz\0"
+"mc.eu.org\0"
+"kochi.kochi.jp\0lexus\0"
+"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0"
+"sc.cn\0"
+"zappos\0"
+"sakai.ibaraki.jp\0"
+"ichikawa.hyogo.jp\0"
+"broke-it.net\0"
+"per.nf\0flt.cloud.muni.cz\0"
+"aizumi.tokushima.jp\0rzeszow.pl\0"
+"udono.mie.jp\0"
+"k12.ar.us\0today\0"
+"wafflecell.com\0"
+"tysvar.no\0lib.in.us\0"
+"niihama.ehime.jp\0"
+"trentinosuedtirol.it\0education\0"
+"shioya.tochigi.jp\0k12.mi.us\0theatre\0"
+"v\xc3\xa5gs\xc3\xb8y.no\0lohmus.me\0"
+"texas.museum\0est.pr\0"
+"uri.arpa\0readthedocs.io\0"
+"nakatane.kagoshima.jp\0susono.shizuoka.jp\0lt.eu.org\0"
+"anz\0"
+"togo.aichi.jp\0starachowice.pl\0"
+"yaizu.shizuoka.jp\0aol\0"
+"kvalsund.no\0"
+"epilepsy.museum\0tips\0"
+"br\xc3\xb8nn\xc3\xb8y.no\0"
+"trentinoaltoadige.it\0"
+"fujimino.saitama.jp\0grane.no\0cloudcontrolled.com\0"
+"is-a-celticsfan.org\0"
+"rest\0"
+"ontario.museum\0clothing\0"
+"mortgage\0"
+"eidsberg.no\0"
+"h.se\0app\0"
+"detroit.museum\0couchpotatofries.org\0"
+"cesena-forli.it\0dattolocal.com\0"
+"tozsde.hu\0carraramassa.it\0fredrikstad.no\0"
+"vm.bytemark.co.uk\0"
+"ringebu.no\0"
+"s\xc3\xb8gne.no\0cn.com\0"
+"kepno.pl\0"
+"shimonoseki.yamaguchi.jp\0"
+"ustka.pl\0"
+"audio\0docs\0rag-cloud-ch.hosteur.com\0"
+"postman-echo.com\0"
+"trentins\xc3\xbc""dtirol.it\0kameyama.mie.jp\0bar\0"
+"bbc\0"
+"lindas.no\0"
+"bialystok.pl\0k12.ia.us\0"
+"karuizawa.nagano.jp\0cc.ct.us\0"
+"ab.ca\0"
+"bounceme.net\0"
+"ui.nabu.casa\0"
+"blogdns.org\0"
+"virtuel.museum\0"
+"davvenj\xc3\xa1rga.no\0\xd7\xa7\xd7\x95\xd7\x9d\0"
+"undersea.museum\0art\0bbt\0sells-for-u.com\0"
+"per.sg\0bcg\0"
+"z.bg\0"
+"gr.it\0"
+"goshiki.hyogo.jp\0bcn\0"
+"matsushige.tokushima.jp\0carrier.museum\0s\xc3\xb8rreisa.no\0dental\0"
+"vik.no\0stada\0"
+"info.ve\0"
+"onion\0"
+"revista.bo\0osaka\0"
+"gr.jp\0"
+"karacol.su\0"
+"gs.sf.no\0andebu.no\0"
+"info.vn\0"
+"from-me.org\0"
+"\xc3\xa5snes.no\0from-nm.com\0"
+"is-found.org\0that.win\0"
+"sc.ke\0"
+"tobetsu.hokkaido.jp\0"
+"g\xc3\xa1\xc5\x8bgaviika.no\0molde.no\0"
+"lib.mo.us\0"
+"hamura.tokyo.jp\0"
+"h\xc3\xa6gebostad.no\0accountant\0betainabox.com\0"
+"name.hr\0"
+"sc.kr\0"
+"edeka\0"
"bet\0"
-"podzone.net\0"
-"chichibu.saitama.jp\0"
-"carrier.museum\0"
-"kawamata.fukushima.jp\0"
-"flight.aero\0"
-"lib.tn.us\0"
-"recreation.aero\0vologda.su\0myfast.space\0"
-"gs.hl.no\0"
-"akiruno.tokyo.jp\0"
-"takashima.shiga.jp\0v\xc3\xa1rgg\xc3\xa1t.no\0"
-"stathelle.no\0"
-"lt.it\0"
-"cloudns.eu\0"
-"yoshino.nara.jp\0dyndns-blog.com\0"
-"spreadbetting\0"
-"cz.it\0tokyo\0"
-"chirurgiens-dentistes.fr\0biev\xc3\xa1t.no\0"
-"rimini.it\0"
-"\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"yomitan.okinawa.jp\0folldal.no\0axa\0blogspot.co.za\0"
-"noda.chiba.jp\0"
-"salerno.it\0aws\0deal\0"
-"pe.ca\0is-slick.com\0"
-"mus.mi.us\0"
-"shingo.aomori.jp\0nishigo.fukushima.jp\0"
-"ikeda.gifu.jp\0elburg.museum\0"
-"shimabara.nagasaki.jp\0schlesisches.museum\0viking.museum\0pony.club\0"
-"kumakogen.ehime.jp\0antiques.museum\0"
-"management\0"
-"tj.cn\0bale.museum\0"
-"educator.aero\0"
-"codespot.com\0"
-"ybo.trade\0"
-"development.run\0"
-"sex.hu\0bid\0"
-"rehab\0"
-"sk\xc3\xa5nland.no\0from.work\0"
-"r\xc3\xb8yken.no\0"
-"brand.se\0"
-"toshima.tokyo.jp\0"
-"oxa.cloud\0"
-"arai.shizuoka.jp\0kanuma.tochigi.jp\0\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"ski.museum\0bio\0"
-"tas.au\0"
-"val-daosta.it\0"
-"ando.nara.jp\0"
-"kadoma.osaka.jp\0"
-"whoswho\0"
-"\xd9\x82\xd8\xb7\xd8\xb1\0group\0"
-"biz\0chungbuk.kr\0staging.onred.one\0"
-"mishima.fukushima.jp\0"
-"pictures\0"
-"logoip.de\0"
-"hakusan.ishikawa.jp\0"
-"nango.fukushima.jp\0nh.us\0cloudns.in\0"
-"planetarium.museum\0"
-"luxembourg.museum\0servecounterstrike.com\0"
-"ookuwa.nagano.jp\0"
-"yamaga.kumamoto.jp\0"
-"workisboring.com\0"
-"hisayama.fukuoka.jp\0shimane.shimane.jp\0"
-"ybo.party\0"
-"tecnologia.bo\0"
-"dyn-ip24.de\0"
-"ebino.miyazaki.jp\0is-a-photographer.com\0ras.ru\0"
-"indie.porn\0"
-"nirasaki.yamanashi.jp\0"
-"indiana.museum\0"
-"taku.saga.jp\0cc.ma.us\0yodobashi\0"
-"faith\0hdfcbank\0"
-"cloudns.cc\0for-our.info\0"
-"noshiro.akita.jp\0hostedpi.com\0"
-"isahaya.nagasaki.jp\0"
-"shibukawa.gunma.jp\0"
-"c.bg\0nozawaonsen.nagano.jp\0"
-"my-firewall.org\0"
-"yakumo.hokkaido.jp\0"
-"georgia.museum\0"
-"vallee-d-aoste.it\0channelsdvr.net\0"
-"house\0"
-"moonscale.net\0"
-"experts-comptables.fr\0"
-"malselv.no\0"
-"miyazaki.jp\0"
-"ikata.ehime.jp\0bahccavuotna.no\0"
-"hashima.gifu.jp\0*.platformsh.site\0"
-"sumoto.hyogo.jp\0shimoichi.nara.jp\0"
-"namerikawa.toyama.jp\0"
-"for-more.biz\0"
-"trondheim.no\0"
-"bms\0jcloud.kz\0"
-"shinagawa.tokyo.jp\0s3-website.us-east-2.amazonaws.com\0"
-"not.br\0"
-"bmw\0"
-"games.hu\0band\0"
-"tatamotors\0"
-"mihama.chiba.jp\0zoology.museum\0"
-"higashiyama.kyoto.jp\0labour.museum\0"
-"discount\0"
-"\xe6\x95\x99\xe8\x82\xb2.hk\0civilisation.museum\0fiat\0"
-"bank\0"
-"s3-ap-northeast-2.amazonaws.com\0"
-"u2.xnbay.com\0"
-"umbria.it\0takasaki.gunma.jp\0"
-"www.ro\0hockey\0"
-"zgora.pl\0"
-"pe.it\0"
-"arita.saga.jp\0"
-"kamikitayama.nara.jp\0"
-"cherkassy.ua\0"
-"lebtimnetz.de\0"
-"bom\0"
+"place\0from-ky.com\0"
+"huissier-justice.fr\0takikawa.hokkaido.jp\0"
+"movimiento.bo\0hagi.yamaguchi.jp\0"
+"info.tn\0"
+"hachijo.tokyo.jp\0kaufen\0from-ct.com\0"
+"cz.it\0"
+"\xe5\xa5\x88\xe8\x89\xaf.jp\0"
+"higashiyamato.tokyo.jp\0info.tr\0indie.porn\0"
+"daegu.kr\0schule\0"
+"info.tt\0goldpoint\0"
+"sch.ae\0hk.cn\0vpnplus.to\0"
+"serveftp.net\0"
+"name.et\0kanonji.kagawa.jp\0sc.ls\0"
+"countryestate.museum\0eu-west-1.elasticbeanstalk.com\0"
+"sardinia.it\0nowaruda.pl\0info.tz\0"
+"name.fj\0yono.saitama.jp\0"
+"omuta.fukuoka.jp\0muenchen.museum\0"
+"cloudfunctions.net\0"
+"matsumae.hokkaido.jp\0apps.lair.io\0"
+"valer.ostfold.no\0axa\0"
+"space.museum\0aws\0"
+"*.futurecms.at\0"
+"fortworth.museum\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0"
+"nagano.nagano.jp\0"
+"\xc3\xb8ystre-slidre.no\0"
+"gouv.fr\0l\xc3\xa4ns.museum\0info.ro\0fastvps.host\0"
+"aizuwakamatsu.fukushima.jp\0riodejaneiro.museum\0"
+"ashibetsu.hokkaido.jp\0info.sd\0dynu.net\0"
+"sasebo.nagasaki.jp\0pantheonsite.io\0"
+"asuke.aichi.jp\0yonabaru.okinawa.jp\0cc.gu.us\0lib.ut.us\0bid\0"
+"seaport.museum\0\xd0\xb1\xd0\xb5\xd0\xbb\0dyndns-at-home.com\0"
+"name.cy\0"
+"ocelot.mythic-beasts.com\0"
+"chuo.osaka.jp\0"
+"bio\0"
+"mobi\0"
+"run.app\0"
+"*.webhare.dev\0"
+"name.eg\0lc.it\0\xe6\xb8\xb8\xe6\x88\x8f\0"
+"info.pk\0no.com\0"
+"s\xc3\xa1lat.no\0info.pl\0"
+"2ix.at\0"
+"biz\0railway.museum\0shoparena.pl\0"
+"gouv.ht\0"
+"info.pr\0ddnsfree.com\0"
+"vt.it\0"
+"enf.br\0from-nh.com\0"
+"in-vpn.de\0"
+"tanabe.kyoto.jp\0aktyubinsk.su\0"
+"rawa-maz.pl\0boutique\0"
+"campinas.br\0"
+"moda\0"
+"name.az\0"
+"tickets\0"
+"fujiidera.osaka.jp\0"
+"bip.sh\0"
+"info.na\0""2ix.ch\0"
+"gunma.jp\0"
+"jelenia-gora.pl\0"
+"shimada.shizuoka.jp\0"
+"okutama.tokyo.jp\0info.mv\0info.nf\0jele.cloud\0"
+"gouv.bj\0"
+"info.ni\0"
+"from-md.com\0"
+"2ix.de\0"
+"production.aero\0"
+"chuo.yamanashi.jp\0"
+"info.nr\0"
+"sp.gov.br\0"
+"leg.br\0"
+"gouv.ci\0"
+"togura.nagano.jp\0bc.platform.sh\0"
+"sekd1.beebyteapp.io\0"
+"susaki.kochi.jp\0palmsprings.museum\0"
+"altoadige.it\0higashinaruse.akita.jp\0"
+"consulting.aero\0mk.eu.org\0"
+"services.aero\0"
+"columbia.museum\0"
+"info.la\0s3.eu-west-2.amazonaws.com\0"
+"tadotsu.kagawa.jp\0"
+"hayashima.okayama.jp\0"
+"kaas.gg\0"
+"higashiagatsuma.gunma.jp\0bms\0"
+"firenze.it\0"
+"pccw\0"
+"goto.nagasaki.jp\0"
+"bmw\0wedeploy.sh\0"
+"hasura.app\0"
+"rishirifuji.hokkaido.jp\0"
+"info.ls\0"
+"journal.aero\0sch.id\0"
+"kunohe.iwate.jp\0"
+"id.au\0press.museum\0"
+"sc.ug\0"
+"kawakami.nara.jp\0"
+"sc.tz\0"
+"satsumasendai.kagoshima.jp\0"
+"realestate.pl\0bom\0"
+"sch.ir\0"
"boo\0"
-"stackhero-network.com\0"
-"swatch\0"
-"tsuwano.shimane.jp\0"
+"serveirc.com\0"
+"sc.us\0"
"bot\0"
-"volkenkunde.museum\0"
-"spydeberg.no\0"
-"bialowieza.pl\0"
-"box\0"
-"satx.museum\0"
-"sex.pl\0"
-"macerata.it\0nesseby.no\0"
-"kumamoto.kumamoto.jp\0cab\0"
-"finland.museum\0"
-"!city.nagoya.jp\0pe.kr\0"
-"arab\0"
-"eisenbahn.museum\0"
-"jl.cn\0fido\0"
-"jondal.no\0cal\0"
-"cam\0s3-website-us-east-1.amazonaws.com\0"
-"virtualuser.de\0"
-"wildlife.museum\0lpusercontent.com\0"
-"cba\0"
-"lt.ua\0car\0"
-"onna.okinawa.jp\0"
-"cat\0"
-"fr\xc3\xa6na.no\0mobi.tt\0"
-"niimi.okayama.jp\0haugesund.no\0h\xc3\xa6gebostad.no\0"
-"vibovalentia.it\0"
-"aga.niigata.jp\0"
-"nt.edu.au\0mobi.tz\0cbn\0"
-"chuo.osaka.jp\0"
-"nishi.osaka.jp\0"
-"alpha-myqnapcloud.com\0"
-"laquila.it\0*.webhare.dev\0"
-"kommune.no\0cbs\0dell\0bci.dnstrace.pro\0"
-"md.us\0ltda\0"
-"scjohnson\0doomdns.com\0"
-"tsuyama.okayama.jp\0"
-"takagi.nagano.jp\0"
-"dontexist.net\0"
-"\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0"
-"tienda\0"
-"h\xc3\xa5.no\0"
-"kvanangen.no\0"
-"toga.toyama.jp\0rnrt.tn\0cc.or.us\0"
-"fukusaki.hyogo.jp\0"
-"mex.com\0"
-"64-b.it\0"
-"date.fukushima.jp\0\xe5\x95\x86\xe5\xba\x97\0"
-"karmoy.no\0"
-"hasami.nagasaki.jp\0"
-"zama.kanagawa.jp\0"
-"gentlentapis.com\0"
-"samnanger.no\0w.se\0red.sv\0staples\0"
-"*.backyards.banzaicloud.io\0"
-"nagara.chiba.jp\0"
-"andebu.no\0"
-"kurogi.fukuoka.jp\0atami.shizuoka.jp\0"
-"southwest.museum\0"
-"trentinos\xc3\xbc""dtirol.it\0"
+"vic.gov.au\0"
+"motegi.tochigi.jp\0box\0"
+"so.gov.pl\0"
+"sch.jo\0"
+"users.scale.virtualcloud.com.br\0"
+"ot.it\0pd.it\0info.ke\0"
+"cab\0from-ok.com\0"
+"misato.saitama.jp\0"
+"info.ki\0"
+"is-a-therapist.com\0"
+"kuchinotsu.nagasaki.jp\0muosat.no\0crimea.ua\0"
+"lu.eu.org\0me.eu.org\0"
+"rikubetsu.hokkaido.jp\0"
+"kunst.museum\0"
+"nowruz\0"
+"kawai.nara.jp\0cal\0"
+"cam\0demo.datacenter.fi\0"
+"beauxarts.museum\0quebec.museum\0"
+"gjovik.no\0cba\0"
+"car\0"
+"utazas.hu\0ehime.jp\0ricoh\0"
+"cat\0kawamata.fukushima.jp\0"
+"vicenza.it\0kayabe.hokkaido.jp\0schokokeks.net\0"
+"sch.lk\0cloudns.eu\0clan.rip\0"
+"k12.ms.us\0k12.nc.us\0"
+"cbn\0"
+"farm.museum\0black\0"
+"magazine.aero\0davvenjarga.no\0zagan.pl\0cbs\0"
+"ok.us\0geekgalaxy.com\0"
+"sch.ly\0svelvik.no\0"
+"tomiya.miyagi.jp\0"
+"naoshima.kagawa.jp\0lv.eu.org\0"
+"\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0"
+"s\xc3\xb8ndre-land.no\0barcelona\0"
+"trust.museum\0lifeinsurance\0"
+"steam.museum\0\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0"
+"gsj.bz\0"
+"zao.miyagi.jp\0fujitsu\0"
+"civilization.museum\0"
+"village.museum\0tennis\0whoswho\0"
+"ecn.br\0sch.ng\0*.code.run\0"
+"armenia.su\0"
+"z.se\0jozi.biz\0"
+"sagamihara.kanagawa.jp\0"
+"makinohara.shizuoka.jp\0automotive.museum\0ac.leg.br\0"
+"field.museum\0dynamic-dns.info\0"
+"stavern.no\0"
+"ks.ua\0"
+"habmer.no\0"
+"orkanger.no\0"
+"tsuiki.fukuoka.jp\0"
+"hannan.osaka.jp\0"
+"medical.museum\0*.ocp.customer-oci.com\0"
+"photos\0"
+"adobeaemcloud.net\0"
"ceo\0"
-"student.aero\0"
+"cloudns.in\0"
"cfa\0"
-"c.la\0"
-"sondrio.it\0cfd\0"
-"ozu.ehime.jp\0"
-"consultant.aero\0"
-"steinkjer.no\0latino\0"
+"honai.ehime.jp\0bytom.pl\0"
+"cfd\0app.os.stg.fedoraproject.org\0"
+"ks.us\0"
+"sanagochi.tokushima.jp\0"
+"urayasu.chiba.jp\0tmall\0"
+"gujo.gifu.jp\0"
"buy\0"
-"toyosato.shiga.jp\0"
-"hasama.oita.jp\0"
-"fukuyama.hiroshima.jp\0minamiashigara.kanagawa.jp\0kashiba.nara.jp\0"
-"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0"
-"lig.it\0"
-"cloudns.us\0"
-"choshi.chiba.jp\0mobi.na\0saotome.st\0verm\xc3\xb6gensberater\0"
-"olayan\0"
-"mobi.ng\0"
-"omura.nagasaki.jp\0members.linode.com\0"
-"sakuragawa.ibaraki.jp\0bokn.no\0"
-"tobishima.aichi.jp\0kawagoe.saitama.jp\0lindas.no\0"
-"fg.it\0lib.az.us\0from-nj.com\0"
-"trade\0lcube-server.de\0"
-"ar.it\0wolomin.pl\0"
-"unj\xc3\xa1rga.no\0"
-"udine.it\0s3.dualstack.eu-central-1.amazonaws.com\0"
-"kafjord.no\0bss.design\0"
-"film\0"
-"ginoza.okinawa.jp\0"
-"jampa.br\0napoli.it\0"
-"channel\0"
-"averoy.no\0"
-"download\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0"
-"desi\0"
-"makinohara.shizuoka.jp\0"
-"fitness\0"
-"sayo.hyogo.jp\0aridagawa.wakayama.jp\0"
-"bzh\0"
-"academia.bo\0tonosho.kagawa.jp\0"
-"9guacu.br\0"
-"college\0pdns.page\0"
-"sango.nara.jp\0"
-"the.br\0sohu\0"
-"ddr.museum\0from-sc.com\0\xd1\x8f.\xd1\x80\xd1\x83\xd1\x81\0"
-"bayern\0"
-"spjelkavik.no\0"
-"hitachinaka.ibaraki.jp\0c.cdn77.org\0en-root.fr\0"
-"shangrila\0"
-"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0"
-"myds.me\0"
-"saitama.jp\0"
-"komatsu\0dsmynas.com\0"
-"surgery\0"
-"jprs\0"
-"maritimo.museum\0sf.no\0"
-"ashiya.fukuoka.jp\0minamiminowa.nagano.jp\0"
-"tuscany.it\0venezia.it\0cc.sc.us\0"
-"pa.leg.br\0"
-"kariya.aichi.jp\0miyawaka.fukuoka.jp\0mobi.ke\0"
-"from-ma.com\0"
-"marylhurst.museum\0"
-"s3.dualstack.eu-west-2.amazonaws.com\0"
-"dyndns1.de\0"
-"off.ai\0"
-"lugansk.ua\0k12.ne.us\0"
-"c.se\0"
-"!city.yokohama.jp\0"
-"edeka\0is-a-rockstar.com\0"
-"fujishiro.ibaraki.jp\0"
-"ainan.ehime.jp\0s3-external-1.amazonaws.com\0"
-"hirokawa.fukuoka.jp\0takino.hyogo.jp\0sytes.net\0"
-"shiriuchi.hokkaido.jp\0dyn.cosidns.de\0"
+"booking\0"
+"airline.aero\0overhalla.no\0unicom\0"
+"nordkapp.no\0sch.qa\0"
+"okayama.jp\0vt.us\0"
+"id.ir\0"
+"from-nv.com\0ca.reclaim.cloud\0"
+"lapy.pl\0grocery\0cloudns.cc\0"
+"tamamura.gunma.jp\0"
+"on-aptible.com\0"
+"sumita.iwate.jp\0machida.tokyo.jp\0from-ga.com\0"
+"e4.cz\0"
+"te.it\0tranby.no\0"
+"izumi.kagoshima.jp\0name.vn\0"
+"b\xc3\xa1hccavuotna.no\0"
+"uonuma.niigata.jp\0rennes\xc3\xb8y.no\0"
+"bandai.fukushima.jp\0"
+"wedeploy.me\0"
+"repair\0cn-northwest-1.eb.amazonaws.com.cn\0*.awdev.ca\0"
+"pacific.museum\0"
+"tempurl.host\0noip.us\0"
+"exchange.aero\0sch.sa\0\xe7\xb5\x84\xe7\xb9\x94.tw\0"
+"misconfused.org\0"
+"shiroishi.miyagi.jp\0capetown\0for.men\0"
+"gjerdrum.no\0"
+"barclays\0"
+"asahi.mie.jp\0"
+"a.prod.fastly.net\0"
+"kutno.pl\0chernivtsi.ua\0"
+"jfk.museum\0"
+"name.tj\0"
+"sch.so\0"
+"dupont\0"
+"web.app\0"
+"sch.ss\0shoes\0ar.com\0"
+"katsuyama.fukui.jp\0"
+"name.tr\0"
+"dolls.museum\0name.tt\0"
+"id.lv\0"
+"kazuno.akita.jp\0"
+"numazu.shizuoka.jp\0id.ly\0bzh\0"
+"sr.gov.pl\0tec.mi.us\0"
+"dgca.aero\0at-band-camp.net\0"
+"blog\0"
+"siljan.no\0"
+"es.eu.org\0"
+"logoip.de\0"
+"onagawa.miyagi.jp\0"
+"dellogliastra.it\0kr.eu.org\0"
+"mango\0"
+"oirm.gov.pl\0"
+"andriatranibarletta.it\0"
+"glas.museum\0"
+"namegata.ibaraki.jp\0bieszczady.pl\0eu.ax\0"
+"press.cy\0lon.wafaicloud.com\0"
+"moto\0\xe6\x9c\xba\xe6\x9e\x84\0"
+"biella.it\0k12.nv.us\0"
+"yamatotakada.nara.jp\0rissa.no\0"
+"lecco.it\0kiev.ua\0"
+"soo.kagoshima.jp\0"
+"s3-ap-south-1.amazonaws.com\0"
+"higashine.yamagata.jp\0"
+"\xe5\x95\x86\xe6\xa0\x87\0nym.by\0"
+"nym.bz\0"
+"earth\0"
+"at.it\0"
+"sasayama.hyogo.jp\0"
+"gouv.sn\0"
+"*.kitakyushu.jp\0"
"hirara.okinawa.jp\0"
-"from-vt.com\0"
-"minamioguni.kumamoto.jp\0pb.leg.br\0"
-"m\xc4\x81ori.nz\0"
-"transporte.bo\0fie.ee\0askvoll.no\0"
-"florist\0"
-"army\0"
-"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0"
-"fire\0"
-"yaotsu.gifu.jp\0"
-"ichihara.chiba.jp\0"
-"shirakawa.gifu.jp\0"
-"\xe7\x82\xb9\xe7\x9c\x8b\0is-a-blogger.com\0"
-"carraramassa.it\0"
-"tomari.hokkaido.jp\0"
-"m\xc3\xa1latvuopmi.no\0"
-"profesional.bo\0"
-"co.ae\0com\0fudai.iwate.jp\0"
-"cyber.museum\0lib.ma.us\0"
-"co.ag\0okazaki.aichi.jp\0"
-"br\xc3\xb8nn\xc3\xb8y.no\0"
-"oi.kanagawa.jp\0minobu.yamanashi.jp\0lib.id.us\0cpa\0cloudapps.digital\0"
-"fish\0"
-"fet.no\0song\0"
-"\xc3\xb8ygarden.no\0melbourne\0"
-"co.am\0arpa\0auto.pl\0"
-"h\xc3\xa4kkinen.fi\0"
-"co.ao\0"
-"motoyama.kochi.jp\0flanders.museum\0"
-"co.bb\0"
-"co.at\0is-a-painter.com\0"
-"yamazoe.nara.jp\0"
-"co.bi\0"
-"barreau.bj\0hanyu.saitama.jp\0"
-"dad\0iamallama.com\0"
-"tanohata.iwate.jp\0sony\0"
-"co.bn\0"
-"louvre.museum\0badaddja.no\0"
-"*.ex.ortsinfo.at\0"
-"co.ca\0in-berlin.de\0"
-"myftp.biz\0"
-"nachikatsuura.wakayama.jp\0"
-"lohmus.me\0"
-"co.bw\0tempioolbia.it\0m\xc3\xa5lselv.no\0"
-"co.ci\0neat-url.com\0"
-"co.cl\0"
-"co.cm\0"
-"rv.ua\0"
-"showa.gunma.jp\0s3-website-ap-northeast-1.amazonaws.com\0"
-"cloudns.pw\0podzone.org\0"
-"day\0"
-"co.cr\0maori.nz\0ubank\0"
-"kurashiki.okayama.jp\0"
-"cuneo.it\0barsy.club\0"
-"friuliv-giulia.it\0urawa.saitama.jp\0myshopify.com\0"
-"yokoshibahikari.chiba.jp\0"
-"matsubara.osaka.jp\0"
-"\xe9\xb3\xa5\xe5\x8f\x96.jp\0co.cz\0"
-"crs\0csc\0co.dk\0"
-"lug.org.uk\0"
-"museet.museum\0"
-"kuroishi.aomori.jp\0homesecuritymac.com\0"
-"ouda.nara.jp\0"
-"\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0uy.com\0"
-"manno.kagawa.jp\0"
-"ar.us\0"
-"asda\0"
-"cc.ut.us\0"
-"arte\0"
-"yawatahama.ehime.jp\0"
-"vallee-aoste.it\0s3-website.ap-south-1.amazonaws.com\0"
-"aseral.no\0"
-"barclaycard\0dds\0"
-"l.bg\0wpmucdn.com\0"
-"xx.gl\0"
-"meet\0"
-"k12.mi.us\0"
-"getmyip.com\0"
-"barlettatraniandria.it\0moriya.ibaraki.jp\0"
-"workshop.museum\0eaton.mi.us\0from-ut.com\0"
-"k12.co.us\0sinaapp.com\0"
-"co.gg\0"
-"tarumizu.kagoshima.jp\0osaki.miyagi.jp\0"
-"travel.pl\0"
-"co.gl\0basketball\0"
-"bbva\0"
-"kotohira.kagawa.jp\0dev\0"
-"suginami.tokyo.jp\0valley.museum\0"
-"kainan.tokushima.jp\0"
-"fussa.tokyo.jp\0"
-"1kapp.com\0"
-"ntr.br\0"
-"co.gy\0"
-"tadotsu.kagawa.jp\0no-ip.biz\0noho.st\0"
-"ovre-eiker.no\0construction\0deno.dev\0"
-"minamiechizen.fukui.jp\0"
+"sor-varanger.no\0"
+"lu.it\0me.it\0"
+"name.qa\0"
+"chofu.tokyo.jp\0name.pr\0builders\0"
+"kannami.shizuoka.jp\0"
+"suzu.ishikawa.jp\0bar2.net\0"
+"frontdoor\0target\0"
+"\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0"
+"shiki.saitama.jp\0"
+"nym.ec\0"
+"abiko.chiba.jp\0"
+"laakesvuemie.no\0"
+"manaus.br\0me.ke\0"
+"name.na\0"
+"trieste.it\0folkebibl.no\0"
+"cust.testing.thingdust.io\0"
+"kanzaki.saga.jp\0ch.trendhosting.cloud\0"
+"caserta.it\0rikuzentakata.iwate.jp\0himeshima.oita.jp\0fukaya.saitama.jp\0name.mv\0"
+"name.ng\0repair.men\0"
+"name.my\0lorenskog.no\0ak.us\0"
+"doomdns.org\0"
+"lugs.org.uk\0"
+"com\0"
+"florida.museum\0nore-og-uvdal.no\0"
+"coldwar.museum\0router.management\0"
+"cpa\0"
+"freeboxos.com\0"
+"lenvik.no\0at.md\0"
+"livinghistory.museum\0"
+"ug.gov.pl\0info.zm\0sch.zm\0blue\0"
+"website\0s3.dualstack.eu-central-1.amazonaws.com\0"
+"hanamaki.iwate.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0"
+"hida.gifu.jp\0kosei.shiga.jp\0"
+"im.it\0"
+"marumori.miyagi.jp\0"
+"shintoku.hokkaido.jp\0tjeldsund.no\0"
+"dad\0hosting-cluster.nl\0"
+"barsy.info\0dynserv.org\0"
+"ikawa.akita.jp\0"
+"tn.it\0pages.dev\0"
+"nym.gr\0"
+"ltd.co.im\0"
+"webhop.me\0"
+"shinjo.nara.jp\0"
+"donna.no\0"
+"health\0"
+"kashiwara.osaka.jp\0nym.gy\0"
+"nym.hk\0"
+"cloudns.us\0"
+"miyazaki.jp\0brasilia.me\0"
+"modern.museum\0"
+"takaoka.toyama.jp\0te.ua\0day\0logoip.com\0"
+"name.mk\0"
+"berlin\0"
+"nym.ie\0"
+"lib.or.us\0"
+"id.us\0"
+"crs\0csc\0s3-website-us-west-1.amazonaws.com\0reserve-online.net\0"
+"maceio.br\0"
+"tcm.museum\0"
+"dyndns-home.com\0"
+"mjondalen.no\0noip.me\0"
+"agano.niigata.jp\0"
+"name.jo\0"
+"fe.it\0utsira.no\0cc.wy.us\0"
+"woodside\0"
+"osaka.jp\0shiroi.chiba.jp\0nakanojo.gunma.jp\0"
+"pv.it\0"
+"kashiwa.chiba.jp\0kiyose.tokyo.jp\0"
+"bingo\0"
+"tw.cn\0wedeploy.io\0"
+"inf.br\0"
+"ardal.no\0"
+"dds\0"
+"friuliv-giulia.it\0gouv.km\0"
+"\xe1\x83\x92\xe1\x83\x94\0"
+"aquarium.museum\0vote\0"
+"nym.la\0"
+"pstmn.io\0"
+"nym.lc\0"
+"nym.li\0"
+"inf.cu\0aramco\0voto\0nym.kz\0"
+"munakata.fukuoka.jp\0r\xc3\xa5""de.no\0bd.se\0dev\0"
+"alessandria.it\0"
+"cuisinella\0al.leg.br\0"
+"pubtls.org\0"
+"blogdns.net\0nym.lt\0playstation-cloud.com\0"
+"sogne.no\0nym.lu\0nym.me\0"
+"wakayama.wakayama.jp\0"
+"carboniaiglesias.it\0"
+"fi.eu.org\0"
+"fuefuki.yamanashi.jp\0gouv.ml\0"
+"association.aero\0nym.mn\0"
+"mitou.yamaguchi.jp\0"
+"me.so\0"
+"mn.it\0"
+"me.ss\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0me.tc\0"
+"kunstunddesign.museum\0nym.mx\0"
+"science.museum\0dunlop\0"
+"collection.museum\0"
+"\xc3\xa5mli.no\0"
+"yawara.ibaraki.jp\0*.stolos.io\0"
+"lancia\0"
+"trentin-sud-tirol.it\0kamishihoro.hokkaido.jp\0"
+"dhl\0"
+"labour.museum\0makeup\0"
+"search\0"
+"shimamaki.hokkaido.jp\0jondal.no\0"
+"sweden.museum\0nym.nz\0"
+"kozagawa.wakayama.jp\0me.tz\0"
+"me.uk\0"
+"risor.no\0"
+"at.vg\0"
+"dh.bytemark.co.uk\0"
+"riobranco.br\0servecounterstrike.com\0"
+"kawakita.ishikawa.jp\0yamanobe.yamagata.jp\0me.us\0*.linodeobjects.com\0nym.pe\0"
+"plc.co.im\0"
+"passenger-association.aero\0montreal.museum\0"
+"usuki.oita.jp\0"
+"kamogawa.chiba.jp\0secure\0"
+"wv.us\0"
+"nordeste-idc.saveincloud.net\0"
+"user.party.eus\0"
+"diy\0"
+"nym.pt\0"
+"fr\xc3\xa6na.no\0for.mom\0"
+"to.gov.br\0me.vu\0"
+"emiliaromagna.it\0"
+"suldal.no\0"
+"juif.museum\0"
+"kamimine.saga.jp\0kharkov.ua\0"
+"serveftp.org\0"
+"siteleaf.net\0"
+"miki.hyogo.jp\0kawagoe.mie.jp\0lans.museum\0"
+"s3-website-ap-southeast-1.amazonaws.com\0"
+"msk.ru\0"
+"hammerfest.no\0\xd0\xb1\xd0\xb3\0"
+"sciencesnaturelles.museum\0"
+"\xe7\xb5\x84\xe7\xb9\x94.hk\0boxfuse.io\0dopaas.com\0pages.torproject.net\0"
+"hasama.oita.jp\0bielawa.pl\0associates\0"
+"enna.it\0"
+"valled-aosta.it\0k12.gu.us\0"
+"higashiyodogawa.osaka.jp\0nym.ro\0"
+"mil.ac\0myftp.org\0"
+"bologna.it\0kita.kyoto.jp\0"
+"mil.ae\0"
+"msk.su\0"
+"hanawa.fukushima.jp\0"
+"b\xc3\xb8.telemark.no\0"
+"judaica.museum\0eidsvoll.no\0cookingchannel\0"
+"sakura\0"
+"mil.al\0ong.br\0"
+"asti.it\0bremanger.no\0"
+"malbork.pl\0solar\0nym.sk\0enterprisecloud.nu\0"
+"nishigo.fukushima.jp\0saito.miyazaki.jp\0"
+"mil.ba\0"
+"mil.ar\0tn.us\0"
+"matsuno.ehime.jp\0s3-website.eu-west-2.amazonaws.com\0cloudns.pw\0lug.org.uk\0"
+"okuma.fukushima.jp\0"
+"f.bg\0"
+"nym.su\0"
+"mil.az\0app.banzaicloud.io\0"
+"nym.sx\0"
+"futaba.fukushima.jp\0castres.museum\0"
+"mil.bo\0kashiwazaki.niigata.jp\0"
+"fund\0"
+"mil.br\0chigasaki.kanagawa.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0"
+"cesenaforli.it\0tadaoka.osaka.jp\0"
+"embetsu.hokkaido.jp\0"
+"mad.museum\0\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0wpmudev.host\0"
+"microlight.aero\0mil.by\0"
+"nym.tw\0"
+"dnp\0"
+"mil.cl\0obama.fukui.jp\0otsu.shiga.jp\0press.se\0"
+"lib.ar.us\0"
+"mil.cn\0myhome-server.de\0"
+"mil.co\0"
+"malselv.no\0gent\0linkyard-cloud.ch\0"
+"karasjohka.no\0dog\0xx.gl\0"
+"inf.mk\0"
+"town.museum\0rad\xc3\xb8y.no\0bharti\0"
+"s\xc3\xb8r-aurdal.no\0"
+"is-a-bulls-fan.com\0"
+"deloitte\0gg.ax\0"
+"valle-aosta.it\0rich\0"
+"krasnodar.su\0"
+"\xe4\xba\xac\xe9\x83\xbd.jp\0"
+"como.it\0"
+"laquila.it\0musashimurayama.tokyo.jp\0"
+"mil.do\0tatebayashi.gunma.jp\0dot\0express\0"
+"bialowieza.pl\0"
+"mizunami.gifu.jp\0"
+"mil.ec\0yoro.gifu.jp\0sanok.pl\0"
+"toyota.aichi.jp\0hiranai.aomori.jp\0"
+"mil.eg\0higashikawa.hokkaido.jp\0is-an-artist.com\0"
+"boomla.net\0"
+"anpachi.gifu.jp\0"
+"trading\0"
+"ginowan.okinawa.jp\0\xe4\xbd\x9b\xe5\xb1\xb1\0"
+"\xd0\xb5\xd1\x8e\0dyndns.info\0"
+"from-ca.com\0"
+"co.ae\0logistics.aero\0komatsushima.tokushima.jp\0"
+"co.ag\0"
+"higashi.okinawa.jp\0"
+"mil.fj\0feste-ip.net\0"
+"sowa.ibaraki.jp\0"
+"rentals\0"
+"co.am\0dreamhosters.com\0"
+"co.ao\0szkola.pl\0eat\0"
+"southwest.museum\0is-an-accountant.com\0"
+"chikusei.ibaraki.jp\0gotemba.shizuoka.jp\0dynvpn.de\0"
+"co.bb\0gs.svalbard.no\0edu.scot\0"
+"co.at\0"
+"mil.ge\0"
};
static const quint16 tldChunkCount = 2;
-static const quint32 tldChunks[] = {65534, 107981};
+static const quint32 tldChunks[] = {65530, 108837};
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qcfsocketnotifier.cpp b/src/corelib/kernel/qcfsocketnotifier.cpp
index 920ec9cd86..13fe30d0cd 100644
--- a/src/corelib/kernel/qcfsocketnotifier.cpp
+++ b/src/corelib/kernel/qcfsocketnotifier.cpp
@@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE
Socket Notifiers
*************************************************************************/
void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CFDataRef,
- const void *, void *info)
+ const void *data, void *info)
{
QCFSocketNotifier *cfSocketNotifier = static_cast<QCFSocketNotifier *>(info);
@@ -61,7 +61,15 @@ void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CF
// notification after we've successfully disabled the CFSocket, but our Qt
// notifier is now gone. The upshot is we have to check the notifier
// every time.
- if (callbackType == kCFSocketReadCallBack) {
+ if (callbackType == kCFSocketConnectCallBack) {
+ // The data pointer will be non-null on connection error
+ if (data) {
+ if (socketInfo->readNotifier)
+ QCoreApplication::sendEvent(socketInfo->readNotifier, &notifierEvent);
+ if (socketInfo->writeNotifier)
+ QCoreApplication::sendEvent(socketInfo->writeNotifier, &notifierEvent);
+ }
+ } else if (callbackType == kCFSocketReadCallBack) {
if (socketInfo->readNotifier && socketInfo->readEnabled) {
socketInfo->readEnabled = false;
QCoreApplication::sendEvent(socketInfo->readNotifier, &notifierEvent);
@@ -152,7 +160,7 @@ void QCFSocketNotifier::registerSocketNotifier(QSocketNotifier *notifier)
// Create CFSocket, specify that we want both read and write callbacks (the callbacks
// are enabled/disabled later on).
- const int callbackTypes = kCFSocketReadCallBack | kCFSocketWriteCallBack;
+ const int callbackTypes = kCFSocketConnectCallBack | kCFSocketReadCallBack | kCFSocketWriteCallBack;
CFSocketContext context = {0, this, 0, 0, 0};
socketInfo->socket = CFSocketCreateWithNative(kCFAllocatorDefault, nativeSocket, callbackTypes, qt_mac_socket_callback, &context);
if (CFSocketIsValid(socketInfo->socket) == false) {
diff --git a/src/corelib/kernel/qcore_mac.mm b/src/corelib/kernel/qcore_mac.mm
index 4e13ba5262..7d696364e2 100644
--- a/src/corelib/kernel/qcore_mac.mm
+++ b/src/corelib/kernel/qcore_mac.mm
@@ -386,8 +386,8 @@ bool qt_apple_isSandboxed()
{
static bool isSandboxed = []() {
QCFType<SecStaticCodeRef> staticCode = nullptr;
- NSURL *bundleUrl = [[NSBundle mainBundle] bundleURL];
- if (SecStaticCodeCreateWithPath((__bridge CFURLRef)bundleUrl,
+ NSURL *executableUrl = NSBundle.mainBundle.executableURL;
+ if (SecStaticCodeCreateWithPath((__bridge CFURLRef)executableUrl,
kSecCSDefaultFlags, &staticCode) != errSecSuccess)
return false;
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 9385419015..d9c324f9f9 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -71,6 +71,7 @@
#include <qtcore_tracepoints_p.h>
#include <new>
+#include <mutex>
#include <ctype.h>
#include <limits.h>
@@ -390,8 +391,14 @@ void QObjectPrivate::ConnectionData::removeConnection(QObjectPrivate::Connection
Q_ASSERT(c != orphaned.loadRelaxed());
// add c to orphanedConnections
- c->nextInOrphanList = orphaned.loadRelaxed();
- orphaned.storeRelaxed(c);
+ Connection *o = nullptr;
+ /* No ABA issue here: When adding a node, we only care about the list head, it doesn't
+ * matter if the tail changes.
+ */
+ do {
+ o = orphaned.loadRelaxed();
+ c->nextInOrphanList = o;
+ } while (!orphaned.testAndSetRelease(o, c));
#ifndef QT_NO_DEBUG
found = false;
@@ -406,21 +413,32 @@ void QObjectPrivate::ConnectionData::removeConnection(QObjectPrivate::Connection
}
-void QObjectPrivate::ConnectionData::cleanOrphanedConnectionsImpl(QObject *sender)
+void QObjectPrivate::ConnectionData::cleanOrphanedConnectionsImpl(QObject *sender, LockPolicy lockPolicy)
{
+ QBasicMutex *senderMutex = signalSlotLock(sender);
ConnectionOrSignalVector *c = nullptr;
{
- QBasicMutexLocker l(signalSlotLock(sender));
+ std::unique_lock<QBasicMutex> lock(*senderMutex, std::defer_lock_t{});
+ if (lockPolicy == NeedToLock)
+ lock.lock();
if (ref.loadAcquire() > 1)
return;
// Since ref == 1, no activate() is in process since we locked the mutex. That implies,
// that nothing can reference the orphaned connection objects anymore and they can
// be safely deleted
- c = orphaned.loadRelaxed();
- orphaned.storeRelaxed(nullptr);
+ c = orphaned.fetchAndStoreRelaxed(nullptr);
+ }
+ if (c) {
+ // Deleting c might run arbitrary user code, so we must not hold the lock
+ if (lockPolicy == AlreadyLockedAndTemporarilyReleasingLock) {
+ senderMutex->unlock();
+ deleteOrphaned(c);
+ senderMutex->lock();
+ } else {
+ deleteOrphaned(c);
+ }
}
- deleteOrphaned(c);
}
void QObjectPrivate::ConnectionData::deleteOrphaned(QObjectPrivate::ConnectionOrSignalVector *o)
@@ -1022,7 +1040,7 @@ QObject::~QObject()
QBasicMutex *m = signalSlotLock(c->receiver.loadRelaxed());
bool needToUnlock = QOrderedMutexLocker::relock(signalSlotMutex, m);
- if (c->receiver.loadAcquire()) {
+ if (c == connectionList.first.loadAcquire() && c->receiver.loadAcquire()) {
cd->removeConnection(c);
Q_ASSERT(connectionList.first.loadRelaxed() != c);
}
@@ -1060,14 +1078,29 @@ QObject::~QObject()
}
senderData->removeConnection(node);
+ /*
+ When we unlock, another thread has the chance to delete/modify sender data.
+ Thus we need to call cleanOrphanedConnections before unlocking. We use the
+ variant of the function which assumes that the lock is already held to avoid
+ a deadlock.
+ We need to hold m, the sender lock. Considering that we might execute arbitrary user
+ code, we should already release the signalSlotMutex here – unless they are the same.
+ */
+ const bool locksAreTheSame = signalSlotMutex == m;
+ if (!locksAreTheSame)
+ locker.unlock();
+ senderData->cleanOrphanedConnections(
+ sender,
+ QObjectPrivate::ConnectionData::AlreadyLockedAndTemporarilyReleasingLock
+ );
if (needToUnlock)
m->unlock();
- if (slotObj) {
+ if (locksAreTheSame) // otherwise already unlocked
locker.unlock();
+ if (slotObj)
slotObj->destroyIfLastRef();
- locker.relock();
- }
+ locker.relock();
}
// invalidate all connections on the object and make sure
@@ -5106,12 +5139,18 @@ bool QObject::disconnect(const QMetaObject::Connection &connection)
connections = QObjectPrivate::get(c->sender)->connections.loadRelaxed();
Q_ASSERT(connections);
connections->removeConnection(c);
- }
-
- connections->cleanOrphanedConnections(c->sender);
- c->sender->disconnectNotify(QMetaObjectPrivate::signal(c->sender->metaObject(),
- c->signal_index));
+ c->sender->disconnectNotify(QMetaObjectPrivate::signal(c->sender->metaObject(), c->signal_index));
+ // We must not hold the receiver mutex, else we risk dead-locking; we also only need the sender mutex
+ // It is however vital to hold the senderMutex before calling cleanOrphanedConnections, as otherwise
+ // another thread might modify/delete the connection
+ if (receiverMutex != senderMutex) {
+ receiverMutex->unlock();
+ }
+ connections->cleanOrphanedConnections(c->sender, QObjectPrivate::ConnectionData::AlreadyLockedAndTemporarilyReleasingLock);
+ senderMutex->unlock(); // now both sender and receiver mutex have been manually unlocked
+ locker.dismiss(); // so we dismiss the QOrderedMutexLocker
+ }
const_cast<QMetaObject::Connection &>(connection).d_ptr = nullptr;
c->deref(); // has been removed from the QMetaObject::Connection object
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index 66c19d174e..0b827a52ca 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -268,7 +268,10 @@ public:
~ConnectionData()
{
- deleteOrphaned(orphaned.loadRelaxed());
+ Q_ASSERT(ref.loadRelaxed() == 0);
+ auto *c = orphaned.fetchAndStoreRelaxed(nullptr);
+ if (c)
+ deleteOrphaned(c);
SignalVector *v = signalVector.loadRelaxed();
if (v)
free(v);
@@ -277,12 +280,19 @@ public:
// must be called on the senders connection data
// assumes the senders and receivers lock are held
void removeConnection(Connection *c);
- void cleanOrphanedConnections(QObject *sender)
+ enum LockPolicy {
+ NeedToLock,
+ // Beware that we need to temporarily release the lock
+ // and thus calling code must carefully consider whether
+ // invariants still hold.
+ AlreadyLockedAndTemporarilyReleasingLock
+ };
+ void cleanOrphanedConnections(QObject *sender, LockPolicy lockPolicy = NeedToLock)
{
if (orphaned.loadRelaxed() && ref.loadAcquire() == 1)
- cleanOrphanedConnectionsImpl(sender);
+ cleanOrphanedConnectionsImpl(sender, lockPolicy);
}
- void cleanOrphanedConnectionsImpl(QObject *sender);
+ void cleanOrphanedConnectionsImpl(QObject *sender, LockPolicy lockPolicy);
ConnectionList &connectionsForSignal(int signal)
{
@@ -307,8 +317,14 @@ public:
signalVector.storeRelaxed(newVector);
if (vector) {
- vector->nextInOrphanList = orphaned.loadRelaxed();
- orphaned.storeRelaxed(ConnectionOrSignalVector::fromSignalVector(vector));
+ Connection *o = nullptr;
+ /* No ABA issue here: When adding a node, we only care about the list head, it doesn't
+ * matter if the tail changes.
+ */
+ do {
+ o = orphaned.loadRelaxed();
+ vector->nextInOrphanList = o;
+ } while (!orphaned.testAndSetRelease(o, ConnectionOrSignalVector::fromSignalVector(vector)));
}
}
int signalVectorCount() const {
diff --git a/src/corelib/text/qchar.cpp b/src/corelib/text/qchar.cpp
index 4a7af8971f..6e0bb3c10e 100644
--- a/src/corelib/text/qchar.cpp
+++ b/src/corelib/text/qchar.cpp
@@ -159,7 +159,7 @@ QT_BEGIN_NAMESPACE
call toLatin1() to get the 8-bit value back.
For more information see
- \l{http://www.unicode.org/ucd/}{"About the Unicode Character Database"}.
+ \l{https://www.unicode.org/ucd/}{"About the Unicode Character Database"}.
\sa Unicode, QString, QLatin1Char
*/
@@ -167,8 +167,8 @@ QT_BEGIN_NAMESPACE
/*!
\enum QChar::UnicodeVersion
- Specifies which version of the \l{http://www.unicode.org/}{Unicode standard}
- introduced a certain character.
+ Specifies which version of the \l{Unicode standard} introduced a certain
+ character.
\value Unicode_1_1 Version 1.1
\value Unicode_2_0 Version 2.0
@@ -279,7 +279,7 @@ QT_BEGIN_NAMESPACE
This enum type defines the Unicode script property values.
For details about the Unicode script property values see
- \l{http://www.unicode.org/reports/tr24/}{Unicode Standard Annex #24}.
+ \l{https://www.unicode.org/reports/tr24/}{Unicode Standard Annex #24}.
In order to conform to C/C++ naming conventions "Script_" is prepended
to the codes used in the Unicode Standard.
@@ -456,8 +456,8 @@ QT_BEGIN_NAMESPACE
\enum QChar::Direction
This enum type defines the Unicode direction attributes. See the
- \l{http://www.unicode.org/reports/tr9/tr9-35.html#Table_Bidirectional_Character_Types}{Unicode Standard} for a description
- of the values.
+ \l{https://www.unicode.org/reports/tr9/tr9-35.html#Table_Bidirectional_Character_Types}{Unicode
+ Standard} for a description of the values.
In order to conform to C/C++ naming conventions "Dir" is prepended
to the codes used in the Unicode Standard.
@@ -493,8 +493,7 @@ QT_BEGIN_NAMESPACE
\enum QChar::Decomposition
This enum type defines the Unicode decomposition attributes. See
- the \l{http://www.unicode.org/}{Unicode Standard} for a
- description of the values.
+ the \l{Unicode Standard} for a description of the values.
\value NoDecomposition
\value Canonical
@@ -523,7 +522,7 @@ QT_BEGIN_NAMESPACE
since 5.3
This enum type defines the Unicode joining type attributes. See the
- \l{http://www.unicode.org/}{Unicode Standard} for a description of the values.
+ \l{Unicode Standard} for a description of the values.
In order to conform to C/C++ naming conventions "Joining_" is prepended
to the codes used in the Unicode Standard.
@@ -562,8 +561,7 @@ QT_BEGIN_NAMESPACE
\internal
This enum type defines names for some of the Unicode combining
- classes. See the \l{http://www.unicode.org/}{Unicode Standard}
- for a description of the values.
+ classes. See the \l{Unicode Standard} for a description of the values.
\value Combining_Above
\value Combining_AboveAttached
@@ -1826,7 +1824,7 @@ inline bool operator<(const UCS2SurrogatePair &ligature, uint u1)
static uint inline ligatureHelper(uint u1, uint u2)
{
- if (u1 >= Hangul_LBase && u1 <= Hangul_SBase + Hangul_SCount) {
+ if (u1 >= Hangul_LBase && u1 < Hangul_SBase + Hangul_SCount) {
// compute Hangul syllable composition as per UAX #15
// hangul L-V pair
const uint LIndex = u1 - Hangul_LBase;
@@ -1839,7 +1837,7 @@ static uint inline ligatureHelper(uint u1, uint u2)
const uint SIndex = u1 - Hangul_SBase;
if (SIndex < Hangul_SCount && (SIndex % Hangul_TCount) == 0) {
const uint TIndex = u2 - Hangul_TBase;
- if (TIndex <= Hangul_TCount)
+ if (TIndex < Hangul_TCount && TIndex)
return u1 + TIndex;
}
}
diff --git a/src/corelib/text/qcollator.cpp b/src/corelib/text/qcollator.cpp
index 958216bde8..47f470fb43 100644
--- a/src/corelib/text/qcollator.cpp
+++ b/src/corelib/text/qcollator.cpp
@@ -72,12 +72,16 @@ QT_BEGIN_NAMESPACE
/*!
\since 5.13
- Constructs a QCollator using the system's default collation locale.
+ Constructs a QCollator using the default locale's collation locale.
- \sa setLocale(), QLocale::collation()
+ The system locale, when used as default locale, may have a collation locale
+ other than itself (e.g. on Unix, if LC_COLLATE is set differently to LANG in
+ the environment). All other locales are their own collation locales.
+
+ \sa setLocale(), QLocale::collation(), QLocale::setDefault()
*/
QCollator::QCollator()
- : d(new QCollatorPrivate(QLocale::system().collation()))
+ : d(new QCollatorPrivate(QLocale().collation()))
{
d->init();
}
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index 67b06f42f4..a859badb3c 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -337,22 +337,6 @@ QByteArray QLocalePrivate::bcp47Name(char separator) const
return localeId.withLikelySubtagsRemoved().name(separator);
}
-/*!
- \internal
- */
-QByteArray QLocalePrivate::rawName(char separator) const
-{
- QByteArrayList parts;
- if (m_data->m_language_id != QLocale::AnyLanguage)
- parts.append(languageCode().latin1());
- if (m_data->m_script_id != QLocale::AnyScript)
- parts.append(scriptCode().latin1());
- if (m_data->m_country_id != QLocale::AnyCountry)
- parts.append(countryCode().latin1());
-
- return parts.join(separator);
-}
-
static const QLocaleData *findLocaleDataById(const QLocaleId &localeId)
{
const uint idx = locale_index[localeId.language_id];
@@ -4554,13 +4538,8 @@ QStringList QLocale::uiLanguages() const
if (i < uiLanguages.size()) {
// Adding likely-adjusted forms to system locale's list.
// Name the locale is derived from:
- const QString &name = uiLanguages.at(i);
- prior = name.toLatin1();
- // Don't try to likely-adjust if construction's likely-adjustments
- // were so drastic the result doesn't match the prior name:
- if (locale.name() != name && locale.d->rawName() != prior)
- continue;
- // Insert just after prior:
+ prior = uiLanguages.at(i).toLatin1();
+ // Insert just after the entry we're supplementing:
j = i + 1;
} else {
// Plain locale, not system locale; just append.
diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h
index 149d2874e5..322eca4362 100644
--- a/src/corelib/text/qlocale_p.h
+++ b/src/corelib/text/qlocale_p.h
@@ -359,7 +359,6 @@ public:
quint16 countryId() const { return m_data->m_country_id; }
QByteArray bcp47Name(char separator = '-') const;
- QByteArray rawName(char separator = '-') const;
inline QLatin1String languageCode() const { return languageToCode(QLocale::Language(m_data->m_language_id)); }
inline QLatin1String scriptCode() const { return scriptToCode(QLocale::Script(m_data->m_script_id)); }
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp
index 3779b90d6f..3e88ab4859 100644
--- a/src/corelib/text/qstring.cpp
+++ b/src/corelib/text/qstring.cpp
@@ -4562,13 +4562,13 @@ int QString::lastIndexOf(const QRegularExpression &re, int from, QRegularExpress
return -1;
}
- int endpos = (from < 0) ? (size() + from + 1) : (from);
+ int endpos = (from < 0) ? (size() + from + 1) : (from + 1);
QRegularExpressionMatchIterator iterator = re.globalMatch(*this);
int lastIndex = -1;
while (iterator.hasNext()) {
QRegularExpressionMatch match = iterator.next();
int start = match.capturedStart();
- if (start <= endpos) {
+ if (start < endpos) {
lastIndex = start;
if (rmatch)
*rmatch = std::move(match);
@@ -7184,13 +7184,17 @@ QString QString::vasprintf(const char *cformat, va_list ap)
if (length_mod == lm_l) {
const ushort *buff = va_arg(ap, const ushort*);
const ushort *ch = buff;
- while (*ch != 0)
+ while (precision != 0 && *ch != 0) {
++ch;
+ --precision;
+ }
subst.setUtf16(buff, ch - buff);
- } else
+ } else if (precision == -1) {
subst = QString::fromUtf8(va_arg(ap, const char*));
- if (precision != -1)
- subst.truncate(precision);
+ } else {
+ const char *buff = va_arg(ap, const char*);
+ subst = QString::fromUtf8(buff, qstrnlen(buff, precision));
+ }
++c;
break;
}
@@ -8231,7 +8235,7 @@ QVector<QStringRef> QString::splitRef(const QRegularExpression &re, SplitBehavio
\value NormalizationForm_KC Compatibility Decomposition followed by Canonical Composition
\sa normalized(),
- {http://www.unicode.org/reports/tr15/}{Unicode Standard Annex #15}
+ {https://www.unicode.org/reports/tr15/}{Unicode Standard Annex #15}
*/
/*!
diff --git a/src/corelib/text/qt_attribution.json b/src/corelib/text/qt_attribution.json
index 05c088e923..64269b7083 100644
--- a/src/corelib/text/qt_attribution.json
+++ b/src/corelib/text/qt_attribution.json
@@ -30,7 +30,7 @@
world's languages, with the largest and most extensive standard repository of locale data
available.",
"Homepage": "http://cldr.unicode.org/",
- "Version": "v38",
+ "Version": "v39",
"License": "// as specified in https://spdx.org/licenses/Unicode-DFS-2016.html",
"License": "Unicode License Agreement - Data Files and Software (2016)",
"LicenseId": "Unicode-DFS-2016",
diff --git a/src/corelib/text/qtextboundaryfinder.cpp b/src/corelib/text/qtextboundaryfinder.cpp
index ebdba6b2c5..8ac56197d6 100644
--- a/src/corelib/text/qtextboundaryfinder.cpp
+++ b/src/corelib/text/qtextboundaryfinder.cpp
@@ -96,8 +96,8 @@ static void init(QTextBoundaryFinder::BoundaryType type, const QChar *chars, int
QTextBoundaryFinder allows to find Unicode text boundaries in a
string, accordingly to the Unicode text boundary specification (see
- \l{http://www.unicode.org/reports/tr14/}{Unicode Standard Annex #14} and
- \l{http://www.unicode.org/reports/tr29/}{Unicode Standard Annex #29}).
+ \l{https://www.unicode.org/reports/tr14/}{Unicode Standard Annex #14} and
+ \l{https://www.unicode.org/reports/tr29/}{Unicode Standard Annex #29}).
QTextBoundaryFinder can operate on a QString in four possible
modes depending on the value of \a BoundaryType.
@@ -108,17 +108,17 @@ static void init(QTextBoundaryFinder::BoundaryType type, const QChar *chars, int
for example form one grapheme cluster as the user thinks of them
as one character, yet it is in this case represented by two
unicode code points
- (see \l{http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries}).
+ (see \l{https://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries}).
Word boundaries are there to locate the start and end of what a
language considers to be a word
- (see \l{http://www.unicode.org/reports/tr29/#Word_Boundaries}).
+ (see \l{https://www.unicode.org/reports/tr29/#Word_Boundaries}).
Line break boundaries give possible places where a line break
might happen and sentence boundaries will show the beginning and
end of whole sentences
- (see \l{http://www.unicode.org/reports/tr29/#Sentence_Boundaries} and
- \l{http://www.unicode.org/reports/tr14/}).
+ (see \l{https://www.unicode.org/reports/tr29/#Sentence_Boundaries} and
+ \l{https://www.unicode.org/reports/tr14/}).
The first position in a string is always a valid boundary and
refers to the position before the first character. The last
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h
index bcdae24833..e4cc46e929 100644
--- a/src/corelib/thread/qfutureinterface.h
+++ b/src/corelib/thread/qfutureinterface.h
@@ -201,7 +201,7 @@ inline void QFutureInterface<T>::reportResult(const T *result, int index)
if (store.filterMode()) {
const int resultCountBefore = store.count();
store.addResult<T>(index, result);
- this->reportResultsReady(resultCountBefore, resultCountBefore + store.count());
+ this->reportResultsReady(resultCountBefore, store.count());
} else {
const int insertIndex = store.addResult<T>(index, result);
this->reportResultsReady(insertIndex, insertIndex + 1);
diff --git a/src/corelib/thread/qorderedmutexlocker_p.h b/src/corelib/thread/qorderedmutexlocker_p.h
index 83edfd5879..9a9aaefa02 100644
--- a/src/corelib/thread/qorderedmutexlocker_p.h
+++ b/src/corelib/thread/qorderedmutexlocker_p.h
@@ -74,6 +74,28 @@ public:
{
relock();
}
+
+ Q_DISABLE_COPY(QOrderedMutexLocker)
+
+ void swap(QOrderedMutexLocker &other) noexcept
+ {
+ qSwap(this->mtx1, other.mtx1);
+ qSwap(this->mtx2, other.mtx2);
+ qSwap(this->locked, other.locked);
+ }
+
+ QOrderedMutexLocker &operator=(QOrderedMutexLocker &&other) noexcept {
+ QOrderedMutexLocker moved(std::move(other));
+ swap(moved);
+ return *this;
+ }
+
+ QOrderedMutexLocker(QOrderedMutexLocker &&other) noexcept
+ : mtx1(std::exchange(other.mtx1, nullptr))
+ , mtx2(std::exchange(other.mtx2, nullptr))
+ , locked(std::exchange(other.locked, false))
+ {}
+
~QOrderedMutexLocker()
{
unlock();
@@ -88,6 +110,21 @@ public:
}
}
+ /*!
+ \internal
+ Can be called if the mutexes have been unlocked manually, and sets the
+ state of the QOrderedMutexLocker to unlocked.
+ The caller is expected to have unlocked both of them if they
+ are not the same. Calling this method when the QOrderedMutexLocker is
+ unlocked or when the provided mutexes have not actually been unlocked is
+ UB.
+ */
+ void dismiss()
+ {
+ Q_ASSERT(locked);
+ locked = false;
+ }
+
void unlock()
{
if (locked) {
@@ -153,11 +190,15 @@ private:
class QOrderedMutexLocker
{
public:
+ Q_DISABLE_COPY(QOrderedMutexLocker)
QOrderedMutexLocker(QBasicMutex *, QBasicMutex *) {}
+ QOrderedMutexLocker(QOrderedMutexLocker &&) = default;
+ QOrderedMutexLocker& operator=(QOrderedMutexLocker &&other) = default;
~QOrderedMutexLocker() {}
void relock() {}
void unlock() {}
+ void dismiss() {}
static bool relock(QBasicMutex *, QBasicMutex *) { return false; }
};
diff --git a/src/corelib/thread/qresultstore.cpp b/src/corelib/thread/qresultstore.cpp
index 0b82b938e1..069e2a7a07 100644
--- a/src/corelib/thread/qresultstore.cpp
+++ b/src/corelib/thread/qresultstore.cpp
@@ -185,6 +185,7 @@ int ResultStoreBase::addResult(int index, const void *result)
int ResultStoreBase::addResults(int index, const void *results, int vectorSize, int totalCount)
{
if (m_filterMode == false || vectorSize == totalCount) {
+ Q_ASSERT(vectorSize != 0);
ResultItem resultItem(results, vectorSize);
return insertResultItem(index, resultItem);
} else {
diff --git a/src/corelib/thread/qresultstore.h b/src/corelib/thread/qresultstore.h
index 7a65089396..f58341cdf0 100644
--- a/src/corelib/thread/qresultstore.h
+++ b/src/corelib/thread/qresultstore.h
@@ -151,12 +151,19 @@ public:
template <typename T>
int addResults(int index, const QVector<T> *results)
{
+ if (results->empty()) // reject if results are empty
+ return -1;
+
return addResults(index, new QVector<T>(*results), results->count(), results->count());
}
template <typename T>
int addResults(int index, const QVector<T> *results, int totalCount)
{
+ // reject if results are empty, and nothing is filtered away
+ if ((m_filterMode == false || results->count() == totalCount) && results->empty())
+ return -1;
+
if (m_filterMode == true && results->count() != totalCount && 0 == results->count())
return addResults(index, nullptr, 0, totalCount);
else
diff --git a/src/corelib/time/qdatetimeparser.cpp b/src/corelib/time/qdatetimeparser.cpp
index 540818fab4..c5e0493de5 100644
--- a/src/corelib/time/qdatetimeparser.cpp
+++ b/src/corelib/time/qdatetimeparser.cpp
@@ -1385,21 +1385,34 @@ QDateTimeParser::scanString(const QDateTime &defaultValue,
// If hour wasn't specified, check the default we're using exists on the
// given date (which might be a spring-forward, skipping an hour).
- if (parserType == QMetaType::QDateTime && !(isSet & HourSectionMask) && !when.isValid()) {
- qint64 msecs = when.toMSecsSinceEpoch();
- // Fortunately, that gets a useful answer, even though when is invalid ...
- const QDateTime replace =
+ if (!(isSet & HourSectionMask) && !when.isValid()) {
+ switch (parserType) {
+ case QMetaType::QDateTime: {
+ qint64 msecs = when.toMSecsSinceEpoch();
+ // Fortunately, that gets a useful answer, even though when is invalid ...
+ const QDateTime replace =
#if QT_CONFIG(timezone)
- tspec == Qt::TimeZone
- ? QDateTime::fromMSecsSinceEpoch(msecs, timeZone) :
+ tspec == Qt::TimeZone ? QDateTime::fromMSecsSinceEpoch(msecs, timeZone) :
#endif
- QDateTime::fromMSecsSinceEpoch(msecs, tspec, zoneOffset);
- const QTime tick = replace.time();
- if (replace.date() == date
- && (!(isSet & MinuteSection) || tick.minute() == minute)
- && (!(isSet & SecondSection) || tick.second() == second)
- && (!(isSet & MSecSection) || tick.msec() == msec)) {
- return StateNode(replace, state, padding, conflicts);
+ QDateTime::fromMSecsSinceEpoch(msecs, tspec, zoneOffset);
+ const QTime tick = replace.time();
+ if (replace.date() == date
+ && (!(isSet & MinuteSection) || tick.minute() == minute)
+ && (!(isSet & SecondSection) || tick.second() == second)
+ && (!(isSet & MSecSection) || tick.msec() == msec)) {
+ return StateNode(replace, state, padding, conflicts);
+ }
+ } break;
+ case QMetaType::QDate:
+ // Don't care about time, so just use start of day (and ignore spec):
+ return StateNode(date.startOfDay(Qt::UTC), state, padding, conflicts);
+ break;
+ case QMetaType::QTime:
+ // Don't care about date or spec, so pick a safe spec:
+ return StateNode(QDateTime(date, time, Qt::UTC), state, padding, conflicts);
+ default:
+ Q_UNREACHABLE();
+ return StateNode();
}
}
diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h
index 99068c01a3..68284fb916 100644
--- a/src/corelib/tools/qduplicatetracker_p.h
+++ b/src/corelib/tools/qduplicatetracker_p.h
@@ -64,11 +64,18 @@ QT_BEGIN_NAMESPACE
template <typename T, size_t Prealloc = 32>
class QDuplicateTracker {
#ifdef __cpp_lib_memory_resource
- char buffer[Prealloc * sizeof(T)];
+ struct node_guesstimate { void *next; size_t hash; T value; };
+ static constexpr size_t bufferSize(size_t N) {
+ return N * sizeof(void*) // bucket list
+ + N * sizeof(node_guesstimate); // nodes
+ }
+
+ char buffer[bufferSize(Prealloc)];
std::pmr::monotonic_buffer_resource res{buffer, sizeof buffer};
- std::pmr::unordered_set<T> set{&res};
+ std::pmr::unordered_set<T> set{Prealloc, &res};
#else
- QSet<T> set;
+ static QSet<T> makeQSet() { QSet<T> r; r.reserve(Prealloc); return r; }
+ QSet<T> set = makeQSet();
int setSize = 0;
#endif
Q_DISABLE_COPY_MOVE(QDuplicateTracker);
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index 790c187cb9..8abb57586b 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -1012,15 +1012,11 @@ std::shared_ptr<X> qobject_pointer_cast(std::shared_ptr<T> &&src)
using element_type = typename std::shared_ptr<X>::element_type;
auto castResult = qobject_cast<element_type *>(src.get());
if (castResult) {
- auto result = std::shared_ptr<X>(std::move(src), castResult);
-#if __cplusplus <= 201703L
// C++2a's move aliasing constructor will leave src empty.
// Before C++2a we don't really know if the compiler has support for it.
// The move aliasing constructor is the resolution for LWG2996,
// which does not impose a feature-testing macro. So: clear src.
- src.reset();
-#endif
- return result;
+ return std::shared_ptr<X>(qExchange(src, nullptr), castResult);
}
return std::shared_ptr<X>();
}
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index fd0c99c032..0110956b77 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -507,8 +507,8 @@ Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthA
int offset = int(before - ptr);
if (n != 0) {
+ const T copy(t); // `t` could alias an element in [begin(), end()[
resize(s + n);
- const T copy(t);
if (!QTypeInfoQuery<T>::isRelocatable) {
T *b = ptr + offset;
T *j = ptr + s;
diff --git a/src/gui/doc/snippets/code/src_gui_painting_qtransform.cpp b/src/gui/doc/snippets/code/src_gui_painting_qtransform.cpp
index 4acc2f12b7..149265c083 100644
--- a/src/gui/doc/snippets/code/src_gui_painting_qtransform.cpp
+++ b/src/gui/doc/snippets/code/src_gui_painting_qtransform.cpp
@@ -51,7 +51,7 @@
//! [0]
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
-if (is not affine) {
+if (!isAffine()) {
w' = m13*x + m23*y + m33
x' /= w'
y' /= w'
@@ -62,7 +62,7 @@ if (is not affine) {
//! [1]
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
-if (is not affine) {
+if (!isAffine()) {
w' = m13*x + m23*y + m33
x' /= w'
y' /= w'
@@ -73,7 +73,7 @@ if (is not affine) {
//! [2]
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
-if (is not affine) {
+if (!isAffine()) {
w' = m13*x + m23*y + m33
x' /= w'
y' /= w'
@@ -84,7 +84,7 @@ if (is not affine) {
//! [3]
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
-if (is not affine) {
+if (!isAffine()) {
w' = m13*x + m23*y + m33
x' /= w'
y' /= w'
diff --git a/src/gui/doc/snippets/transform/main.cpp b/src/gui/doc/snippets/transform/main.cpp
index e30a3b63bf..5120709aef 100644
--- a/src/gui/doc/snippets/transform/main.cpp
+++ b/src/gui/doc/snippets/transform/main.cpp
@@ -47,8 +47,12 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#include <QApplication>
+#include <QMath>
+#include <QPainter>
+#include <QVBoxLayout>
+#include <QWidget>
-#include <QtGui>
#include <cmath>
class SimpleTransformation : public QWidget
@@ -103,18 +107,15 @@ class BasicOperations : public QWidget
//! [2]
void BasicOperations::paintEvent(QPaintEvent *)
{
- double pi = 3.14;
-
- double a = pi/180 * 45.0;
+ const double a = qDegreesToRadians(45.0);
double sina = sin(a);
double cosa = cos(a);
- QTransform translationTransform(1, 0, 0, 1, 50.0, 50.0);
- QTransform rotationTransform(cosa, sina, -sina, cosa, 0, 0);
- QTransform scalingTransform(0.5, 0, 0, 1.0, 0, 0);
+ QTransform scale(0.5, 0, 0, 1.0, 0, 0);
+ QTransform rotate(cosa, sina, -sina, cosa, 0, 0);
+ QTransform translate(1, 0, 0, 1, 50.0, 50.0);
- QTransform transform;
- transform = scalingTransform * rotationTransform * translationTransform;
+ QTransform transform = scale * rotate * translate;
QPainter painter(this);
painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp
index bbf44a484f..2811d2e049 100644
--- a/src/gui/image/qpnghandler.cpp
+++ b/src/gui/image/qpnghandler.cpp
@@ -649,10 +649,10 @@ bool QPngHandlerPrivate::readPngHeader()
}
if (primaries.areValid()) {
colorSpace = QColorSpace(primaries.whitePoint, primaries.redPoint, primaries.greenPoint, primaries.bluePoint,
- QColorSpace::TransferFunction::Gamma, fileGamma);
+ QColorSpace::TransferFunction::Gamma, 1.0f / fileGamma);
} else {
colorSpace = QColorSpace(QColorSpace::Primaries::SRgb,
- QColorSpace::TransferFunction::Gamma, fileGamma);
+ QColorSpace::TransferFunction::Gamma, 1.0f / fileGamma);
}
colorSpaceState = GammaChrm;
}
diff --git a/src/gui/image/qxpmhandler.cpp b/src/gui/image/qxpmhandler.cpp
index 16fd78f25f..f78a7fee81 100644
--- a/src/gui/image/qxpmhandler.cpp
+++ b/src/gui/image/qxpmhandler.cpp
@@ -50,6 +50,7 @@
#include <qvariant.h>
#include <algorithm>
+#include <array>
QT_BEGIN_NAMESPACE
@@ -1056,15 +1057,23 @@ bool qt_read_xpm_image_or_array(QIODevice *device, const char * const * source,
return read_xpm_body(device, source, index, state, cpp, ncols, w, h, image);
}
-static const char* xpm_color_name(int cpp, int index)
+namespace {
+template <size_t N>
+struct CharBuffer : std::array<char, N>
+{
+ CharBuffer() {} // avoid value-initializing the whole array
+};
+}
+
+static const char* xpm_color_name(int cpp, int index, CharBuffer<5> && returnable = {})
{
- static char returnable[5];
static const char code[] = ".#abcdefghijklmnopqrstuvwxyzABCD"
"EFGHIJKLMNOPQRSTUVWXYZ0123456789";
// cpp is limited to 4 and index is limited to 64^cpp
if (cpp > 1) {
if (cpp > 2) {
if (cpp > 3) {
+ returnable[4] = '\0';
returnable[3] = code[index % 64];
index /= 64;
} else
@@ -1084,7 +1093,7 @@ static const char* xpm_color_name(int cpp, int index)
returnable[1] = '\0';
returnable[0] = code[index];
- return returnable;
+ return returnable.data();
}
@@ -1121,8 +1130,11 @@ static bool write_xpm_image(const QImage &sourceImage, QIODevice *device, const
++cpp;
// limit to 4 characters per pixel
// 64^4 colors is enough for a 4096x4096 image
- if (cpp > 4)
- break;
+ if (cpp > 4) {
+ qWarning("Qt does not support writing XPM images with more than "
+ "64^4 colors (requested: %d colors).", ncolors);
+ return false;
+ }
}
// write header
@@ -1150,16 +1162,7 @@ static bool write_xpm_image(const QImage &sourceImage, QIODevice *device, const
const QRgb *yp = reinterpret_cast<const QRgb *>(image.constScanLine(y));
for(x=0; x<w; x++) {
int color = (int)(*(yp + x));
- const QByteArray chars(xpm_color_name(cpp, colorMap[color]));
- line.append(chars[0]);
- if (cpp > 1) {
- line.append(chars[1]);
- if (cpp > 2) {
- line.append(chars[2]);
- if (cpp > 3)
- line.append(chars[3]);
- }
- }
+ line.append(xpm_color_name(cpp, colorMap[color]));
}
s << ',' << Qt::endl << '\"' << line << '\"';
}
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index a95331e246..439b1127a2 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -1316,7 +1316,10 @@ static void init_platform(const QString &pluginNamesWithArguments, const QString
}
#endif
- fontSmoothingGamma = QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::FontSmoothingGamma).toReal();
+ const auto platformIntegration = QGuiApplicationPrivate::platformIntegration();
+ fontSmoothingGamma = platformIntegration->styleHint(QPlatformIntegration::FontSmoothingGamma).toReal();
+ QCoreApplication::setAttribute(Qt::AA_DontShowShortcutsInContextMenus,
+ !platformIntegration->styleHint(QPlatformIntegration::ShowShortcutsInContextMenus).toBool());
}
static void init_plugins(const QList<QByteArray> &pluginList)
@@ -2156,7 +2159,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
processMouseEvent(e); // the original mouse event
return;
}
- if (mouseMove && !positionChanged) {
+ if (type == QEvent::MouseMove && !positionChanged) {
// On Windows, and possibly other platforms, a touchpad can send a mouse move
// that does not change position, between a press and a release. This may
// confuse applications, so we always filter out these mouse events for
diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp
index 927e9cb94a..2291bfe70f 100644
--- a/src/gui/kernel/qopenglcontext.cpp
+++ b/src/gui/kernel/qopenglcontext.cpp
@@ -1031,7 +1031,8 @@ bool QOpenGLContext::makeCurrent(QSurface *surface)
|| qstrcmp(rendererString, "GC800 core") == 0
|| qstrcmp(rendererString, "GC1000 core") == 0
|| strstr(rendererString, "GC2000") != nullptr
- || qstrcmp(rendererString, "Immersion.16") == 0;
+ || qstrcmp(rendererString, "Immersion.16") == 0
+ || qstrncmp(rendererString, "Apple Mx", 7) == 0;
}
needsWorkaroundSet = true;
}
diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp
index 5f15949c5b..67f013c82e 100644
--- a/src/gui/math3d/qquaternion.cpp
+++ b/src/gui/math3d/qquaternion.cpp
@@ -534,7 +534,11 @@ void QQuaternion::getEulerAngles(float *pitch, float *yaw, float *roll) const
zw /= lengthSquared;
}
- *pitch = std::asin(-2.0f * (yz - xw));
+ const float sinp = -2.0f * (yz - xw);
+ if (std::abs(sinp) >= 1.0f)
+ *pitch = std::copysign(M_PI_2, sinp);
+ else
+ *pitch = std::asin(sinp);
if (*pitch < M_PI_2) {
if (*pitch > -M_PI_2) {
*yaw = std::atan2(2.0f * (xz + yw), 1.0f - 2.0f * (xx + yy));
diff --git a/src/gui/opengl/qopenglpaintdevice.cpp b/src/gui/opengl/qopenglpaintdevice.cpp
index 3920a10467..9e7d2861fd 100644
--- a/src/gui/opengl/qopenglpaintdevice.cpp
+++ b/src/gui/opengl/qopenglpaintdevice.cpp
@@ -331,7 +331,7 @@ void QOpenGLPaintDevice::setDotsPerMeterX(qreal dpmx)
void QOpenGLPaintDevice::setDotsPerMeterY(qreal dpmy)
{
- d_ptr->dpmx = dpmy;
+ d_ptr->dpmy = dpmy;
}
/*!
diff --git a/src/gui/painting/qcolorspace.cpp b/src/gui/painting/qcolorspace.cpp
index 8b2ea4e04d..5977f8f8c5 100644
--- a/src/gui/painting/qcolorspace.cpp
+++ b/src/gui/painting/qcolorspace.cpp
@@ -146,13 +146,17 @@ QColorMatrix QColorSpacePrimaries::toXyzMatrix() const
QColorVector srcCone = abrad.map(wXyz);
QColorVector dstCone = abrad.map(wXyzD50);
- QColorMatrix wToD50 = { { dstCone.x / srcCone.x, 0, 0 },
- { 0, dstCone.y / srcCone.y, 0 },
- { 0, 0, dstCone.z / srcCone.z } };
+ if (srcCone.x && srcCone.y && srcCone.z) {
+ QColorMatrix wToD50 = { { dstCone.x / srcCone.x, 0, 0 },
+ { 0, dstCone.y / srcCone.y, 0 },
+ { 0, 0, dstCone.z / srcCone.z } };
- QColorMatrix chromaticAdaptation = abradinv * (wToD50 * abrad);
- toXyz = chromaticAdaptation * toXyz;
+ QColorMatrix chromaticAdaptation = abradinv * (wToD50 * abrad);
+ toXyz = chromaticAdaptation * toXyz;
+ } else {
+ toXyz.r = {0, 0, 0}; // set to invalid value
+ }
}
return toXyz;
diff --git a/src/gui/painting/qicc.cpp b/src/gui/painting/qicc.cpp
index 15e236ac9e..4651adbd2a 100644
--- a/src/gui/painting/qicc.cpp
+++ b/src/gui/painting/qicc.cpp
@@ -750,7 +750,7 @@ bool fromIccProfile(const QByteArray &data, QColorSpace *colorSpace)
QColorVector whitePoint;
if (!parseXyzData(data, tagIndex[Tag::wtpt], whitePoint))
return false;
- if (!qFuzzyCompare(whitePoint.y, 1.0f) || (1.0f + whitePoint.z - whitePoint.x) == 0.0f) {
+ if (!qFuzzyCompare(whitePoint.y, 1.0f) || (1.0f + whitePoint.z + whitePoint.x) == 0.0f) {
qCWarning(lcIcc) << "fromIccProfile: Invalid ICC profile - gray white-point not normalized";
return false;
}
diff --git a/src/gui/painting/qpagesize.h b/src/gui/painting/qpagesize.h
index 133274760f..5b53eae458 100644
--- a/src/gui/painting/qpagesize.h
+++ b/src/gui/painting/qpagesize.h
@@ -228,7 +228,7 @@ public:
};
QPageSize();
- explicit QPageSize(PageSizeId pageSizeId);
+ /*implicit*/ QPageSize(PageSizeId pageSizeId);
explicit QPageSize(const QSize &pointSize,
const QString &name = QString(),
SizeMatchPolicy matchPolicy = FuzzyMatch);
diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
index 5a6a2d84e9..6d887717b9 100644
--- a/src/gui/painting/qpaintengineex.cpp
+++ b/src/gui/painting/qpaintengineex.cpp
@@ -415,15 +415,15 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &inPen)
clipRect = xf.inverted().mapRect(QRectF(d->exDeviceRect));
}
// Check to avoid generating unwieldy amount of dashes that will not be visible anyway
- QRectF extentRect = cpRect & clipRect;
+ qreal pw = pen.widthF() ? pen.widthF() : 1;
+ QRectF extentRect = cpRect.adjusted(-pw, -pw, pw, pw) & clipRect;
qreal extent = qMax(extentRect.width(), extentRect.height());
qreal patternLength = 0;
const QVector<qreal> pattern = pen.dashPattern();
const int patternSize = qMin(pattern.size(), 32);
for (int i = 0; i < patternSize; i++)
patternLength += qMax(pattern.at(i), qreal(0));
- if (pen.widthF())
- patternLength *= pen.widthF();
+ patternLength *= pw;
if (qFuzzyIsNull(patternLength)) {
pen.setStyle(Qt::NoPen);
} else if (extent / patternLength > 10000) {
diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp
index 0952bd22fb..e86aff1cae 100644
--- a/src/gui/painting/qtransform.cpp
+++ b/src/gui/painting/qtransform.cpp
@@ -222,6 +222,7 @@ static void nanWarning(const char *func)
transformation is achieved by setting both the projection factors and
the scaling factors.
+ \section2 Combining Transforms
Here's the combined transformations example using basic matrix
operations:
@@ -232,6 +233,26 @@ static void nanWarning(const char *func)
\snippet transform/main.cpp 2
\endtable
+ The combined transform first scales each operand, then rotates it, and
+ finally translates it, just as in the order in which the product of its
+ factors is written. This means the point to which the transforms are
+ applied is implicitly multiplied on the left with the transform
+ to its right.
+
+ \section2 Relation to Matrix Notation
+ The matrix notation in QTransform is the transpose of a commonly-taught
+ convention which represents transforms and points as matrices and vectors.
+ That convention multiplies its matrix on the left and column vector to the
+ right. In other words, when several transforms are applied to a point, the
+ right-most matrix acts directly on the vector first. Then the next matrix
+ to the left acts on the result of the first operation - and so on. As a
+ result, that convention multiplies the matrices that make up a composite
+ transform in the reverse of the order in QTransform, as you can see in
+ \l {Combining Transforms}. Transposing the matrices, and combining them to
+ the right of a row vector that represents the point, lets the matrices of
+ transforms appear, in their product, in the order in which we think of the
+ transforms being applied to the point.
+
\sa QPainter, {Coordinate System}, {painting/affine}{Affine
Transformations Example}, {Transformations Example}
*/
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index bdbfcd7af4..b9095d45f6 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -414,6 +414,25 @@ void QtFontFamily::ensurePopulated()
Q_ASSERT_X(populated, Q_FUNC_INFO, qPrintable(name));
}
+/*!
+ \internal
+
+ Tests if the given family \a family supports writing system \a writingSystem,
+ including the special case for Han script mapping to several subsequent writing systems
+*/
+static bool familySupportsWritingSystem(QtFontFamily *family, size_t writingSystem)
+{
+ Q_ASSERT(family != nullptr);
+ Q_ASSERT(writingSystem != QFontDatabase::Any && writingSystem < QFontDatabase::WritingSystemsCount);
+
+ size_t ws = writingSystem;
+ do {
+ if ((family->writingSystems[ws] & QtFontFamily::Supported) != 0)
+ return true;
+ } while (writingSystem >= QFontDatabase::SimplifiedChinese && writingSystem <= QFontDatabase::Japanese && ++ws <= QFontDatabase::Japanese);
+
+ return false;
+}
struct FallbacksCacheKey {
QString family;
@@ -828,7 +847,7 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo
f->ensurePopulated();
- if (writingSystem > QFontDatabase::Any && f->writingSystems[writingSystem] != QtFontFamily::Supported)
+ if (writingSystem > QFontDatabase::Any && !familySupportsWritingSystem(f, writingSystem))
continue;
for (int j = 0; j < f->count; ++j) {
@@ -1273,8 +1292,10 @@ static int match(int script, const QFontDef &request,
test.family->ensurePopulated();
// Check if family is supported in the script we want
- if (writingSystem != QFontDatabase::Any && !(test.family->writingSystems[writingSystem] & QtFontFamily::Supported))
+ if (writingSystem != QFontDatabase::Any
+ && !familySupportsWritingSystem(test.family, writingSystem)) {
continue;
+ }
// as we know the script is supported, we can be sure
// to find a matching font here.
@@ -2895,10 +2916,8 @@ Q_GUI_EXPORT QStringList qt_sort_families_by_writing_system(QChar::Script script
}
uint order = i;
- if (testFamily == nullptr
- || (testFamily->writingSystems[writingSystem] & QtFontFamily::Supported) == 0) {
+ if (testFamily == nullptr || !familySupportsWritingSystem(testFamily, writingSystem))
order |= 1u << 31;
- }
supported.insert(order, family);
}
diff --git a/src/gui/text/qtextdocumentfragment.cpp b/src/gui/text/qtextdocumentfragment.cpp
index d7bc707491..2fdfcaa2d2 100644
--- a/src/gui/text/qtextdocumentfragment.cpp
+++ b/src/gui/text/qtextdocumentfragment.cpp
@@ -1296,5 +1296,6 @@ QTextDocumentFragment QTextDocumentFragment::fromHtml(const QString &html, const
return res;
}
-QT_END_NAMESPACE
#endif // QT_NO_TEXTHTMLPARSER
+
+QT_END_NAMESPACE
diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp
index 9d70873590..ba72e26c3f 100644
--- a/src/gui/text/qtextdocumentlayout.cpp
+++ b/src/gui/text/qtextdocumentlayout.cpp
@@ -2186,9 +2186,11 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
painter->setRenderHint(QPainter::Antialiasing);
+ const bool marker = bl.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker;
if (selectionFormat) {
painter->setPen(QPen(selectionFormat->foreground(), 0));
- painter->fillRect(r, selectionFormat->background());
+ if (!marker)
+ painter->fillRect(r, selectionFormat->background());
} else {
QBrush fg = charFormat.foreground();
if (fg == Qt::NoBrush)
@@ -2198,19 +2200,21 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
QBrush brush = context.palette.brush(QPalette::Text);
- bool marker = bl.blockFormat().marker() != QTextBlockFormat::MarkerType::NoMarker;
if (marker) {
int adj = fontMetrics.lineSpacing() / 6;
r.adjust(-adj, 0, -adj, 0);
+ const QRectF outer = r.adjusted(-adj, -adj, adj, adj);
+ if (selectionFormat)
+ painter->fillRect(outer, selectionFormat->background());
if (bl.blockFormat().marker() == QTextBlockFormat::MarkerType::Checked) {
- // ### Qt6: render with QStyle / PE_IndicatorCheckBox. We don't currently
+ // ### Qt7: render with QStyle / PE_IndicatorCheckBox. We don't currently
// have access to that here, because it would be a widget dependency.
painter->setPen(QPen(painter->pen().color(), 2));
painter->drawLine(r.topLeft(), r.bottomRight());
painter->drawLine(r.topRight(), r.bottomLeft());
painter->setPen(QPen(painter->pen().color(), 0));
}
- painter->drawRect(r.adjusted(-adj, -adj, adj, adj));
+ painter->drawRect(outer);
}
switch (style) {
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index 3edd8b4cc5..805ab87dd6 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -2190,10 +2190,15 @@ void QTextEngine::itemize() const
: formatCollection()->defaultFont().capitalization();
if (s) {
for (const auto &range : qAsConst(s->formats)) {
- if (range.start >= prevPosition && range.start < position && range.format.hasProperty(QTextFormat::FontCapitalization)) {
- itemizer.generate(prevPosition, range.start - prevPosition, capitalization);
- itemizer.generate(range.start, range.length, range.format.fontCapitalization());
- prevPosition = range.start + range.length;
+ if (range.start + range.length <= prevPosition || range.start >= position)
+ continue;
+ if (range.format.hasProperty(QTextFormat::FontCapitalization)) {
+ if (range.start > prevPosition)
+ itemizer.generate(prevPosition, range.start - prevPosition, capitalization);
+ int newStart = std::max(prevPosition, range.start);
+ int newEnd = std::min(position, range.start + range.length);
+ itemizer.generate(newStart, newEnd - newStart, range.format.fontCapitalization());
+ prevPosition = newEnd;
}
}
}
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 5ae41d9459..26ac37b016 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -1173,10 +1173,17 @@ void QTextLayout::draw(QPainter *p, const QPointF &pos, const QVector<FormatRang
QRectF fullLineRect(tl.rect());
fullLineRect.translate(position);
fullLineRect.setRight(QFIXED_MAX);
- if (!selectionEndInLine)
- region.addRect(clipIfValid(QRectF(lineRect.topRight(), fullLineRect.bottomRight()), clip));
- if (!selectionStartInLine)
- region.addRect(clipIfValid(QRectF(fullLineRect.topLeft(), lineRect.bottomLeft()), clip));
+
+ const bool rightToLeft = d->isRightToLeft();
+
+ if (!selectionEndInLine) {
+ region.addRect(clipIfValid(rightToLeft ? QRectF(fullLineRect.topLeft(), lineRect.bottomLeft())
+ : QRectF(lineRect.topRight(), fullLineRect.bottomRight()), clip));
+ }
+ if (!selectionStartInLine) {
+ region.addRect(clipIfValid(rightToLeft ? QRectF(lineRect.topRight(), fullLineRect.bottomRight())
+ : QRectF(fullLineRect.topLeft(), lineRect.bottomLeft()), clip));
+ }
} else if (!selectionEndInLine
&& isLastLineInBlock
&&!(d->option.flags() & QTextOption::ShowLineAndParagraphSeparators)) {
@@ -1980,7 +1987,8 @@ void QTextLine::layout_helper(int maxGlyphs)
if (lbh.currentPosition >= eng->layoutData->string.length()
|| isBreakableSpace
- || attributes[lbh.currentPosition].lineBreak) {
+ || attributes[lbh.currentPosition].lineBreak
+ || lbh.tmpData.textWidth >= QFIXED_MAX) {
sb_or_ws = true;
break;
} else if (attributes[lbh.currentPosition].graphemeBoundary) {
diff --git a/src/gui/util/qvalidator.cpp b/src/gui/util/qvalidator.cpp
index 86f4db5dbd..70ed6cca3d 100644
--- a/src/gui/util/qvalidator.cpp
+++ b/src/gui/util/qvalidator.cpp
@@ -84,8 +84,8 @@ QT_BEGIN_NAMESPACE
\list
\li For a line edit that accepts integers from 10 to 1000 inclusive,
- 42 and 123 are \l Acceptable, the empty string and 5 are \l
- Intermediate, and "asdf" and 1114 is \l Invalid.
+ 42 and 123 are \l Acceptable, the empty string, 5, or 1234 are \l
+ Intermediate, and "asdf" and 10114 is \l Invalid.
\li For an editable combobox that accepts URLs, any well-formed URL
is \l Acceptable, "http://example.com/," is \l Intermediate
diff --git a/src/network/access/http2/http2protocol_p.h b/src/network/access/http2/http2protocol_p.h
index b0af5aa919..ed5f2bf561 100644
--- a/src/network/access/http2/http2protocol_p.h
+++ b/src/network/access/http2/http2protocol_p.h
@@ -133,9 +133,6 @@ enum Http2PredefinedParameters
maxPayloadSize = (1 << 24) - 1, // HTTP/2 6.5.2
defaultSessionWindowSize = 65535, // HTTP/2 6.5.2
- // Using 1000 (rather arbitrarily), just to
- // impose *some* upper limit:
- maxPeerConcurrentStreams = 1000,
maxConcurrentStreams = 100 // HTTP/2, 6.5.2
};
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index f513139304..ddd661cc50 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -393,7 +393,8 @@ bool QHttp2ProtocolHandler::sendRequest()
initReplyFromPushPromise(message, key);
}
- const auto streamsToUse = std::min<quint32>(maxConcurrentStreams - activeStreams.size(),
+ const auto streamsToUse = std::min<quint32>(maxConcurrentStreams > quint32(activeStreams.size())
+ ? maxConcurrentStreams - quint32(activeStreams.size()) : 0,
requests.size());
auto it = requests.begin();
for (quint32 i = 0; i < streamsToUse; ++i) {
@@ -1084,13 +1085,8 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne
QMetaObject::invokeMethod(this, "resumeSuspendedStreams", Qt::QueuedConnection);
}
- if (identifier == Settings::MAX_CONCURRENT_STREAMS_ID) {
- if (newValue > maxPeerConcurrentStreams) {
- connectionError(PROTOCOL_ERROR, "SETTINGS invalid number of concurrent streams");
- return false;
- }
+ if (identifier == Settings::MAX_CONCURRENT_STREAMS_ID)
maxConcurrentStreams = newValue;
- }
if (identifier == Settings::MAX_FRAME_SIZE_ID) {
if (newValue < Http2::minPayloadLimit || newValue > Http2::maxPayloadSize) {
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index b093eec161..1bef9157e6 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -1120,31 +1120,50 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
int normalRequests = queuedRequests - preConnectRequests;
neededOpenChannels = qMax(normalRequests, preConnectRequests);
}
+
+ if (neededOpenChannels <= 0)
+ return;
+
+ QQueue<int> channelsToConnect;
+
+ // use previously used channels first
for (int i = 0; i < activeChannelCount && neededOpenChannels > 0; ++i) {
- bool connectChannel = false;
- if (channels[i].socket) {
- if ((channels[i].socket->state() == QAbstractSocket::ConnectingState)
- || (channels[i].socket->state() == QAbstractSocket::HostLookupState)
- || channels[i].pendingEncrypt) // pendingEncrypt == "EncryptingState"
- neededOpenChannels--;
-
- if (neededOpenChannels <= 0)
- break;
- if (!channels[i].reply && !channels[i].isSocketBusy() && (channels[i].socket->state() == QAbstractSocket::UnconnectedState))
- connectChannel = true;
- } else { // not previously used channel
- connectChannel = true;
+ if (!channels[i].socket)
+ continue;
+
+ if ((channels[i].socket->state() == QAbstractSocket::ConnectingState)
+ || (channels[i].socket->state() == QAbstractSocket::HostLookupState)
+ || channels[i].pendingEncrypt) { // pendingEncrypt == "EncryptingState"
+ neededOpenChannels--;
+ continue;
}
- if (connectChannel) {
- if (networkLayerState == IPv4)
- channels[i].networkLayerPreference = QAbstractSocket::IPv4Protocol;
- else if (networkLayerState == IPv6)
- channels[i].networkLayerPreference = QAbstractSocket::IPv6Protocol;
- channels[i].ensureConnection();
+ if (!channels[i].reply && !channels[i].isSocketBusy()
+ && (channels[i].socket->state() == QAbstractSocket::UnconnectedState)) {
+ channelsToConnect.enqueue(i);
neededOpenChannels--;
}
}
+
+ // use other channels
+ for (int i = 0; i < activeChannelCount && neededOpenChannels > 0; ++i) {
+ if (channels[i].socket)
+ continue;
+
+ channelsToConnect.enqueue(i);
+ neededOpenChannels--;
+ }
+
+ while (!channelsToConnect.isEmpty()) {
+ const int channel = channelsToConnect.dequeue();
+
+ if (networkLayerState == IPv4)
+ channels[channel].networkLayerPreference = QAbstractSocket::IPv4Protocol;
+ else if (networkLayerState == IPv6)
+ channels[channel].networkLayerPreference = QAbstractSocket::IPv6Protocol;
+
+ channels[channel].ensureConnection();
+ }
}
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 4e1aa541a8..7620ca1647 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -1286,6 +1286,10 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) {
// we call setSpdyWasUsed(true) on the replies in the SPDY handler when the request is sent
if (spdyRequestsToSend.count() > 0) {
+ // Similar to HTTP/1.1 counterpart below:
+ const auto &pairs = spdyRequestsToSend.values(); // (request, reply)
+ const auto &pair = pairs.first();
+ emit pair.second->encrypted();
// In case our peer has sent us its settings (window size, max concurrent streams etc.)
// let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection).
QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp
index 0fda4d8296..2a7f16637d 100644
--- a/src/network/access/qnetworkdiskcache.cpp
+++ b/src/network/access/qnetworkdiskcache.cpp
@@ -271,14 +271,12 @@ void QNetworkDiskCachePrivate::storeItem(QCacheItem *cacheItem)
Q_ASSERT(!fileName.isEmpty());
if (QFile::exists(fileName)) {
- if (!QFile::remove(fileName)) {
+ if (!removeFile(fileName)) {
qWarning() << "QNetworkDiskCache: couldn't remove the cache file " << fileName;
return;
}
}
- if (currentCacheSize > 0)
- currentCacheSize += 1024 + cacheItem->size();
currentCacheSize = q->expire();
if (!cacheItem->file) {
QString templateName = tmpCacheFileName();
diff --git a/src/network/access/qnetworkreplywasmimpl.cpp b/src/network/access/qnetworkreplywasmimpl.cpp
index 0fc5bbf5a8..505db44522 100644
--- a/src/network/access/qnetworkreplywasmimpl.cpp
+++ b/src/network/access/qnetworkreplywasmimpl.cpp
@@ -67,10 +67,6 @@ QNetworkReplyWasmImplPrivate::QNetworkReplyWasmImplPrivate()
QNetworkReplyWasmImplPrivate::~QNetworkReplyWasmImplPrivate()
{
- if (m_fetch) {
- emscripten_fetch_close(m_fetch);
- m_fetch = 0;
- }
}
QNetworkReplyWasmImpl::QNetworkReplyWasmImpl(QObject *parent)
@@ -115,12 +111,14 @@ void QNetworkReplyWasmImpl::close()
void QNetworkReplyWasmImpl::abort()
{
- Q_D( QNetworkReplyWasmImpl);
+ Q_D(QNetworkReplyWasmImpl);
if (d->state == QNetworkReplyPrivate::Finished || d->state == QNetworkReplyPrivate::Aborted)
return;
d->state = QNetworkReplyPrivate::Aborted;
- d->doAbort();
+ d->m_fetch->userData = nullptr;
+
+ d->emitReplyError(QNetworkReply::OperationCanceledError, QStringLiteral("Operation canceled"));
close();
}
@@ -198,11 +196,6 @@ void QNetworkReplyWasmImplPrivate::setReplyAttributes(quintptr data, int statusC
handler->q_func()->setAttribute(QNetworkRequest::HttpReasonPhraseAttribute, statusReason);
}
-void QNetworkReplyWasmImplPrivate::doAbort() const
-{
- emscripten_fetch_close(m_fetch);
-}
-
constexpr int getArraySize (int factor) {
return 2 * factor + 1;
}
@@ -283,7 +276,6 @@ void QNetworkReplyWasmImplPrivate::emitReplyError(QNetworkReply::NetworkError er
q->setError(errorCode, errorString);
emit q->errorOccurred(errorCode);
- emit q->finished();
}
void QNetworkReplyWasmImplPrivate::emitDataReadProgress(qint64 bytesReceived, qint64 bytesTotal)
@@ -316,6 +308,12 @@ void QNetworkReplyWasmImplPrivate::dataReceived(const QByteArray &buffer, int bu
downloadBuffer.append(buffer, bufferSize);
emit q->readyRead();
+
+ if (downloadBufferCurrentSize == totalDownloadSize) {
+ q->setFinished(true);
+ emit q->readChannelFinished();
+ emit q->finished();
+ }
}
//taken from qnetworkrequest.cpp
@@ -447,16 +445,14 @@ void QNetworkReplyWasmImplPrivate::_q_bufferOutgoingData()
void QNetworkReplyWasmImplPrivate::downloadSucceeded(emscripten_fetch_t *fetch)
{
- QNetworkReplyWasmImplPrivate *reply =
- reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
- if (reply) {
- QByteArray buffer(fetch->data, fetch->numBytes);
- reply->dataReceived(buffer, buffer.size());
+ auto reply = reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
+ if (!reply || reply->state == QNetworkReplyPrivate::Aborted)
+ return;
+ QByteArray buffer(fetch->data, fetch->numBytes);
+ reply->dataReceived(buffer, buffer.size());
- QByteArray statusText(fetch->statusText);
- reply->setStatusCode(fetch->status, statusText);
- reply->setReplyFinished();
- }
+ emscripten_fetch_close(fetch);
+ reply->m_fetch = nullptr;
}
void QNetworkReplyWasmImplPrivate::setStatusCode(int status, const QByteArray &statusText)
@@ -466,32 +462,29 @@ void QNetworkReplyWasmImplPrivate::setStatusCode(int status, const QByteArray &s
q->setAttribute(QNetworkRequest::HttpReasonPhraseAttribute, statusText);
}
-void QNetworkReplyWasmImplPrivate::setReplyFinished()
-{
- Q_Q(QNetworkReplyWasmImpl);
- q->setFinished(true);
- emit q->readChannelFinished();
- emit q->finished();
-}
-
void QNetworkReplyWasmImplPrivate::stateChange(emscripten_fetch_t *fetch)
{
- if (fetch->readyState == /*HEADERS_RECEIVED*/ 2) {
- size_t headerLength = emscripten_fetch_get_response_headers_length(fetch);
- QByteArray str(headerLength, Qt::Uninitialized);
- emscripten_fetch_get_response_headers(fetch, str.data(), str.size());
- QNetworkReplyWasmImplPrivate *reply =
- reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
- reply->headersReceived(str);
+ if (fetch) {
+ if (!quintptr(fetch->userData))
+ return;
+ auto reply = reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
+ if (reply->state != QNetworkReplyPrivate::Aborted) {
+ if (fetch->readyState == /*HEADERS_RECEIVED*/ 2) {
+ size_t headerLength = emscripten_fetch_get_response_headers_length(fetch);
+ QByteArray str(headerLength, Qt::Uninitialized);
+ emscripten_fetch_get_response_headers(fetch, str.data(), str.size());
+
+ reply->headersReceived(str);
+ }
+ }
}
}
void QNetworkReplyWasmImplPrivate::downloadProgress(emscripten_fetch_t *fetch)
{
- QNetworkReplyWasmImplPrivate *reply =
- reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
- Q_ASSERT(reply);
-
+ auto reply = reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
+ if (!reply || reply->state == QNetworkReplyPrivate::Aborted)
+ return;
if (fetch->status < 400) {
uint64_t bytes = fetch->dataOffset + fetch->numBytes;
uint64_t tBytes = fetch->totalBytes; // totalBytes can be 0 if server not reporting content length
@@ -503,10 +496,13 @@ void QNetworkReplyWasmImplPrivate::downloadProgress(emscripten_fetch_t *fetch)
void QNetworkReplyWasmImplPrivate::downloadFailed(emscripten_fetch_t *fetch)
{
- QNetworkReplyWasmImplPrivate *reply = reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
+
+ auto reply = reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fetch->userData);
+
if (reply) {
+
QString reasonStr;
- if (fetch->status > 600 || reply->state == QNetworkReplyPrivate::Aborted)
+ if (fetch->status > 600)
reasonStr = QStringLiteral("Operation canceled");
else
reasonStr = QString::fromUtf8(fetch->statusText);
@@ -514,10 +510,10 @@ void QNetworkReplyWasmImplPrivate::downloadFailed(emscripten_fetch_t *fetch)
QByteArray statusText(fetch->statusText);
reply->setStatusCode(fetch->status, statusText);
reply->emitReplyError(reply->statusCodeFromHttp(fetch->status, reply->request.url()), reasonStr);
+ reply->m_fetch = nullptr;
}
- if (fetch->status >= 400)
- emscripten_fetch_close(fetch); // Also free data on failure.
+ emscripten_fetch_close(fetch);
}
//taken from qhttpthreaddelegate.cpp
diff --git a/src/network/access/qnetworkreplywasmimpl_p.h b/src/network/access/qnetworkreplywasmimpl_p.h
index 53e9bc3375..db9fd5657e 100644
--- a/src/network/access/qnetworkreplywasmimpl_p.h
+++ b/src/network/access/qnetworkreplywasmimpl_p.h
@@ -137,8 +137,6 @@ public:
QSharedPointer<QRingBuffer> outgoingDataBuffer;
QByteArray requestData;
- void doAbort() const;
-
static void downloadProgress(emscripten_fetch_t *fetch);
static void downloadFailed(emscripten_fetch_t *fetch);
static void downloadSucceeded(emscripten_fetch_t *fetch);
diff --git a/src/network/doc/src/qtnetwork.qdoc b/src/network/doc/src/qtnetwork.qdoc
index 57b0210b7f..3bdfaf0027 100644
--- a/src/network/doc/src/qtnetwork.qdoc
+++ b/src/network/doc/src/qtnetwork.qdoc
@@ -43,7 +43,9 @@
Add \c network to the \c QT variable:
- \snippet snippets.pro 0
+ \code
+ QT += network
+ \endcode
\section1 Articles and Guides
diff --git a/src/network/doc/src/ssl.qdoc b/src/network/doc/src/ssl.qdoc
index e485a1b393..efe4111cfe 100644
--- a/src/network/doc/src/ssl.qdoc
+++ b/src/network/doc/src/ssl.qdoc
@@ -36,8 +36,8 @@
the Secure Sockets Layer (SSL) protocol, using the \l{OpenSSL Toolkit}
to perform encryption and protocol handling.
- From Qt version 5.6 onwards, the officially supported version for OpenSSL
- is 1.0.0 or later.
+ From Qt version 5.15 onwards, the officially supported version for OpenSSL
+ is 1.1.1 or later.
\annotatedlist ssl
diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp
index ca7680b71f..6629b7eace 100644
--- a/src/network/socket/qhttpsocketengine.cpp
+++ b/src/network/socket/qhttpsocketengine.cpp
@@ -645,7 +645,7 @@ void QHttpSocketEngine::slotSocketReadNotification()
d->socket->readAll();
//We're done with the reply and need to reset it for the next connection
delete d->reply;
- d->reply = new QHttpNetworkReply;
+ d->reply = new QHttpNetworkReply(QUrl(), this);
}
if (priv->phase == QAuthenticatorPrivate::Done)
diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp
index 43cb8c6de8..df54b6a0d5 100644
--- a/src/network/ssl/qsslkey_openssl.cpp
+++ b/src/network/ssl/qsslkey_openssl.cpp
@@ -348,7 +348,10 @@ static QByteArray doCrypt(QSslKeyPrivate::Cipher cipher, const QByteArray &data,
EVP_CIPHER_CTX *ctx = q_EVP_CIPHER_CTX_new();
q_EVP_CIPHER_CTX_reset(ctx);
- q_EVP_CipherInit(ctx, type, nullptr, nullptr, enc);
+ if (q_EVP_CipherInit(ctx, type, nullptr, nullptr, enc) != 1) {
+ QSslSocketBackendPrivate::logAndClearErrorQueue();
+ return QByteArray();
+ }
q_EVP_CIPHER_CTX_set_key_length(ctx, key.size());
if (cipher == QSslKeyPrivate::Rc2Cbc)
q_EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC2_KEY_BITS, 8 * key.size(), nullptr);
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 4108b70094..0d4e9fc1b6 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -493,7 +493,8 @@ QSurfaceFormat QGLFormat::toSurfaceFormat(const QGLFormat &format)
retFormat.setSamples(format.samples() == -1 ? 4 : format.samples());
if (format.stencil())
retFormat.setStencilBufferSize(format.stencilBufferSize() == -1 ? 1 : format.stencilBufferSize());
- retFormat.setSwapInterval(format.swapInterval());
+ if (format.swapInterval() >= 0)
+ retFormat.setSwapInterval(format.swapInterval());
retFormat.setStereo(format.stereo());
retFormat.setMajorVersion(format.majorVersion());
retFormat.setMinorVersion(format.minorVersion());
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 0d4bc288ea..159b490ce0 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -536,6 +536,11 @@ static void populateFromPattern(FcPattern *pattern)
}
+QFontconfigDatabase::~QFontconfigDatabase()
+{
+ FcConfigDestroy(FcConfigGetCurrent());
+}
+
void QFontconfigDatabase::populateFontDatabase()
{
FcInit();
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
index a7257c2f98..78d6eb9315 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
@@ -61,6 +61,7 @@ class QFontEngineFT;
class QFontconfigDatabase : public QFreeTypeFontDatabase
{
public:
+ ~QFontconfigDatabase() override;
void populateFontDatabase() override;
void invalidate() override;
QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) override;
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
index aa9d6fd47c..9b5b911543 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
@@ -1120,13 +1120,13 @@ static bool addFontToDatabase(QString familyName,
style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName));
// add fonts windows can generate for us:
- if (weight <= QFont::DemiBold)
+ if (weight <= QFont::DemiBold && styleName.isEmpty())
QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold,
style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName));
- if (style != QFont::StyleItalic)
+ if (style != QFont::StyleItalic && styleName.isEmpty())
QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, weight,
QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName));
- if (weight <= QFont::DemiBold && style != QFont::StyleItalic)
+ if (weight <= QFont::DemiBold && style != QFont::StyleItalic && styleName.isEmpty())
QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold,
QFont::StyleItalic, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName));
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
index c931b93089..5c2742d295 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
@@ -281,15 +281,15 @@ static bool addFontToDatabase(QString familyName,
antialias, scalable, size, fixed, writingSystems, createFontFile(value, index));
// add fonts windows can generate for us:
- if (weight <= QFont::DemiBold)
+ if (weight <= QFont::DemiBold && styleName.isEmpty())
QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, style, stretch,
antialias, scalable, size, fixed, writingSystems, createFontFile(value, index));
- if (style != QFont::StyleItalic)
+ if (style != QFont::StyleItalic && styleName.isEmpty())
QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, weight, QFont::StyleItalic, stretch,
antialias, scalable, size, fixed, writingSystems, createFontFile(value, index));
- if (weight <= QFont::DemiBold && style != QFont::StyleItalic)
+ if (weight <= QFont::DemiBold && style != QFont::StyleItalic && styleName.isEmpty())
QPlatformFontDatabase::registerFont(familyName, QString(), foundryName, QFont::Bold, QFont::StyleItalic, stretch,
antialias, scalable, size, fixed, writingSystems, createFontFile(value, index));
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
index 7cf62022e7..c2cba0140d 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
@@ -502,6 +502,7 @@ QT_WARNING_POP
void QWindowsFontEngineDirectWrite::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
QPainterPath *path, QTextItem::RenderFlags flags)
{
+ Q_UNUSED(flags);
QVarLengthArray<UINT16> glyphIndices(nglyphs);
QVarLengthArray<DWRITE_GLYPH_OFFSET> glyphOffsets(nglyphs);
QVarLengthArray<FLOAT> glyphAdvances(nglyphs);
@@ -521,7 +522,7 @@ void QWindowsFontEngineDirectWrite::addGlyphsToPath(glyph_t *glyphs, QFixedPoint
glyphOffsets.data(),
nglyphs,
false,
- flags & QTextItem::RightToLeft,
+ false,
&geometrySink
);
diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
index 4e9828663f..da5235e491 100644
--- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
@@ -71,10 +71,16 @@ void QComposeInputContext::ensureInitialized()
}
m_initialized = true;
- const char *locale = setlocale(LC_CTYPE, "");
- if (!locale)
- locale = setlocale(LC_CTYPE, nullptr);
- qCDebug(lcXkbCompose) << "detected locale (LC_CTYPE):" << locale;
+ // Get locale from user env settings, see also
+ // https://xkbcommon.org/doc/current/group__compose.html#compose-locale
+ const char *locale = getenv("LC_ALL");
+ if (!locale || !*locale)
+ locale = getenv("LC_CTYPE");
+ if (!locale || !*locale)
+ locale = getenv("LANG");
+ if (!locale || !*locale)
+ locale = "C";
+ qCDebug(lcXkbCompose) << "detected locale:" << locale;
m_composeTable = xkb_compose_table_new_from_locale(m_XkbContext, locale, XKB_COMPOSE_COMPILE_NO_FLAGS);
if (m_composeTable)
diff --git a/src/plugins/platforms/android/extract-dummy.cpp b/src/plugins/platforms/android/extract-dummy.cpp
index fdce8ec64c..8cd317be4d 100644
--- a/src/plugins/platforms/android/extract-dummy.cpp
+++ b/src/plugins/platforms/android/extract-dummy.cpp
@@ -44,8 +44,3 @@ extern "C" JNIEXPORT jintArray JNICALL Java_org_qtproject_qt5_android_ExtractSty
{
return 0;
}
-
-extern "C" JNIEXPORT jintArray JNICALL Java_org_qtproject_qt5_android_ExtractStyle_extractChunkInfo20(JNIEnv *, jobject, jbyteArray)
-{
- return 0;
-}
diff --git a/src/plugins/platforms/android/extract.cpp b/src/plugins/platforms/android/extract.cpp
index acffa353f1..6ce6153966 100644
--- a/src/plugins/platforms/android/extract.cpp
+++ b/src/plugins/platforms/android/extract.cpp
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
** Contact: https://www.qt.io/licensing/
**
@@ -123,20 +124,6 @@ extern "C" JNIEXPORT jintArray JNICALL Java_org_qtproject_qt5_android_ExtractSty
return result;
}
-extern "C" JNIEXPORT jintArray JNICALL Java_org_qtproject_qt5_android_ExtractStyle_extractChunkInfo20(JNIEnv * env, jobject obj, jbyteArray chunkObj)
-{
- size_t chunkSize = env->GetArrayLength(chunkObj);
- void* storage = alloca(chunkSize);
- env->GetByteArrayRegion(chunkObj, 0, chunkSize,
- reinterpret_cast<jbyte*>(storage));
-
- if (!env->ExceptionCheck())
- return Java_org_qtproject_qt5_android_ExtractStyle_extractNativeChunkInfo20(env, obj, long(storage));
- else
- env->ExceptionClear();
- return 0;
-}
-
static inline void fill9patchOffsets(Res_png_9patch20* patch) {
patch->xDivsOffset = sizeof(Res_png_9patch20);
patch->yDivsOffset = patch->xDivsOffset + (patch->numXDivs * sizeof(int32_t));
diff --git a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp
index 6bb3372380..6f25045ae7 100644
--- a/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp
+++ b/src/plugins/platforms/android/qandroidplatformfiledialoghelper.cpp
@@ -147,10 +147,10 @@ QStringList nameFilterExtensions(const QString nameFilters)
{
QStringList ret;
#if QT_CONFIG(regularexpression)
- QRegularExpression re("(\\*\\.?\\w*)");
+ QRegularExpression re("(\\*\\.[a-z .]+)");
QRegularExpressionMatchIterator i = re.globalMatch(nameFilters);
while (i.hasNext())
- ret << i.next().captured(1);
+ ret << i.next().captured(1).trimmed();
#endif // QT_CONFIG(regularexpression)
ret.removeAll("*");
return ret;
@@ -159,23 +159,24 @@ QStringList nameFilterExtensions(const QString nameFilters)
void QAndroidPlatformFileDialogHelper::setMimeTypes()
{
QStringList mimeTypes = options()->mimeTypeFilters();
- const QString nameFilter = options()->initiallySelectedNameFilter();
+ const QStringList nameFilters = options()->nameFilters();
+ const QString nameFilter = nameFilters.isEmpty() ? QString() : nameFilters.first();
- if (mimeTypes.isEmpty() && !nameFilter.isEmpty()) {
+ if (!nameFilter.isEmpty()) {
QMimeDatabase db;
for (const QString &filter : nameFilterExtensions(nameFilter))
- mimeTypes.append(db.mimeTypeForFile(filter).name());
+ mimeTypes.append(db.mimeTypeForFile(filter, QMimeDatabase::MatchExtension).name());
}
- QString type = !mimeTypes.isEmpty() ? mimeTypes.at(0) : QLatin1String("*/*");
+ const QString initialType = mimeTypes.size() == 1 ? mimeTypes.at(0) : QLatin1String("*/*");
m_intent.callObjectMethod("setType", "(Ljava/lang/String;)Landroid/content/Intent;",
- QJNIObjectPrivate::fromString(type).object());
+ QJNIObjectPrivate::fromString(initialType).object());
if (!mimeTypes.isEmpty()) {
const QJNIObjectPrivate extraMimeType = QJNIObjectPrivate::getStaticObjectField(
JniIntentClass, "EXTRA_MIME_TYPES", "Ljava/lang/String;");
- QJNIObjectPrivate mimeTypesArray = QJNIObjectPrivate::callStaticObjectMethod(
+ const QJNIObjectPrivate mimeTypesArray = QJNIObjectPrivate::callStaticObjectMethod(
"org/qtproject/qt5/android/QtNative",
"getStringArray",
"(Ljava/lang/String;)[Ljava/lang/String;",
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
index ad40c6b0cb..e1f664c9da 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
@@ -246,7 +246,7 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
return iface->text(QAccessible::Name).toNSString();
}
-- (BOOL) accessibilityEnabledAttribute {
+- (BOOL) isAccessibilityEnabled {
QAccessibleInterface *iface = QAccessible::accessibleInterface(axid);
if (!iface || !iface->isValid())
return false;
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm
index e88cc54143..68af82b5cd 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenu.mm
@@ -290,31 +290,26 @@ void QCocoaMenu::syncSeparatorsCollapsible(bool enable)
QMacAutoReleasePool pool;
if (enable) {
bool previousIsSeparator = true; // setting to true kills all the separators placed at the top.
- NSMenuItem *previousItem = nil;
+ NSMenuItem *lastVisibleItem = nil;
for (NSMenuItem *item in m_nativeMenu.itemArray) {
if (item.separatorItem) {
// hide item if previous was a separator, or if it's explicitly hidden
- bool itemVisible = !previousIsSeparator;
- if (auto *cocoaItem = qt_objc_cast<QCocoaNSMenuItem *>(item).platformMenuItem) {
- cocoaItem->setVisible(!previousIsSeparator && cocoaItem->isVisible());
- itemVisible = cocoaItem->isVisible();
- }
- item.hidden = !itemVisible;
+ bool hideItem = previousIsSeparator;
+ if (auto *cocoaItem = qt_objc_cast<QCocoaNSMenuItem *>(item).platformMenuItem)
+ hideItem = previousIsSeparator || !cocoaItem->isVisible();
+ item.hidden = hideItem;
}
if (!item.hidden) {
- previousItem = item;
- previousIsSeparator = previousItem.separatorItem;
+ lastVisibleItem = item;
+ previousIsSeparator = lastVisibleItem.separatorItem;
}
}
// We now need to check the final item since we don't want any separators at the end of the list.
- if (previousItem && previousIsSeparator) {
- if (auto *cocoaItem = qt_objc_cast<QCocoaNSMenuItem *>(previousItem).platformMenuItem)
- cocoaItem->setVisible(false);
- previousItem.hidden = YES;
- }
+ if (lastVisibleItem && lastVisibleItem.separatorItem)
+ lastVisibleItem.hidden = YES;
} else {
for (auto *item : qAsConst(m_menuItems)) {
if (!item->isSeparator())
diff --git a/src/plugins/platforms/cocoa/qcocoascreen.h b/src/plugins/platforms/cocoa/qcocoascreen.h
index dcf6f1c753..93dff027a6 100644
--- a/src/plugins/platforms/cocoa/qcocoascreen.h
+++ b/src/plugins/platforms/cocoa/qcocoascreen.h
@@ -45,6 +45,7 @@
#include "qcocoacursor.h"
#include <qpa/qplatformintegration.h>
+#include <QtCore/private/qcore_mac_p.h>
QT_BEGIN_NAMESPACE
@@ -96,8 +97,8 @@ private:
static void updateScreens();
static void cleanupScreens();
- static bool updateScreensIfNeeded();
- static NSArray *s_screenConfigurationBeforeUpdate;
+ static QMacNotificationObserver s_screenParameterObserver;
+ static CGDisplayReconfigurationCallBack s_displayReconfigurationCallBack;
static void add(CGDirectDisplayID displayId);
QCocoaScreen(CGDirectDisplayID displayId);
diff --git a/src/plugins/platforms/cocoa/qcocoascreen.mm b/src/plugins/platforms/cocoa/qcocoascreen.mm
index 6a3172fb19..581ea01fcc 100644
--- a/src/plugins/platforms/cocoa/qcocoascreen.mm
+++ b/src/plugins/platforms/cocoa/qcocoascreen.mm
@@ -72,91 +72,33 @@ namespace CoreGraphics {
Q_ENUM_NS(DisplayChange)
}
-NSArray *QCocoaScreen::s_screenConfigurationBeforeUpdate = nil;
+QMacNotificationObserver QCocoaScreen::s_screenParameterObserver;
+CGDisplayReconfigurationCallBack QCocoaScreen::s_displayReconfigurationCallBack = nullptr;
void QCocoaScreen::initializeScreens()
{
updateScreens();
- CGDisplayRegisterReconfigurationCallback([](CGDirectDisplayID displayId, CGDisplayChangeSummaryFlags flags, void *userInfo) {
+ s_displayReconfigurationCallBack = [](CGDirectDisplayID displayId, CGDisplayChangeSummaryFlags flags, void *userInfo) {
Q_UNUSED(userInfo);
- // Displays are reconfigured in batches, and we want to update our screens
- // once a batch ends, so that all the states of the displays are up to date.
- static int displayReconfigurationsInProgress = 0;
-
const bool beforeReconfigure = flags & kCGDisplayBeginConfigurationFlag;
- qCDebug(lcQpaScreen).verbosity(0).nospace() << "Display " << displayId
- << (beforeReconfigure ? " about to reconfigure" : " was ")
- << QFlags<CoreGraphics::DisplayChange>(flags)
- << " with " << displayReconfigurationsInProgress
- << " display configuration(s) in progress";
-
- if (!flags) {
- // CGDisplayRegisterReconfigurationCallback has been observed to be called
- // with flags unset. This seems like a bug. The callback is not paired with
- // a matching "completion" callback either, so we don't know whether to treat
- // it as a begin or end of reconfigure.
- return;
- }
-
- if (beforeReconfigure) {
- if (!displayReconfigurationsInProgress++) {
- // There might have been a screen reconfigure before this that
- // we didn't process yet, so do that now if that's the case.
- updateScreensIfNeeded();
-
- Q_ASSERT(!s_screenConfigurationBeforeUpdate);
- s_screenConfigurationBeforeUpdate = NSScreen.screens;
- qCDebug(lcQpaScreen, "Display reconfigure transaction started"
- " with screen configuration %p", s_screenConfigurationBeforeUpdate);
-
- static void (^tryScreenUpdate)();
- tryScreenUpdate = ^void () {
- qCDebug(lcQpaScreen) << "Attempting screen update from runloop block";
- if (!updateScreensIfNeeded())
- CFRunLoopPerformBlock(CFRunLoopGetMain(), kCFRunLoopCommonModes, tryScreenUpdate);
- };
- CFRunLoopPerformBlock(CFRunLoopGetMain(), kCFRunLoopCommonModes, tryScreenUpdate);
- }
- } else {
- Q_ASSERT_X(displayReconfigurationsInProgress, "QCococaScreen",
- "Display configuration transactions are expected to be balanced");
+ qCDebug(lcQpaScreen).verbosity(0) << "Display" << displayId
+ << (beforeReconfigure ? "beginning" : "finished") << "reconfigure"
+ << QFlags<CoreGraphics::DisplayChange>(flags);
- if (!--displayReconfigurationsInProgress) {
- qCDebug(lcQpaScreen) << "Display reconfigure transaction completed";
- // We optimistically update now, in case the NSScreens have changed
- updateScreensIfNeeded();
- }
- }
- }, nullptr);
+ if (!beforeReconfigure)
+ updateScreens();
+ };
+ CGDisplayRegisterReconfigurationCallback(s_displayReconfigurationCallBack, nullptr);
- static QMacNotificationObserver screenParameterObserver(NSApplication.sharedApplication,
+ s_screenParameterObserver = QMacNotificationObserver(NSApplication.sharedApplication,
NSApplicationDidChangeScreenParametersNotification, [&]() {
qCDebug(lcQpaScreen) << "Received screen parameter change notification";
- updateScreensIfNeeded(); // As a last resort we update screens here
+ updateScreens();
});
}
-bool QCocoaScreen::updateScreensIfNeeded()
-{
- if (!s_screenConfigurationBeforeUpdate) {
- qCDebug(lcQpaScreen) << "QScreens have already been updated, all good";
- return true;
- }
-
- if (s_screenConfigurationBeforeUpdate == NSScreen.screens) {
- qCDebug(lcQpaScreen) << "Still waiting for NSScreen configuration change";
- return false;
- }
-
- qCDebug(lcQpaScreen, "NSScreen configuration changed to %p", NSScreen.screens);
- updateScreens();
-
- s_screenConfigurationBeforeUpdate = nil;
- return true;
-}
-
/*
Update the list of available QScreens, and the properties of existing screens.
@@ -239,6 +181,12 @@ void QCocoaScreen::cleanupScreens()
// Remove screens in reverse order to avoid crash in case of multiple screens
for (QScreen *screen : backwards(QGuiApplication::screens()))
static_cast<QCocoaScreen*>(screen->handle())->remove();
+
+ Q_ASSERT(s_displayReconfigurationCallBack);
+ CGDisplayRemoveReconfigurationCallback(s_displayReconfigurationCallBack, nullptr);
+ s_displayReconfigurationCallBack = nullptr;
+
+ s_screenParameterObserver.remove();
}
void QCocoaScreen::remove()
@@ -310,15 +258,18 @@ void QCocoaScreen::update(CGDirectDisplayID displayId)
Q_ASSERT(isOnline());
+ // Some properties are only available via NSScreen
+ NSScreen *nsScreen = nativeScreen();
+ if (!nsScreen) {
+ qCDebug(lcQpaScreen) << "Corresponding NSScreen not yet available. Deferring update";
+ return;
+ }
+
const QRect previousGeometry = m_geometry;
const QRect previousAvailableGeometry = m_availableGeometry;
const QDpi previousLogicalDpi = m_logicalDpi;
const qreal previousRefreshRate = m_refreshRate;
- // Some properties are only available via NSScreen
- NSScreen *nsScreen = nativeScreen();
- Q_ASSERT(nsScreen);
-
// The reference screen for the geometry is always the primary screen
QRectF primaryScreenGeometry = QRectF::fromCGRect(CGDisplayBounds(CGMainDisplayID()));
m_geometry = qt_mac_flip(QRectF::fromCGRect(nsScreen.frame), primaryScreenGeometry).toRect();
@@ -714,13 +665,17 @@ QList<QPlatformScreen*> QCocoaScreen::virtualSiblings() const
QCocoaScreen *QCocoaScreen::get(NSScreen *nsScreen)
{
- if (s_screenConfigurationBeforeUpdate) {
- qCWarning(lcQpaScreen) << "Trying to resolve screen while waiting for screen reconfigure!";
- if (!updateScreensIfNeeded())
- qCWarning(lcQpaScreen) << "Failed to do last minute screen update. Expect crashes.";
+ auto displayId = nsScreen.qt_displayId;
+ auto *cocoaScreen = get(displayId);
+ if (!cocoaScreen) {
+ qCWarning(lcQpaScreen) << "Failed to map" << nsScreen
+ << "to QCocoaScreen. Doing last minute update.";
+ updateScreens();
+ cocoaScreen = get(displayId);
+ if (!cocoaScreen)
+ qCWarning(lcQpaScreen) << "Last minute update failed!";
}
-
- return get(nsScreen.qt_displayId);
+ return cocoaScreen;
}
QCocoaScreen *QCocoaScreen::get(CGDirectDisplayID displayId)
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index 5be65f2141..ad3ebf61b4 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -522,7 +522,12 @@ NSUInteger QCocoaWindow::windowStyleMask(Qt::WindowFlags flags)
NSUInteger styleMask = (frameless || !resizable) ? NSWindowStyleMaskBorderless : NSWindowStyleMaskResizable;
if (frameless) {
- // No further customizations for frameless since there are no window decorations.
+ // Frameless windows do not display the traffic lights buttons for
+ // e.g. minimize, however StyleMaskMiniaturizable is required to allow
+ // programatic minimize. However, for framless tool windows (e.g. dock windows)
+ // we don't want that, as it breaks translucency.
+ if (type != Qt::Tool)
+ styleMask |= NSWindowStyleMaskMiniaturizable;
} else if (flags & Qt::CustomizeWindowHint) {
if (flags & Qt::WindowTitleHint)
styleMask |= NSWindowStyleMaskTitled;
@@ -1265,11 +1270,15 @@ void QCocoaWindow::windowDidChangeScreen()
return;
// Note: When a window is resized to 0x0 Cocoa will report the window's screen as nil
- auto *currentScreen = QCocoaScreen::get(m_view.window.screen);
+ NSScreen *nsScreen = m_view.window.screen;
+
+ qCDebug(lcQpaWindow) << window() << "did change" << nsScreen;
+ QCocoaScreen::updateScreens();
+
auto *previousScreen = static_cast<QCocoaScreen*>(screen());
+ auto *currentScreen = QCocoaScreen::get(nsScreen);
- Q_ASSERT_X(!m_view.window.screen || currentScreen,
- "QCocoaWindow", "Failed to get QCocoaScreen for NSScreen");
+ qCDebug(lcQpaWindow) << "Screen changed for" << window() << "from" << previousScreen << "to" << currentScreen;
// Note: The previous screen may be the same as the current screen, either because
// a) the screen was just reconfigured, which still results in AppKit sending an
@@ -1282,7 +1291,6 @@ void QCocoaWindow::windowDidChangeScreen()
// device-pixel ratio may have changed, and needs to be delivered to all
// windows, both top level and child windows.
- qCDebug(lcQpaWindow) << "Screen changed for" << window() << "from" << previousScreen << "to" << currentScreen;
QWindowSystemInterface::handleWindowScreenChanged<QWindowSystemInterface::SynchronousDelivery>(
window(), currentScreen ? currentScreen->screen() : nullptr);
@@ -1307,10 +1315,19 @@ void QCocoaWindow::windowWillClose()
bool QCocoaWindow::windowShouldClose()
{
qCDebug(lcQpaWindow) << "QCocoaWindow::windowShouldClose" << window();
+
// This callback should technically only determine if the window
// should (be allowed to) close, but since our QPA API to determine
// that also involves actually closing the window we do both at the
// same time, instead of doing the latter in windowWillClose.
+
+ // If the window is closed, we will release and deallocate the NSWindow.
+ // But frames higher up in the stack might still expect the window to
+ // be alive, since the windowShouldClose: callback is technically only
+ // supposed to answer YES or NO. To ensure the window is still alive
+ // we put an autorelease in the closest pool (typically the runloop).
+ [[m_view.window retain] autorelease];
+
return QWindowSystemInterface::handleCloseEvent<QWindowSystemInterface::SynchronousDelivery>(window());
}
diff --git a/src/plugins/platforms/cocoa/qnswindow.mm b/src/plugins/platforms/cocoa/qnswindow.mm
index 8967636fd2..1ce8ab5f53 100644
--- a/src/plugins/platforms/cocoa/qnswindow.mm
+++ b/src/plugins/platforms/cocoa/qnswindow.mm
@@ -104,7 +104,7 @@ static bool isMouseEvent(NSEvent *ev)
// Unfortunately there's no NSWindowListOrderedBackToFront,
// so we have to manually reverse the order using an array.
- NSMutableArray<NSWindow *> *windows = [NSMutableArray<NSWindow *> new];
+ NSMutableArray<NSWindow *> *windows = [[NSMutableArray<NSWindow *> new] autorelease];
[application enumerateWindowsWithOptions:NSWindowListOrderedFrontToBack
usingBlock:^(NSWindow *window, BOOL *) {
// For some reason AppKit will give us nil-windows, skip those
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm
index cd4af46ef7..e17da6cc06 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.mm
+++ b/src/plugins/platforms/ios/qiosviewcontroller.mm
@@ -246,6 +246,7 @@
@implementation QIOSViewController {
BOOL m_updatingProperties;
QMetaObject::Connection m_focusWindowChangeConnection;
+ QMetaObject::Connection m_appStateChangedConnection;
}
#ifndef Q_OS_TVOS
@@ -274,7 +275,7 @@
});
QIOSApplicationState *applicationState = &QIOSIntegration::instance()->applicationState;
- QObject::connect(applicationState, &QIOSApplicationState::applicationStateDidChange,
+ m_appStateChangedConnection = QObject::connect(applicationState, &QIOSApplicationState::applicationStateDidChange,
[self](Qt::ApplicationState oldState, Qt::ApplicationState newState) {
if (oldState == Qt::ApplicationSuspended && newState != Qt::ApplicationSuspended) {
// We may have ignored an earlier layout because the application was suspended,
@@ -294,6 +295,7 @@
- (void)dealloc
{
QObject::disconnect(m_focusWindowChangeConnection);
+ QObject::disconnect(m_appStateChangedConnection);
[super dealloc];
}
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
index 682b8c19c0..12bdc9e6b7 100644
--- a/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
@@ -132,22 +132,19 @@ void setVariantString(const QString &value, VARIANT *variant)
void rectToNativeUiaRect(const QRect &rect, const QWindow *w, UiaRect *uiaRect)
{
if (w && uiaRect) {
- const qreal factor = QHighDpiScaling::factor(w);
- uiaRect->left = qreal(rect.x()) * factor;
- uiaRect->top = qreal(rect.y()) * factor;
- uiaRect->width = qreal(rect.width()) * factor;
- uiaRect->height = qreal(rect.height()) * factor;
+ QRectF r = QHighDpi::toNativePixels(QRectF(rect), w);
+ uiaRect->left =r.x();
+ uiaRect->top = r.y();
+ uiaRect->width = r.width();
+ uiaRect->height = r.height();
}
}
// Scales a point from native coordinates, according to high dpi settings.
void nativeUiaPointToPoint(const UiaPoint &uiaPoint, const QWindow *w, QPoint *point)
{
- if (w && point) {
- const qreal factor = QHighDpiScaling::factor(w);
- point->setX(int(std::lround(uiaPoint.x / factor)));
- point->setY(int(std::lround(uiaPoint.y / factor)));
- }
+ if (w && point)
+ *point = QHighDpi::fromNativePixels(QPoint(uiaPoint.x, uiaPoint.y), w);
}
// Maps an accessibility role ID to an UI Automation control type ID.
diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp
index 0a4d675606..dabdfcb6c5 100644
--- a/src/plugins/platforms/xcb/qxcbclipboard.cpp
+++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp
@@ -835,6 +835,8 @@ QByteArray QXcbClipboard::clipboardReadIncrementalProperty(xcb_window_t win, xcb
alloc_error = buf.size() != nbytes+1;
}
+ QElapsedTimer timer;
+ timer.start();
for (;;) {
connection()->flush();
xcb_generic_event_t *ge = waitForClipboardEvent(win, XCB_PROPERTY_NOTIFY);
@@ -870,9 +872,11 @@ QByteArray QXcbClipboard::clipboardReadIncrementalProperty(xcb_window_t win, xcb
tmp_buf.resize(0);
offset += length;
}
- } else {
- break;
}
+
+ const auto elapsed = timer.elapsed();
+ if (elapsed > clipboard_timeout)
+ break;
}
// timed out ... create a new requestor window, otherwise the requestor
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp
index 9abdae6a7c..34fbc0b10b 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp
@@ -221,6 +221,12 @@ void QXcbConnection::printXcbEvent(const QLoggingCategory &log, const char *mess
}
#define CASE_PRINT_AND_RETURN(name) case name : PRINT_AND_RETURN(#name);
+#define XI_PRINT_AND_RETURN(name) { \
+ qCDebug(log, "%s | XInput Event(%s) | sequence: %d", message, name, sequence); \
+ return; \
+}
+#define XI_CASE_PRINT_AND_RETURN(name) case name : XI_PRINT_AND_RETURN(#name);
+
switch (response_type) {
CASE_PRINT_AND_RETURN( XCB_KEY_PRESS );
CASE_PRINT_AND_RETURN( XCB_KEY_RELEASE );
@@ -255,7 +261,44 @@ void QXcbConnection::printXcbEvent(const QLoggingCategory &log, const char *mess
CASE_PRINT_AND_RETURN( XCB_COLORMAP_NOTIFY );
CASE_PRINT_AND_RETURN( XCB_CLIENT_MESSAGE );
CASE_PRINT_AND_RETURN( XCB_MAPPING_NOTIFY );
- CASE_PRINT_AND_RETURN( XCB_GE_GENERIC );
+ case XCB_GE_GENERIC: {
+ if (hasXInput2() && isXIEvent(event)) {
+ auto *xiDeviceEvent = reinterpret_cast<const xcb_input_button_press_event_t*>(event); // qt_xcb_input_device_event_t
+ switch (xiDeviceEvent->event_type) {
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_KEY_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_KEY_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BUTTON_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BUTTON_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_MOTION );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_ENTER );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_LEAVE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_FOCUS_IN );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_FOCUS_OUT );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_HIERARCHY );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_PROPERTY );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_KEY_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_KEY_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_BUTTON_PRESS );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_BUTTON_RELEASE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_MOTION );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_BEGIN );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_UPDATE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_END );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_TOUCH_OWNERSHIP );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_TOUCH_BEGIN );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_TOUCH_UPDATE );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_RAW_TOUCH_END );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BARRIER_HIT );
+ XI_CASE_PRINT_AND_RETURN( XCB_INPUT_BARRIER_LEAVE );
+ default:
+ qCDebug(log, "%s | XInput Event(other type) | sequence: %d", message, sequence);
+ return;
+ }
+ } else {
+ qCDebug(log, "%s | %s(%d) | sequence: %d", message, "XCB_GE_GENERIC", response_type, sequence);
+ return;
+ }
+ }
}
// XFixes
if (isXFixesType(response_type, XCB_XFIXES_SELECTION_NOTIFY))
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 050182537d..da179591e9 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -564,6 +564,11 @@ void QXcbWindow::setGeometry(const QRect &rect)
{
QPlatformWindow::setGeometry(rect);
+ if (shouldDeferTask(Task::SetGeometry)) {
+ m_deferredGeometry = rect;
+ return;
+ }
+
propagateSizeHints();
QXcbScreen *currentScreen = xcbScreen();
@@ -688,6 +693,9 @@ void QXcbWindow::setVisible(bool visible)
void QXcbWindow::show()
{
+ if (shouldDeferTask(Task::Map))
+ return;
+
if (window()->isTopLevel()) {
// update WM_NORMAL_HINTS
@@ -738,6 +746,10 @@ void QXcbWindow::show()
void QXcbWindow::hide()
{
+ if (shouldDeferTask(Task::Unmap))
+ return;
+
+ m_wmStateValid = false;
xcb_unmap_window(xcb_connection(), m_window);
// send synthetic UnmapNotify event according to icccm 4.1.4
@@ -897,6 +909,9 @@ QXcbWindow::NetWmStates QXcbWindow::netWmStates()
void QXcbWindow::setWindowFlags(Qt::WindowFlags flags)
{
+ if (shouldDeferTask(Task::SetWindowFlags))
+ return;
+
Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask));
if (type == Qt::ToolTip)
@@ -926,6 +941,8 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags)
setTransparentForMouseEvents(flags & Qt::WindowTransparentForInput);
updateDoesNotAcceptFocus(flags & Qt::WindowDoesNotAcceptFocus);
+
+ m_isWmManagedWindow = !(flags & Qt::X11BypassWindowManagerHint);
}
void QXcbWindow::setMotifWmHints(Qt::WindowFlags flags)
@@ -1125,6 +1142,9 @@ void QXcbWindow::setWindowState(Qt::WindowStates state)
if (state == m_windowState)
return;
+ if (shouldDeferTask(Task::SetWindowState))
+ return;
+
// unset old state
if (m_windowState & Qt::WindowMinimized)
xcb_map_window(xcb_connection(), m_window);
@@ -1874,6 +1894,10 @@ void QXcbWindow::handleUnmapNotifyEvent(const xcb_unmap_notify_event_t *event)
if (event->window == m_window) {
m_mapped = false;
QWindowSystemInterface::handleExposeEvent(window(), QRegion());
+ if (!m_isWmManagedWindow) {
+ m_wmStateValid = true;
+ handleDeferredTasks();
+ }
}
}
@@ -2188,30 +2212,98 @@ void QXcbWindow::handleLeaveNotifyEvent(const xcb_leave_notify_event_t *event)
handleLeaveNotifyEvent(event->root_x, event->root_y, event->mode, event->detail, event->time);
}
+bool QXcbWindow::shouldDeferTask(Task task)
+{
+ if (m_wmStateValid)
+ return false;
+
+ m_deferredTasks.append(task);
+ return true;
+}
+
+void QXcbWindow::handleDeferredTasks()
+{
+ Q_ASSERT(m_wmStateValid == true);
+ if (m_deferredTasks.isEmpty())
+ return;
+
+ bool map = false;
+ bool unmap = false;
+
+ QVector<Task> tasks;
+ for (auto taskIt = m_deferredTasks.rbegin(); taskIt != m_deferredTasks.rend(); ++taskIt) {
+ if (!tasks.contains(*taskIt))
+ tasks.prepend(*taskIt);
+ }
+
+ for (Task task : tasks) {
+ switch (task) {
+ case Task::Map:
+ map = true;
+ unmap = false;
+ break;
+ case Task::Unmap:
+ unmap = true;
+ map = false;
+ break;
+ case Task::SetGeometry:
+ setGeometry(m_deferredGeometry);
+ break;
+ case Task::SetWindowFlags:
+ setWindowFlags(window()->flags());
+ break;
+ case Task::SetWindowState:
+ setWindowState(window()->windowState());
+ break;
+ }
+ }
+ m_deferredTasks.clear();
+
+ if (map) {
+ Q_ASSERT(unmap == false);
+ show();
+ }
+ if (unmap) {
+ Q_ASSERT(map == false);
+ hide();
+ }
+}
+
void QXcbWindow::handlePropertyNotifyEvent(const xcb_property_notify_event_t *event)
{
connection()->setTime(event->time);
- const bool propertyDeleted = event->state == XCB_PROPERTY_DELETE;
-
- if (event->atom == atom(QXcbAtom::_NET_WM_STATE) || event->atom == atom(QXcbAtom::WM_STATE)) {
- if (propertyDeleted)
+ const bool wmStateChanged = event->atom == atom(QXcbAtom::WM_STATE);
+ const bool netWmStateChanged = event->atom == atom(QXcbAtom::_NET_WM_STATE);
+ if (netWmStateChanged || wmStateChanged) {
+ if (wmStateChanged && !m_wmStateValid && m_isWmManagedWindow) {
+ // ICCCM 4.1.4
+ // Clients that want to re-use a client window (e.g. by mapping it again)
+ // after withdrawing it must wait for the withdrawal to be complete before
+ // proceeding. The preferred method for doing this is for clients to wait for
+ // a window manager to update or remove the WM_STATE property.
+ m_wmStateValid = true;
+ handleDeferredTasks();
+ }
+ if (event->state == XCB_PROPERTY_DELETE)
return;
- Qt::WindowStates newState = Qt::WindowNoState;
-
- if (event->atom == atom(QXcbAtom::WM_STATE)) { // WM_STATE: Quick check for 'Minimize'.
+ if (wmStateChanged) {
auto reply = Q_XCB_REPLY(xcb_get_property, xcb_connection(),
0, m_window, atom(QXcbAtom::WM_STATE),
XCB_ATOM_ANY, 0, 1024);
if (reply && reply->format == 32 && reply->type == atom(QXcbAtom::WM_STATE)) {
- const quint32 *data = (const quint32 *)xcb_get_property_value(reply.get());
- if (reply->length != 0)
- m_minimized = (data[0] == XCB_ICCCM_WM_STATE_ICONIC
- || (data[0] == XCB_ICCCM_WM_STATE_WITHDRAWN && m_minimized));
+ auto data = static_cast<const quint32 *>(xcb_get_property_value(reply.get()));
+ if (reply->length != 0) {
+ const bool changedToWithdrawn = data[0] == XCB_ICCCM_WM_STATE_WITHDRAWN;
+ const bool changedToIconic = data[0] == XCB_ICCCM_WM_STATE_ICONIC;
+ m_minimized = changedToIconic || (changedToWithdrawn && m_minimized);
+ }
}
}
+ // _NET_WM_STATE handling
+ Qt::WindowStates newState = Qt::WindowNoState;
const NetWmStates states = netWmStates();
// _NET_WM_STATE_HIDDEN should be set by the Window Manager to indicate that a window would
// not be visible on the screen if its desktop/viewport were active and its coordinates were
@@ -2233,7 +2325,6 @@ void QXcbWindow::handlePropertyNotifyEvent(const xcb_property_notify_event_t *ev
if ((m_windowState & Qt::WindowMinimized) && connection()->mouseGrabber() == this)
connection()->setMouseGrabber(nullptr);
}
- return;
} else if (event->atom == atom(QXcbAtom::_NET_FRAME_EXTENTS)) {
m_dirtyFrameMargins = true;
}
diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h
index 6f5c1f5ed9..55af9279b1 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.h
+++ b/src/plugins/platforms/xcb/qxcbwindow.h
@@ -74,6 +74,14 @@ public:
Q_DECLARE_FLAGS(NetWmStates, NetWmState)
+ enum Task {
+ Map,
+ Unmap,
+ SetGeometry,
+ SetWindowFlags,
+ SetWindowState
+ };
+
QXcbWindow(QWindow *window);
~QXcbWindow();
@@ -143,6 +151,9 @@ public:
QXcbWindow *toWindow() override;
+ bool shouldDeferTask(Task task);
+ void handleDeferredTasks();
+
void handleMouseEvent(xcb_timestamp_t time, const QPoint &local, const QPoint &global,
Qt::KeyboardModifiers modifiers, QEvent::Type type, Qt::MouseEventSource source);
@@ -281,6 +292,11 @@ protected:
int m_swapInterval = -1;
qreal m_sizeHintsScaleFactor = 1.0;
+
+ bool m_wmStateValid = true;
+ QVector<Task> m_deferredTasks;
+ bool m_isWmManagedWindow = true;
+ QRect m_deferredGeometry;
};
class QXcbForeignWindow : public QXcbWindow
diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
index a641935dc5..7ca055eea2 100644
--- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
+++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
@@ -158,6 +158,20 @@ static inline QVariant qDateTimeFromString(QString &val)
#endif
}
+// check if this client and server version of MySQL/MariaDB support prepared statements
+static inline bool checkPreparedQueries(MYSQL *mysql)
+{
+ std::unique_ptr<MYSQL_STMT, decltype(&mysql_stmt_close)> stmt(mysql_stmt_init(mysql), &mysql_stmt_close);
+ if (!stmt)
+ return false;
+
+ static const char dummyQuery[] = "SELECT ? + ?";
+ if (mysql_stmt_prepare(stmt.get(), dummyQuery, sizeof(dummyQuery) - 1))
+ return false;
+
+ return mysql_stmt_param_count(stmt.get()) == 2;
+}
+
class QMYSQLResultPrivate;
class QMYSQLResult : public QSqlResult
@@ -1371,8 +1385,7 @@ bool QMYSQLDriver::open(const QString& db,
}
#endif // MYSQL_VERSION_ID >= 50007
- d->preparedQuerysEnabled = mysql_get_client_version() >= 40108
- && mysql_get_server_version(d->mysql) >= 40100;
+ d->preparedQuerysEnabled = checkPreparedQueries(d->mysql);
#if QT_CONFIG(thread)
mysql_thread_init();
diff --git a/src/plugins/sqldrivers/oci/qsql_oci.cpp b/src/plugins/sqldrivers/oci/qsql_oci.cpp
index 8da9837a59..2b732ccf9b 100644
--- a/src/plugins/sqldrivers/oci/qsql_oci.cpp
+++ b/src/plugins/sqldrivers/oci/qsql_oci.cpp
@@ -224,6 +224,7 @@ public:
OCISvcCtx *svc;
OCIServer *srvhp;
OCISession *authp;
+ OCITrans *trans = nullptr;
OCIError *err;
bool transaction;
int serverVersion;
@@ -2296,11 +2297,12 @@ bool QOCIDriver::open(const QString & db,
r = OCIAttrSet(d->authp, OCI_HTYPE_SESSION, const_cast<ushort *>(password.utf16()),
password.length() * sizeof(QChar), OCI_ATTR_PASSWORD, d->err);
- OCITrans* trans;
- if (r == OCI_SUCCESS)
- r = OCIHandleAlloc(d->env, reinterpret_cast<void **>(&trans), OCI_HTYPE_TRANS, 0, 0);
+ if (r == OCI_SUCCESS) {
+ r = OCIHandleAlloc(d->env, reinterpret_cast<void **>(&d->trans), OCI_HTYPE_TRANS,
+ 0, nullptr);
+ }
if (r == OCI_SUCCESS)
- r = OCIAttrSet(d->svc, OCI_HTYPE_SVCCTX, trans, 0, OCI_ATTR_TRANS, d->err);
+ r = OCIAttrSet(d->svc, OCI_HTYPE_SVCCTX, d->trans, 0, OCI_ATTR_TRANS, d->err);
if (r == OCI_SUCCESS) {
if (user.isEmpty() && password.isEmpty())
@@ -2314,12 +2316,18 @@ bool QOCIDriver::open(const QString & db,
if (r != OCI_SUCCESS) {
setLastError(qMakeError(tr("Unable to logon"), QSqlError::ConnectionError, d->err));
setOpenError(true);
+ if (d->trans)
+ OCIHandleFree(d->trans, OCI_HTYPE_TRANS);
+ d->trans = nullptr;
if (d->authp)
OCIHandleFree(d->authp, OCI_HTYPE_SESSION);
- d->authp = 0;
+ d->authp = nullptr;
+ if (d->svc)
+ OCIHandleFree(d->svc, OCI_HTYPE_SVCCTX);
+ d->svc = nullptr;
if (d->srvhp)
OCIHandleFree(d->srvhp, OCI_HTYPE_SERVER);
- d->srvhp = 0;
+ d->srvhp = nullptr;
return false;
}
@@ -2357,12 +2365,14 @@ void QOCIDriver::close()
OCISessionEnd(d->svc, d->err, d->authp, OCI_DEFAULT);
OCIServerDetach(d->srvhp, d->err, OCI_DEFAULT);
+ OCIHandleFree(d->trans, OCI_HTYPE_TRANS);
+ d->trans = nullptr;
OCIHandleFree(d->authp, OCI_HTYPE_SESSION);
- d->authp = 0;
- OCIHandleFree(d->srvhp, OCI_HTYPE_SERVER);
- d->srvhp = 0;
+ d->authp = nullptr;
OCIHandleFree(d->svc, OCI_HTYPE_SVCCTX);
- d->svc = 0;
+ d->svc = nullptr;
+ OCIHandleFree(d->srvhp, OCI_HTYPE_SERVER);
+ d->srvhp = nullptr;
setOpen(false);
setOpenError(false);
}
diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
index 3ca793061c..36cb7e1a7b 100644
--- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
+++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
@@ -501,7 +501,7 @@ bool QSQLiteResult::exec()
if (paramCountIsValid) {
for (int i = 0; i < paramCount; ++i) {
res = SQLITE_OK;
- const QVariant value = values.at(i);
+ const QVariant &value = values.at(i);
if (value.isNull()) {
res = sqlite3_bind_null(d->stmt, i + 1);
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index ea43cfc826..2a37a951f4 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -1163,6 +1163,8 @@ static QStyleHelper::WidgetSizePolicy qt_aqua_guess_size(const QWidget *widg, QS
void QMacStylePrivate::drawFocusRing(QPainter *p, const QRectF &targetRect, int hMargin, int vMargin, const CocoaControl &cw) const
{
+ const bool isBigSurOrAbove = QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSBigSur;
+
QPainterPath focusRingPath;
focusRingPath.setFillRule(Qt::OddEvenFill);
@@ -1212,7 +1214,6 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRectF &targetRect, int
}
case Button_PullDown:
case Button_PushButton: {
- const bool isBigSurOrAbove = QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSBigSur;
QRectF focusRect;
auto *pb = static_cast<NSButton *>(cocoaControl(cw));
const QRectF frameRect = cw.adjustedControlFrame(targetRect.adjusted(hMargin, vMargin, -hMargin, -vMargin));
@@ -1243,11 +1244,16 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRectF &targetRect, int
}
case Button_PopupButton:
case SegmentedControl_Single: {
+ QRectF focusRect = targetRect;
+ if (isBigSurOrAbove)
+ focusRect.translate(0, -1.5);
+ else if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSCatalina)
+ focusRect.adjust(0, 0, 0, -1);
const qreal innerRadius = 4;
const qreal outerRadius = innerRadius + focusRingWidth;
- hOffset = targetRect.left();
- vOffset = targetRect.top();
- const auto innerRect = targetRect.translated(-targetRect.topLeft());
+ hOffset = focusRect.left();
+ vOffset = focusRect.top();
+ const auto innerRect = focusRect.translated(-focusRect.topLeft());
const auto outerRect = innerRect.adjusted(-hMargin, -vMargin, hMargin, vMargin);
focusRingPath.addRoundedRect(innerRect, innerRadius, innerRadius);
focusRingPath.addRoundedRect(outerRect, outerRadius, outerRadius);
diff --git a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
index 23ea4f65e7..11cffd8c0c 100644
--- a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
+++ b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
@@ -999,7 +999,7 @@ bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeDa
#endif
img = QImage(bufferPixels, bufferW, bufferH, format);
if (hasCorrectionFactor)
- img = img.scaled(w, h, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ img = img.scaled(img.size() * correctionFactor, Qt::KeepAspectRatio, Qt::SmoothTransformation);
img.setDevicePixelRatio(additionalDevicePixelRatio);
}
@@ -2498,7 +2498,7 @@ static void populateMdiButtonTheme(const QStyle *proxy, const QWidget *widget,
// Calculate an small (max 2), empirical correction factor for scaling up
// WP_MDICLOSEBUTTON, WP_MDIRESTOREBUTTON, WP_MDIMINBUTTON, which are too
// small on High DPI screens (QTBUG-75927).
-qreal mdiButtonCorrectionFactor(XPThemeData &theme, const QPaintDevice *pd = nullptr)
+static qreal mdiButtonCorrectionFactor(XPThemeData &theme, const QPaintDevice *pd = nullptr)
{
const auto dpr = pd ? pd->devicePixelRatioF() : qApp->devicePixelRatio();
const QSizeF nativeSize = QSizeF(theme.size()) / dpr;
diff --git a/src/printsupport/dialogs/qpagesetupdialog_win.cpp b/src/printsupport/dialogs/qpagesetupdialog_win.cpp
index 464381bbe4..d1a377d2de 100644
--- a/src/printsupport/dialogs/qpagesetupdialog_win.cpp
+++ b/src/printsupport/dialogs/qpagesetupdialog_win.cpp
@@ -134,10 +134,35 @@ int QPageSetupDialog::exec()
QDialog::setVisible(false);
if (result) {
engine->setGlobalDevMode(psd.hDevNames, psd.hDevMode);
- d->printer->setPageSize(QPageSize(QSizeF(psd.ptPaperSize.x / multiplier, psd.ptPaperSize.y / multiplier),
- layout.units() == QPageLayout::Inch ? QPageSize::Inch : QPageSize::Millimeter));
+ QPageSize pageSize;
+ // try to read orientation and paper size ID from the dialog's devmode struct
+ if (psd.hDevMode) {
+ DEVMODE *rDevmode = reinterpret_cast<DEVMODE*>(GlobalLock(psd.hDevMode));
+ if (rDevmode->dmFields & DM_ORIENTATION) {
+ layout.setOrientation(rDevmode->dmOrientation == DMORIENT_PORTRAIT
+ ? QPageLayout::Portrait : QPageLayout::Landscape);
+ }
+ if (rDevmode->dmFields & DM_PAPERSIZE)
+ pageSize = QPageSize::id(rDevmode->dmPaperSize);
+ GlobalUnlock(rDevmode);
+ }
+ // fall back to use our own matching, and assume that paper that's wider than long means landscape
+ if (!pageSize.isValid() || pageSize.id() == QPageSize::Custom) {
+ QSizeF unitSize(psd.ptPaperSize.x / multiplier, psd.ptPaperSize.y / multiplier);
+ if (unitSize.width() > unitSize.height()) {
+ layout.setOrientation(QPageLayout::Landscape);
+ unitSize.transpose();
+ } else {
+ layout.setOrientation(QPageLayout::Portrait);
+ }
+ pageSize = QPageSize(unitSize, layout.units() == QPageLayout::Inch
+ ? QPageSize::Inch : QPageSize::Millimeter);
+ }
+ layout.setPageSize(pageSize);
+
const QMarginsF margins(psd.rtMargin.left, psd.rtMargin.top, psd.rtMargin.right, psd.rtMargin.bottom);
- d->printer->setPageMargins(margins / multiplier, layout.units());
+ layout.setMargins(margins / multiplier);
+ d->printer->setPageLayout(layout);
// copy from our temp DEVMODE struct
if (!engine->globalDevMode() && hDevMode) {
diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp
index bf77666c41..c5b845f4ec 100644
--- a/src/printsupport/dialogs/qprintdialog_unix.cpp
+++ b/src/printsupport/dialogs/qprintdialog_unix.cpp
@@ -1184,6 +1184,8 @@ void QUnixPrintWidgetPrivate::updateWidget()
widget.printers->insertSeparator(widget.printers->count());
widget.printers->addItem(QPrintDialog::tr("Print to File (PDF)"));
filePrintersAdded = true;
+ if (widget.printers->count() == 1)
+ _q_printerChanged(0);
}
if (!printToFile && filePrintersAdded) {
widget.printers->removeItem(widget.printers->count()-1);
diff --git a/src/testlib/doc/src/qttestlib-manual.qdoc b/src/testlib/doc/src/qttestlib-manual.qdoc
index 8ff82ba28f..84781a6773 100644
--- a/src/testlib/doc/src/qttestlib-manual.qdoc
+++ b/src/testlib/doc/src/qttestlib-manual.qdoc
@@ -154,6 +154,12 @@
All labeled targets will be run when \c {test} target is called on the
command line.
+ \note On Android, if you have one connected device or emulator, tests will
+ run on that device. If you have more than one device connected, set the
+ environment variable \c {ANDROID_DEVICE_SERIAL} to the
+ \l {Android: Query for devices}{ADB serial number} of the device that
+ you want to run tests on.
+
There are several other advantages with CMake. For example, the result of
a test run can be published on a web server using CDash with virtually no
effort.
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index 2c0c21ff42..27a68fe9b5 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -306,10 +306,9 @@ bool Moc::parseEnum(EnumDef *def)
return IncludeState::NoInclude;
};
do {
+ handleInclude();
if (lookup() == RBRACE) // accept trailing comma
break;
- if ( handleInclude() == IncludeState::IncludeEnd)
- continue;
next(IDENTIFIER);
def->values += lexem();
handleInclude();
diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp
index c083b0eff1..68768b666e 100644
--- a/src/widgets/dialogs/qfilesystemmodel.cpp
+++ b/src/widgets/dialogs/qfilesystemmodel.cpp
@@ -726,6 +726,9 @@ QVariant QFileSystemModel::data(const QModelIndex &index, int role) const
switch (role) {
case Qt::EditRole:
+ if (index.column() == 0)
+ return d->name(index);
+ Q_FALLTHROUGH();
case Qt::DisplayRole:
switch (index.column()) {
case 0: return d->displayName(index);
diff --git a/src/widgets/doc/src/guibooks.qdoc b/src/widgets/doc/src/guibooks.qdoc
index 30ffd0b5ec..b245e09b5d 100644
--- a/src/widgets/doc/src/guibooks.qdoc
+++ b/src/widgets/doc/src/guibooks.qdoc
@@ -88,17 +88,4 @@
recognize, find and activate them. This book explains these goals
from scratch and how to reach them, both with single icons and icon
families. Some 500 examples are scattered throughout the text.
-
-
- \section1 Buying these Books from Amazon.com
-
- These books are made available in association with Amazon.com, our
- favorite online bookstore. Here is more information about
- \link http://www.amazon.com/exec/obidos/subst/help/shipping-policy.html/t
- Amazon.com's shipping options\endlink and its
- \link http://www.amazon.com/exec/obidos/subst/help/desk.html/t
- customer service.\endlink When you buy a book by following one of these
- links, Amazon.com gives about 15% of the purchase price to
- \link http://www.amnesty.org/ Amnesty International.\endlink
-
*/
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index 9472c57292..8411587bbe 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -2297,7 +2297,7 @@ void QGraphicsItem::setToolTip(const QString &toolTip)
If no cursor has been set, the cursor of the item beneath is used.
\sa setCursor(), hasCursor(), unsetCursor(), QWidget::cursor,
- QApplication::overrideCursor()
+ QGuiApplication::overrideCursor()
*/
QCursor QGraphicsItem::cursor() const
{
@@ -2317,7 +2317,7 @@ QCursor QGraphicsItem::cursor() const
If no cursor has been set, the cursor of the item beneath is used.
\sa cursor(), hasCursor(), unsetCursor(), QWidget::cursor,
- QApplication::overrideCursor()
+ QGuiApplication::overrideCursor()
*/
void QGraphicsItem::setCursor(const QCursor &cursor)
{
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp
index b8cc5621fb..1e5a6ccb63 100644
--- a/src/widgets/itemviews/qabstractitemview.cpp
+++ b/src/widgets/itemviews/qabstractitemview.cpp
@@ -87,6 +87,7 @@ QAbstractItemViewPrivate::QAbstractItemViewPrivate()
pressedModifiers(Qt::NoModifier),
pressedPosition(QPoint(-1, -1)),
pressedAlreadySelected(false),
+ releaseFromDoubleClick(false),
viewportEnteredNeeded(false),
state(QAbstractItemView::NoState),
stateBeforeAnimation(QAbstractItemView::NoState),
@@ -1899,6 +1900,8 @@ void QAbstractItemView::mouseMoveEvent(QMouseEvent *event)
void QAbstractItemView::mouseReleaseEvent(QMouseEvent *event)
{
Q_D(QAbstractItemView);
+ const bool releaseFromDoubleClick = d->releaseFromDoubleClick;
+ d->releaseFromDoubleClick = false;
QPoint pos = event->pos();
QPersistentModelIndex index = indexAt(pos);
@@ -1911,7 +1914,7 @@ void QAbstractItemView::mouseReleaseEvent(QMouseEvent *event)
return;
}
- bool click = (index == d->pressedIndex && index.isValid());
+ bool click = (index == d->pressedIndex && index.isValid() && !releaseFromDoubleClick);
bool selectedClicked = click && (event->button() == Qt::LeftButton) && d->pressedAlreadySelected;
EditTrigger trigger = (selectedClicked ? SelectedClicked : NoEditTriggers);
const bool edited = click ? edit(index, trigger, event) : false;
@@ -1964,7 +1967,7 @@ void QAbstractItemView::mouseDoubleClickEvent(QMouseEvent *event)
if ((event->button() == Qt::LeftButton) && !edit(persistent, DoubleClicked, event)
&& !style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, nullptr, this))
emit activated(persistent);
- d->pressedIndex = QModelIndex();
+ d->releaseFromDoubleClick = true;
}
#if QT_CONFIG(draganddrop)
diff --git a/src/widgets/itemviews/qabstractitemview_p.h b/src/widgets/itemviews/qabstractitemview_p.h
index 33924799fe..7532cf5789 100644
--- a/src/widgets/itemviews/qabstractitemview_p.h
+++ b/src/widgets/itemviews/qabstractitemview_p.h
@@ -385,6 +385,7 @@ public:
Qt::KeyboardModifiers pressedModifiers;
QPoint pressedPosition;
bool pressedAlreadySelected;
+ bool releaseFromDoubleClick;
//forces the next mouseMoveEvent to send the viewportEntered signal
//if the mouse is over the viewport and not over an item
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index 2d33759d8c..2b34476642 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -572,6 +572,8 @@ void QListView::scrollTo(const QModelIndex &index, ScrollHint hint)
return;
const QRect rect = visualRect(index);
+ if (!rect.isValid())
+ return;
if (hint == EnsureVisible && d->viewport->rect().contains(rect)) {
d->viewport->update(rect);
return;
@@ -2930,6 +2932,8 @@ bool QIconModeViewBase::filterDropEvent(QDropEvent *e)
dd->stopAutoScroll();
draggedItems.clear();
dd->emitIndexesMoved(indexes);
+ // do not delete item on internal move, see filterStartDrag()
+ dd->dropEventMoved = true;
e->accept(); // we have handled the event
// if the size has not grown, we need to check if it has shrinked
if (contentsSize != contents) {
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp
index 69ab0bb958..6ab6576cbe 100644
--- a/src/widgets/itemviews/qtreeview.cpp
+++ b/src/widgets/itemviews/qtreeview.cpp
@@ -1948,7 +1948,7 @@ void QTreeView::mouseDoubleClickEvent(QMouseEvent *event)
if (!style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, nullptr, this))
emit activated(persistent);
- d->pressedIndex = QModelIndex();
+ d->releaseFromDoubleClick = true;
d->executePostedLayout(); // we need to make sure viewItems is updated
if (d->itemsExpandable
&& d->expandsOnDoubleClick
@@ -2665,7 +2665,10 @@ QSize QTreeView::viewportSizeHint() const
\since 4.2
Expands all expandable items.
- \warning: if the model contains a large number of items,
+ \note This function will not try to \l{QAbstractItemModel::fetchMore}{fetch more}
+ data.
+
+ \warning If the model contains a large number of items,
this function will take some time to execute.
\sa collapseAll(), expand(), collapse(), setExpanded()
@@ -2687,7 +2690,10 @@ void QTreeView::expandAll()
A \a depth of -1 will expand all children, a \a depth of 0 will
only expand the given \a index.
- \warning: if the model contains a large number of items,
+ \note This function will not try to \l{QAbstractItemModel::fetchMore}{fetch more}
+ data.
+
+ \warning If the model contains a large number of items,
this function will take some time to execute.
\sa expandAll()
@@ -2752,6 +2758,9 @@ void QTreeView::collapseAll()
\since 4.3
Expands all expandable items to the given \a depth.
+ \note This function will not try to \l{QAbstractItemModel::fetchMore}{fetch more}
+ data.
+
\sa expandAll(), collapseAll(), expand(), collapse(), setExpanded()
*/
void QTreeView::expandToDepth(int depth)
diff --git a/src/widgets/kernel/qaction.cpp b/src/widgets/kernel/qaction.cpp
index 64b0d69f6d..715a74438a 100644
--- a/src/widgets/kernel/qaction.cpp
+++ b/src/widgets/kernel/qaction.cpp
@@ -1304,8 +1304,7 @@ bool QAction::isIconVisibleInMenu() const
shown via a context menu, when it is false, it is not shown.
The default is to follow whether the Qt::AA_DontShowShortcutsInContextMenus attribute
- is set for the application, falling back to the widget style hint.
- Explicitly setting this property overrides the presence (or abscence) of the attribute.
+ is set for the application. Explicitly setting this property overrides the attribute.
\sa QAction::shortcut, QCoreApplication::setAttribute()
*/
@@ -1327,8 +1326,7 @@ bool QAction::isShortcutVisibleInContextMenu() const
{
Q_D(const QAction);
if (d->shortcutVisibleInContextMenu == -1) {
- return !QCoreApplication::testAttribute(Qt::AA_DontShowShortcutsInContextMenus)
- && QGuiApplication::styleHints()->showShortcutsInContextMenus();
+ return !QCoreApplication::testAttribute(Qt::AA_DontShowShortcutsInContextMenus);
}
return d->shortcutVisibleInContextMenu;
}
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index dbdd67fac0..1da9f6380f 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -4682,7 +4682,9 @@ void QWidgetPrivate::resolveLayoutDirection()
/*!
\property QWidget::layoutDirection
- \brief the layout direction for this widget
+ \brief the layout direction for this widget.
+
+ \note This method no longer affects text layout direction since Qt 4.7.
By default, this property is set to Qt::LeftToRight.
@@ -4693,7 +4695,6 @@ void QWidgetPrivate::resolveLayoutDirection()
has been called for the parent do not inherit the parent's layout
direction.
- This method no longer affects text layout direction since Qt 4.7.
\sa QApplication::layoutDirection
*/
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp
index 2ab9756f8d..9fcb8ba522 100644
--- a/src/widgets/styles/qstylesheetstyle.cpp
+++ b/src/widgets/styles/qstylesheetstyle.cpp
@@ -4449,14 +4449,14 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
case PE_PanelLineEdit:
if (const QStyleOptionFrame *frm = qstyleoption_cast<const QStyleOptionFrame *>(opt)) {
-#if QT_CONFIG(spinbox)
- if (w && qobject_cast<const QAbstractSpinBox *>(w->parentWidget())) {
- QRenderRule spinboxRule = renderRule(w->parentWidget(), opt);
- if (!spinboxRule.hasNativeBorder() || !spinboxRule.baseStyleCanDraw())
+ QWidget *container = containerWidget(w);
+ if (container != w) {
+ QRenderRule containerRule = renderRule(container, opt);
+ if (!containerRule.hasNativeBorder() || !containerRule.baseStyleCanDraw())
return;
- rule = spinboxRule;
+ rule = containerRule;
}
-#endif
+
if (rule.hasNativeBorder()) {
QStyleOptionFrame frmOpt(*frm);
rule.configurePalette(&frmOpt.palette, QPalette::Text, QPalette::Base);
@@ -5171,18 +5171,19 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op
QSize sz(csz);
if (mi->text.contains(QLatin1Char('\t')))
sz.rwidth() += 12; //as in QCommonStyle
- bool checkable = mi->checkType != QStyleOptionMenuItem::NotCheckable;
if (!mi->icon.isNull()) {
const int pmSmall = pixelMetric(PM_SmallIconSize);
const QSize pmSize = mi->icon.actualSize(QSize(pmSmall, pmSmall));
- sz.rwidth() += pmSize.width() + 4;
- } else if (checkable) {
+ sz.rwidth() += std::max(mi->maxIconWidth, pmSize.width()) + 4;
+ } else if (mi->menuHasCheckableItems) {
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
QRect checkmarkRect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
sz.rwidth() += std::max(mi->maxIconWidth, checkmarkRect.width()) + 4;
+ } else {
+ sz.rwidth() += mi->maxIconWidth;
}
if (subRule.hasFont) {
- QFontMetrics fm(subRule.font);
+ QFontMetrics fm(subRule.font.resolve(mi->font));
const QRect r = fm.boundingRect(QRect(), Qt::TextSingleLine | Qt::TextShowMnemonic, mi->text);
sz = sz.expandedTo(r.size());
}
diff --git a/src/widgets/widgets/qdatetimeedit_p.h b/src/widgets/widgets/qdatetimeedit_p.h
index 7df2b59710..d36b6f8f9a 100644
--- a/src/widgets/widgets/qdatetimeedit_p.h
+++ b/src/widgets/widgets/qdatetimeedit_p.h
@@ -107,7 +107,7 @@ public:
if (keyboardTracking)
return maximum.toDateTime();
if (spec != Qt::LocalTime)
- return QDateTime(QDATETIMEEDIT_DATE_MIN.startOfDay(spec));
+ return QDateTime(QDATETIMEEDIT_DATE_MAX.endOfDay(spec));
return QDateTimeParser::getMaximum();
}
QLocale locale() const override { return q_func()->locale(); }
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index 807d84db95..d9379b0f33 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -1236,6 +1236,11 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect
on whether it is docked; a docked QDockWidget has no frame and a smaller title
bar.
+ \note On macOS, if the QDockWidget has a native window handle (for example,
+ if winId() is called on it or the child widget), then due to a limitation it will not be
+ possible to drag the dock widget when undocking. Starting the drag will undock
+ the dock widget, but a second drag will be needed to move the dock widget itself.
+
\sa QMainWindow, {Dock Widgets Example}
*/
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp
index a437d45c52..11367879e2 100644
--- a/src/widgets/widgets/qlineedit.cpp
+++ b/src/widgets/widgets/qlineedit.cpp
@@ -82,8 +82,7 @@
#include "private/qapplication_p.h"
#include "private/qshortcutmap_p.h"
#include "qkeysequence.h"
-#define ACCEL_KEY(k) ((!QCoreApplication::testAttribute(Qt::AA_DontShowIconsInMenus) \
- && QGuiApplication::styleHints()->showShortcutsInContextMenus()) \
+#define ACCEL_KEY(k) (!QCoreApplication::testAttribute(Qt::AA_DontShowShortcutsInContextMenus) \
&& !QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(k) ? \
QLatin1Char('\t') + QKeySequence(k).toString(QKeySequence::NativeText) : QString())
#else
@@ -1901,8 +1900,11 @@ void QLineEdit::focusInEvent(QFocusEvent *e)
d->control->moveCursor(d->control->nextMaskBlank(0));
else if (!d->control->hasSelectedText())
selectAll();
+ else
+ updateMicroFocus();
} else if (e->reason() == Qt::MouseFocusReason) {
d->clickCausedFocus = 1;
+ updateMicroFocus();
}
#ifdef QT_KEYPAD_NAVIGATION
if (!QApplicationPrivate::keypadNavigationEnabled() || (hasEditFocus() && ( e->reason() == Qt::PopupFocusReason))) {
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp
index 36d818d00c..80c9258da4 100644
--- a/src/widgets/widgets/qlineedit_p.cpp
+++ b/src/widgets/widgets/qlineedit_p.cpp
@@ -407,8 +407,9 @@ void QLineEditIconButton::setHideWithText(bool hide)
void QLineEditIconButton::onAnimationFinished()
{
- if (shouldHideWithText() && isVisible() && !m_wasHidden) {
+ if (shouldHideWithText() && isVisible() && m_fadingOut) {
hide();
+ m_fadingOut = false;
// Invalidate previous geometry to take into account new size of side widgets
if (auto le = lineEditPrivate())
@@ -418,7 +419,7 @@ void QLineEditIconButton::onAnimationFinished()
void QLineEditIconButton::animateShow(bool visible)
{
- m_wasHidden = visible;
+ m_fadingOut = !visible;
if (shouldHideWithText() && !isVisible()) {
show();
@@ -664,10 +665,18 @@ static int effectiveTextMargin(int defaultMargin, const QLineEditPrivate::SideWi
if (widgets.empty())
return defaultMargin;
- return defaultMargin + (parameters.margin + parameters.widgetWidth) *
- int(std::count_if(widgets.begin(), widgets.end(),
+ const auto visibleSideWidgetCount = std::count_if(widgets.begin(), widgets.end(),
[](const QLineEditPrivate::SideWidgetEntry &e) {
- return e.widget->isVisibleTo(e.widget->parentWidget()); }));
+#if QT_CONFIG(animation)
+ // a button that's fading out doesn't get any space
+ if (auto* iconButton = qobject_cast<QLineEditIconButton*>(e.widget))
+ return iconButton->needsSpace();
+
+#endif
+ return e.widget->isVisibleTo(e.widget->parentWidget());
+ });
+
+ return defaultMargin + (parameters.margin + parameters.widgetWidth) * visibleSideWidgetCount;
}
QMargins QLineEditPrivate::effectiveTextMargins() const
diff --git a/src/widgets/widgets/qlineedit_p.h b/src/widgets/widgets/qlineedit_p.h
index 5ae402b992..f55210fc7f 100644
--- a/src/widgets/widgets/qlineedit_p.h
+++ b/src/widgets/widgets/qlineedit_p.h
@@ -95,6 +95,11 @@ public:
bool shouldHideWithText() const;
void setHideWithText(bool hide);
+ bool needsSpace() const {
+ if (m_fadingOut)
+ return false;
+ return isVisibleTo(parentWidget());
+ }
#endif
protected:
@@ -118,7 +123,7 @@ private:
#if QT_CONFIG(animation)
bool m_hideWithText = false;
- bool m_wasHidden = false;
+ bool m_fadingOut = false;
#endif
};
diff --git a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
index d56c6ab68b..fb49efc7a6 100644
--- a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
+++ b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
@@ -48,6 +48,7 @@
/*!
\class QMacCocoaViewContainer
+ \obsolete Use QWidget::createWindowContainer() and QWindow::fromWinId() instead.
\since 4.5
\brief The QMacCocoaViewContainer class provides a widget for \macos that can be used to wrap arbitrary
diff --git a/src/widgets/widgets/qmacnativewidget_mac.mm b/src/widgets/widgets/qmacnativewidget_mac.mm
index 874ca84b61..3566f4ed79 100644
--- a/src/widgets/widgets/qmacnativewidget_mac.mm
+++ b/src/widgets/widgets/qmacnativewidget_mac.mm
@@ -47,6 +47,7 @@
/*!
\class QMacNativeWidget
+ \obsolete Use QWidget::winId() instead.
\since 4.5
\brief The QMacNativeWidget class provides a widget for \macos that provides
a way to put Qt widgets into Cocoa hierarchies.
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index 579df64d15..ee7445f5bf 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -407,10 +407,12 @@ void QTabBarPrivate::init()
{
Q_Q(QTabBar);
leftB = new QToolButton(q);
+ leftB->setObjectName(QStringLiteral("ScrollLeftButton"));
leftB->setAutoRepeat(true);
QObject::connect(leftB, SIGNAL(clicked()), q, SLOT(_q_scrollTabs()));
leftB->hide();
rightB = new QToolButton(q);
+ rightB->setObjectName(QStringLiteral("ScrollRightButton"));
rightB->setAutoRepeat(true);
QObject::connect(rightB, SIGNAL(clicked()), q, SLOT(_q_scrollTabs()));
rightB->hide();
@@ -831,21 +833,24 @@ void QTabBarPrivate::_q_scrollTabs()
Q_Q(QTabBar);
const QObject *sender = q->sender();
const bool horizontal = !verticalTabs(shape);
- const QRect scrollRect = normalizedScrollRect();
+ const QRect scrollRect = normalizedScrollRect().translated(scrollOffset, 0);
+
int i = -1;
if (sender == leftB) {
for (i = tabList.count() - 1; i >= 0; --i) {
int start = horizontal ? tabList.at(i).rect.left() : tabList.at(i).rect.top();
- if (start < scrollRect.left() + scrollOffset) {
+ if (start < scrollRect.left()) {
makeVisible(i);
return;
}
}
} else if (sender == rightB) {
for (i = 0; i < tabList.count(); ++i) {
- int end = horizontal ? tabList.at(i).rect.right() : tabList.at(i).rect.bottom();
- if (end > scrollRect.right() + scrollOffset) {
+ const auto tabRect = tabList.at(i).rect;
+ int start = horizontal ? tabRect.left() : tabRect.top();
+ int end = horizontal ? tabRect.right() : tabRect.bottom();
+ if (end > scrollRect.right() && start > scrollOffset) {
makeVisible(i);
return;
}
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index f4eac623fb..6a5a77ddc6 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -97,8 +97,7 @@
#include "private/qapplication_p.h"
#include "private/qshortcutmap_p.h"
#include <qkeysequence.h>
-#define ACCEL_KEY(k) ((!QCoreApplication::testAttribute(Qt::AA_DontShowShortcutsInContextMenus) \
- && QGuiApplication::styleHints()->showShortcutsInContextMenus()) \
+#define ACCEL_KEY(k) (!QCoreApplication::testAttribute(Qt::AA_DontShowShortcutsInContextMenus) \
&& !QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(k) ? \
QLatin1Char('\t') + QKeySequence(k).toString(QKeySequence::NativeText) : QString())
@@ -1281,7 +1280,7 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e)
// example)
repaintSelection();
- if (e->key() == Qt::Key_Backspace && !(e->modifiers() & ~Qt::ShiftModifier)) {
+ if (e->key() == Qt::Key_Backspace && !(e->modifiers() & ~(Qt::ShiftModifier | Qt::GroupSwitchModifier))) {
QTextBlockFormat blockFmt = cursor.blockFormat();
QTextList *list = cursor.currentList();
if (list && cursor.atBlockStart() && !cursor.hasSelection()) {
diff --git a/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp b/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
index 3c77b1ba0b..212c0a2e13 100644
--- a/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
+++ b/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
@@ -126,7 +126,8 @@ public:
void tst_QtConcurrentIterateKernel::instantiate()
{
- startThreadEngine(new PrintFor(0, 40)).startBlocking();
+ auto future = startThreadEngine(new PrintFor(0, 40)).startAsynchronously();
+ future.waitForFinished();
QCOMPARE(iterations.loadRelaxed(), 40);
}
@@ -165,8 +166,10 @@ void tst_QtConcurrentIterateKernel::stresstest()
const int times = 50;
for (int i = 0; i < times; ++i) {
counter.storeRelaxed(0);
- CountFor f(0, iterations);
- f.startBlocking();
+ // ThreadEngine will delete f when it finishes
+ auto f = new CountFor(0, iterations);
+ auto future = f->startAsynchronously();
+ future.waitForFinished();
QCOMPARE(counter.loadRelaxed(), iterations);
}
}
@@ -174,8 +177,11 @@ void tst_QtConcurrentIterateKernel::stresstest()
void tst_QtConcurrentIterateKernel::noIterations()
{
const int times = 20000;
- for (int i = 0; i < times; ++i)
- startThreadEngine(new IterateKernel<TestIterator, void>(0, 0)).startBlocking();
+ for (int i = 0; i < times; ++i) {
+ auto future = startThreadEngine(new IterateKernel<TestIterator, void>(0, 0))
+ .startAsynchronously();
+ future.waitForFinished();
+ }
}
QMutex threadsMutex;
@@ -230,8 +236,10 @@ void tst_QtConcurrentIterateKernel::throttling()
threads.clear();
- ThrottleFor f(0, totalIterations);
- f.startBlocking();
+ // ThreadEngine will delete f when it finishes
+ auto f = new ThrottleFor(0, totalIterations);
+ auto future = f->startAsynchronously();
+ future.waitForFinished();
QCOMPARE(iterations.loadRelaxed(), totalIterations);
diff --git a/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp b/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
index d4c669cddc..ac7be7acdd 100644
--- a/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
+++ b/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
@@ -65,16 +65,9 @@ public:
void tst_QtConcurrentThreadEngine::runDirectly()
{
- {
- PrintUser engine;
- engine.startSingleThreaded();
- engine.startBlocking();
- }
- {
- PrintUser *engine = new PrintUser();
- QFuture<void> f = engine->startAsynchronously();
- f.waitForFinished();
- }
+ PrintUser *engine = new PrintUser();
+ QFuture<void> f = engine->startAsynchronously();
+ f.waitForFinished();
}
class StringResultUser : public ThreadEngine<QString>
@@ -106,8 +99,10 @@ public:
void tst_QtConcurrentThreadEngine::result()
{
- StringResultUser engine;
- QCOMPARE(*engine.startBlocking(), QString("Foo"));
+ // ThreadEngine will delete 'engine' when it finishes
+ auto engine = new StringResultUser();
+ auto future = engine->startAsynchronously();
+ QCOMPARE(future.result(), QString("Foo"));
}
class VoidResultUser : public ThreadEngine<void>
@@ -133,17 +128,9 @@ public:
void tst_QtConcurrentThreadEngine::runThroughStarter()
{
- {
- ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
- QFuture<QString> f = starter.startAsynchronously();
- QCOMPARE(f.result(), QString("Foo"));
- }
-
- {
- ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
- QString str = starter.startBlocking();
- QCOMPARE(str, QString("Foo"));
- }
+ ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
+ QFuture<QString> f = starter.startAsynchronously();
+ QCOMPARE(f.result(), QString("Foo"));
}
class CancelUser : public ThreadEngine<void>
@@ -226,12 +213,6 @@ void tst_QtConcurrentThreadEngine::throttle()
f.waitForFinished();
QCOMPARE(count.loadRelaxed(), 0);
}
-
- for (int i = 0; i < repeats; ++i) {
- ThrottleAlwaysUser t;
- t.startBlocking();
- QCOMPARE(count.loadRelaxed(), 0);
- }
}
QSet<QThread *> threads;
@@ -266,40 +247,21 @@ public:
void tst_QtConcurrentThreadEngine::threadCount()
{
- //QTBUG-23333: This test is unstable
-
const int repeats = 10;
for (int i = 0; i < repeats; ++i) {
- ThreadCountUser t;
- t.startBlocking();
- int count = threads.count();
- int count_expected = QThreadPool::globalInstance()->maxThreadCount() + 1; // +1 for the main thread.
- if (count != count_expected)
- QEXPECT_FAIL("", "QTBUG-23333", Abort);
- QCOMPARE(count, count_expected);
-
(new ThreadCountUser())->startAsynchronously().waitForFinished();
- count = threads.count();
- count_expected = QThreadPool::globalInstance()->maxThreadCount();
- if (count != count_expected)
- QEXPECT_FAIL("", "QTBUG-23333", Abort);
- QCOMPARE(count, count_expected);
+ const auto count = threads.count();
+ const auto maxThreadCount = QThreadPool::globalInstance()->maxThreadCount();
+ QVERIFY(count <= maxThreadCount);
+ QVERIFY(!threads.contains(QThread::currentThread()));
}
// Set the finish flag immediately, this should give us one thread only.
for (int i = 0; i < repeats; ++i) {
- ThreadCountUser t(true /*finishImmediately*/);
- t.startBlocking();
- int count = threads.count();
- if (count != 1)
- QEXPECT_FAIL("", "QTBUG-23333", Abort);
- QCOMPARE(count, 1);
-
(new ThreadCountUser(true /*finishImmediately*/))->startAsynchronously().waitForFinished();
- count = threads.count();
- if (count != 1)
- QEXPECT_FAIL("", "QTBUG-23333", Abort);
+ const auto count = threads.count();
QCOMPARE(count, 1);
+ QVERIFY(!threads.contains(QThread::currentThread()));
}
}
@@ -438,7 +400,6 @@ public:
void tst_QtConcurrentThreadEngine::exceptions()
{
- // Asynchronous mode:
{
bool caught = false;
try {
@@ -451,32 +412,6 @@ void tst_QtConcurrentThreadEngine::exceptions()
QVERIFY2(caught, "did not get exception");
}
- // Blocking mode:
- // test throwing the exception from a worker thread.
- {
- bool caught = false;
- try {
- QtConcurrentExceptionThrower e(QThread::currentThread());
- e.startBlocking();
- } catch (const QException &) {
- caught = true;
- }
- QVERIFY2(caught, "did not get exception");
- }
-
- // test throwing the exception from the main thread (different code path)
- {
- bool caught = false;
- try {
- QtConcurrentExceptionThrower e(0);
- e.startBlocking();
- } catch (const QException &) {
- caught = true;
- }
- QVERIFY2(caught, "did not get exception");
- }
-
- // Asynchronous mode:
{
bool caught = false;
try {
@@ -488,31 +423,6 @@ void tst_QtConcurrentThreadEngine::exceptions()
}
QVERIFY2(caught, "did not get exception");
}
-
- // Blocking mode:
- // test throwing the exception from a worker thread.
- {
- bool caught = false;
- try {
- UnrelatedExceptionThrower e(QThread::currentThread());
- e.startBlocking();
- } catch (const QUnhandledException &) {
- caught = true;
- }
- QVERIFY2(caught, "did not get exception");
- }
-
- // test throwing the exception from the main thread (different code path)
- {
- bool caught = false;
- try {
- UnrelatedExceptionThrower e(0);
- e.startBlocking();
- } catch (const QUnhandledException &) {
- caught = true;
- }
- QVERIFY2(caught, "did not get exception");
- }
}
#endif
diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
index 84f4a47585..7c69f5f4b5 100644
--- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
+++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
@@ -742,6 +742,10 @@ void tst_QSettings::embeddedZeroByte_data()
QTest::newRow("@bytearray\\0") << QVariant(bytes);
QTest::newRow("@string\\0") << QVariant(QString::fromLatin1(bytes.data(), bytes.size()));
+
+ bytes = QByteArray("@\xdd\x7d", 3);
+ QTest::newRow("@-prefixed data") << QVariant(bytes);
+ QTest::newRow("@-prefixed data as string") << QVariant(QString::fromLatin1(bytes.data(), bytes.size()));
}
void tst_QSettings::embeddedZeroByte()
diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
index 1bd27cd0ce..3c0adda5de 100644
--- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
+++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
@@ -135,24 +135,53 @@ void tst_QTimer::timeout()
void tst_QTimer::remainingTime()
{
- QTimer timer;
- QSignalSpy timeoutSpy(&timer, &QTimer::timeout);
- timer.setTimerType(Qt::PreciseTimer);
- timer.start(200);
-
- QCOMPARE(timeoutSpy.count(), 0);
- QTest::qWait(50);
- QCOMPARE(timeoutSpy.count(), 0);
-
- int remainingTime = timer.remainingTime();
- QVERIFY2(remainingTime >= 50 && remainingTime <= 200, qPrintable(QString::number(remainingTime)));
-
- QVERIFY(timeoutSpy.wait());
- QCOMPARE(timeoutSpy.count(), 1);
-
- // the timer is still active, so it should have a non-zero remaining time
- remainingTime = timer.remainingTime();
- QVERIFY2(remainingTime >= 50, qPrintable(QString::number(remainingTime)));
+ QTimer tested;
+ tested.setTimerType(Qt::PreciseTimer);
+
+ QTimer tester;
+ tester.setTimerType(Qt::PreciseTimer);
+ tester.setSingleShot(true);
+
+ const int testedInterval = 200;
+ const int testerInterval = 50;
+ const int expectedRemainingTime = testedInterval - testerInterval;
+
+ int testIteration = 0;
+ const int desiredTestCount = 2;
+
+ auto connection = QObject::connect(&tested, &QTimer::timeout, [&tester]() {
+ // We let tested (which isn't a single-shot) run repeatedly, to verify
+ // it *does* repeat, and check that the single-shot tester, starting
+ // at the same time, does finish first each time, by about the right duration.
+ tester.start(); // Start tester again.
+ });
+
+ QObject::connect(&tester, &QTimer::timeout, [&]() {
+ const int remainingTime = tested.remainingTime();
+ // We expect that remainingTime is at most 150 and not overdue.
+ const bool remainingTimeInRange = remainingTime > 0
+ && remainingTime <= expectedRemainingTime;
+ if (remainingTimeInRange)
+ ++testIteration;
+ else
+ testIteration = desiredTestCount; // We are going to fail on QVERIFY2()
+ // below, so we don't want to iterate
+ // anymore and quickly exit the QTRY_...()
+ // with this failure.
+ if (testIteration == desiredTestCount)
+ QObject::disconnect(connection); // Last iteration, don't start tester again.
+ QVERIFY2(remainingTimeInRange, qPrintable("Remaining time "
+ + QByteArray::number(remainingTime) + "ms outside expected range (0ms, "
+ + QByteArray::number(expectedRemainingTime) + "ms]"));
+ });
+
+ tested.start(testedInterval);
+ tester.start(testerInterval); // Start tester for the 1st time.
+
+ // Test it desiredTestCount times, give it reasonable amount of time
+ // (twice as much as needed).
+ QTRY_COMPARE_WITH_TIMEOUT(testIteration, desiredTestCount,
+ testedInterval * desiredTestCount * 2);
}
void tst_QTimer::remainingTimeInitial_data()
diff --git a/tests/auto/corelib/text/qchar/tst_qchar.cpp b/tests/auto/corelib/text/qchar/tst_qchar.cpp
index cf4f6d21e2..1f6f36e972 100644
--- a/tests/auto/corelib/text/qchar/tst_qchar.cpp
+++ b/tests/auto/corelib/text/qchar/tst_qchar.cpp
@@ -980,6 +980,25 @@ void tst_QChar::normalization_manual()
QVERIFY(decomposed.normalized(QString::NormalizationForm_KD) == decomposed);
QVERIFY(decomposed.normalized(QString::NormalizationForm_KC) == composed);
}
+ // QTBUG-71894 - erratum fixed in Unicode 4.1.0; SCount bounds are < not <=
+ {
+ // Hangul compose, test 0x11a7:
+ const QChar c[] = { QChar(0xae30), QChar(0x11a7), {} };
+ const QChar d[] = { QChar(0x1100), QChar(0x1175), QChar(0x11a7), {} };
+ const QString composed(c, 2);
+ const QString decomposed(d, 3);
+
+ QCOMPARE(decomposed.normalized(QString::NormalizationForm_C), composed);
+ }
+ {
+ // Hangul compose, test 0x11c3:
+ const QChar c[] = { QChar(0xae30), QChar(0x11c3), {} };
+ const QChar d[] = { QChar(0x1100), QChar(0x1175), QChar(0x11c3), {} };
+ const QString composed(c, 2);
+ const QString decomposed(d, 3);
+
+ QCOMPARE(decomposed.normalized(QString::NormalizationForm_C), composed);
+ }
}
void tst_QChar::normalizationCorrections()
diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
index f924bd1560..43698e5a19 100644
--- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
@@ -2983,13 +2983,13 @@ void tst_QLocale::bcp47Name()
class MySystemLocale : public QSystemLocale
{
public:
- MySystemLocale(const QLocale &locale) : m_locale(locale)
+ MySystemLocale(const QString &locale) : m_name(locale), m_locale(locale)
{
}
- QVariant query(QueryType /*type*/, QVariant /*in*/) const override
+ QVariant query(QueryType type, QVariant /*in*/) const override
{
- return QVariant();
+ return type == UILanguages ? QVariant(QStringList{m_name}) : QVariant();
}
QLocale fallbackUiLocale() const override
@@ -2998,16 +2998,32 @@ public:
}
private:
+ const QString m_name;
const QLocale m_locale;
};
void tst_QLocale::systemLocale_data()
{
+ // Test uses MySystemLocale, so is platform-independent.
QTest::addColumn<QString>("name");
QTest::addColumn<QLocale::Language>("language");
- QTest::addRow("catalan") << QString("ca") << QLocale::Catalan;
- QTest::addRow("ukrainian") << QString("uk") << QLocale::Ukrainian;
- QTest::addRow("german") << QString("de") << QLocale::German;
+ QTest::addColumn<QStringList>("uiLanguages");
+
+ QTest::addRow("catalan")
+ << QString("ca") << QLocale::Catalan
+ << QStringList{QStringLiteral("ca"), QStringLiteral("ca-ES"), QStringLiteral("ca-Latn-ES")};
+ QTest::addRow("ukrainian")
+ << QString("uk") << QLocale::Ukrainian
+ << QStringList{QStringLiteral("uk"), QStringLiteral("uk-UA"), QStringLiteral("uk-Cyrl-UA")};
+ QTest::addRow("german")
+ << QString("de") << QLocale::German
+ << QStringList{QStringLiteral("de"), QStringLiteral("de-DE"), QStringLiteral("de-Latn-DE")};
+ QTest::addRow("chinese-min")
+ << QString("zh") << QLocale::Chinese
+ << QStringList{QStringLiteral("zh"), QStringLiteral("zh-CN"), QStringLiteral("zh-Hans-CN")};
+ QTest::addRow("chinese-full")
+ << QString("zh-Hans-CN") << QLocale::Chinese
+ << QStringList{QStringLiteral("zh-Hans-CN"), QStringLiteral("zh"), QStringLiteral("zh-CN")};
}
void tst_QLocale::systemLocale()
@@ -3017,11 +3033,13 @@ void tst_QLocale::systemLocale()
QFETCH(QString, name);
QFETCH(QLocale::Language, language);
+ QFETCH(QStringList, uiLanguages);
{
MySystemLocale sLocale(name);
QCOMPARE(QLocale().language(), language);
QCOMPARE(QLocale::system().language(), language);
+ QCOMPARE(QLocale::system().uiLanguages(), uiLanguages);
}
QCOMPARE(QLocale(), originalLocale);
diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp
index 8f53824050..696b8159ac 100644
--- a/tests/auto/corelib/text/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp
@@ -600,6 +600,7 @@ private slots:
void isValidUtf16_data();
void isValidUtf16();
void unicodeStrings();
+ void vasprintfWithPrecision();
};
template <class T> const T &verifyZeroTermination(const T &t) { return t; }
@@ -1674,7 +1675,7 @@ void tst_QString::lastIndexOf()
QCOMPARE(haystack.lastIndexOf(needle.toLatin1(), from, cs), expected);
QCOMPARE(haystack.lastIndexOf(needle.toLatin1().data(), from, cs), expected);
- if (from >= -1 && from < haystack.size() && needle.size() > 0) {
+ if (from >= -1 && from < haystack.size()) {
// unfortunately, QString and QRegExp don't have the same out of bound semantics
// I think QString is wrong -- See file log for contact information.
{
@@ -7148,6 +7149,35 @@ void tst_QString::isValidUtf16()
QTEST(string.isValidUtf16(), "valid");
}
+static QString doVasprintf(const char *msg, ...) {
+ va_list args;
+ va_start(args, msg);
+ const QString result = QString::vasprintf(msg, args);
+ va_end(args);
+ return result;
+}
+
+void tst_QString::vasprintfWithPrecision()
+{
+ {
+ const char *msg = "Endpoint %.*s with";
+ static const char arg0[3] = { 'a', 'b', 'c' };
+ static const char arg1[4] = { 'a', 'b', 'c', '\0' };
+ QCOMPARE(doVasprintf(msg, 3, arg0), QStringLiteral("Endpoint abc with"));
+ QCOMPARE(doVasprintf(msg, 9, arg1), QStringLiteral("Endpoint abc with"));
+ QCOMPARE(doVasprintf(msg, 0, nullptr), QStringLiteral("Endpoint with"));
+ }
+
+ {
+ const char *msg = "Endpoint %.*ls with";
+ static const ushort arg0[3] = { 'a', 'b', 'c' };
+ static const ushort arg1[4] = { 'a', 'b', 'c', '\0' };
+ QCOMPARE(doVasprintf(msg, 3, arg0), QStringLiteral("Endpoint abc with"));
+ QCOMPARE(doVasprintf(msg, 9, arg1), QStringLiteral("Endpoint abc with"));
+ QCOMPARE(doVasprintf(msg, 0, nullptr), QStringLiteral("Endpoint with"));
+ }
+}
+
QTEST_APPLESS_MAIN(tst_QString)
#include "tst_qstring.moc"
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
index 0bdadedfac..49c8ec2113 100644
--- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
+++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
@@ -94,6 +94,7 @@ private slots:
void nestedExceptions();
#endif
void nonGlobalThreadPool();
+ void resultsReadyAt();
};
void tst_QFuture::resultStore()
@@ -627,6 +628,26 @@ void tst_QFuture::futureInterface()
VoidResult a;
a.run().waitForFinished();
}
+
+ {
+ QFutureInterface<int> fi;
+ fi.reportStarted();
+ fi.reportResults(QVector<int> {});
+ fi.reportFinished();
+
+ QVERIFY(fi.results().empty());
+ }
+
+ {
+ QFutureInterface<int> fi;
+ fi.reportStarted();
+ QVector<int> values = { 1, 2, 3 };
+ fi.reportResults(values);
+ fi.reportResults(QVector<int> {});
+ fi.reportFinished();
+
+ QCOMPARE(fi.results(), values.toList());
+ }
}
template <typename T>
@@ -1557,5 +1578,63 @@ void tst_QFuture::nonGlobalThreadPool()
}
}
+void tst_QFuture::resultsReadyAt()
+{
+ QFutureInterface<int> iface;
+ QFutureWatcher<int> watcher;
+ watcher.setFuture(iface.future());
+
+ QTestEventLoop eventProcessor;
+ connect(&watcher, &QFutureWatcher<int>::finished, &eventProcessor, &QTestEventLoop::exitLoop);
+
+ const int nExpectedResults = 4;
+ int reported = 0;
+ int taken = 0;
+ connect(&watcher, &QFutureWatcher<int>::resultsReadyAt,
+ [&iface, &reported, &taken](int begin, int end)
+ {
+ auto future = iface.future();
+ QVERIFY(end - begin > 0);
+ for (int i = begin; i < end; ++i, ++reported) {
+ QVERIFY(future.isResultReadyAt(i));
+ taken |= 1 << i;
+ }
+ });
+
+ auto report = [&iface](int index)
+ {
+ int dummyResult = 0b101010;
+ iface.reportResult(&dummyResult, index);
+ };
+
+ const QSignalSpy readyCounter(&watcher, &QFutureWatcher<int>::resultsReadyAt);
+ QTimer::singleShot(0, [&iface, &report]{
+ // With filter mode == true, the result may go into the pending results.
+ // Reporting it as ready will allow an application to try and access the
+ // result, crashing on invalid (store.end()) iterator dereferenced.
+ iface.setFilterMode(true);
+ iface.reportStarted();
+ report(0);
+ report(1);
+ // This one - should not be reported (it goes into pending):
+ report(3);
+ // Let's close the 'gap' and make them all ready:
+ report(-1);
+ iface.reportFinished();
+ });
+
+ // Run event loop, QCoreApplication::postEvent is in use
+ // in QFutureInterface:
+ eventProcessor.enterLoopMSecs(2000);
+ QVERIFY(!eventProcessor.timeout());
+ if (QTest::currentTestFailed()) // Failed in our lambda observing 'ready at'
+ return;
+
+ QCOMPARE(reported, nExpectedResults);
+ QCOMPARE(nExpectedResults, iface.future().resultCount());
+ QCOMPARE(readyCounter.count(), 3);
+ QCOMPARE(taken, 0b1111);
+}
+
QTEST_MAIN(tst_QFuture)
#include "tst_qfuture.moc"
diff --git a/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp b/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp
index fba617e34d..a1742b3182 100644
--- a/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp
+++ b/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp
@@ -175,6 +175,14 @@ void tst_QtConcurrentResultStore::addResults()
++it;
QCOMPARE(it, store.end());
+
+ QVector<int> empty;
+ const auto countBefore = store.count();
+ QCOMPARE(store.addResults(countBefore, &empty), -1);
+ QCOMPARE(store.count(), countBefore);
+
+ QCOMPARE(store.addResults(countBefore, &vec1), countBefore);
+ QCOMPARE(store.count(), countBefore + vec1.size());
}
void tst_QtConcurrentResultStore::resultIndex()
@@ -338,6 +346,14 @@ void tst_QtConcurrentResultStore::filterMode()
QCOMPARE(store.contains(6), true);
QCOMPARE(store.contains(7), true);
QCOMPARE(store.contains(8), false);
+
+ QVector<int> empty;
+ const auto countBefore = store.count();
+ QCOMPARE(store.addResults(countBefore, &empty), -1);
+ QCOMPARE(store.count(), countBefore);
+
+ QCOMPARE(store.addResult(countBefore, &int2), countBefore);
+ QCOMPARE(store.count(), countBefore + 1);
}
void tst_QtConcurrentResultStore::addCanceledResult()
diff --git a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
index 8041fb5439..7dbd587451 100644
--- a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
+++ b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
@@ -1088,35 +1088,38 @@ void tst_QQuaternion::fromEulerAngles_data()
QTest::addColumn<float>("yaw");
QTest::addColumn<float>("roll");
+ QTest::addColumn<QQuaternion>("quaternion");
+
QTest::newRow("null")
- << 0.0f << 0.0f << 0.0f;
+ << 0.0f << 0.0f << 0.0f << QQuaternion(1.0f, 0.0f, 0.0f, 0.0f);
QTest::newRow("xonly")
- << 90.0f << 0.0f << 0.0f;
+ << 90.0f << 0.0f << 0.0f << QQuaternion(0.707107f, 0.707107f, 0.0f, 0.0f);
QTest::newRow("yonly")
- << 0.0f << 180.0f << 0.0f;
+ << 0.0f << 180.0f << 0.0f << QQuaternion(0.0f, 0.0f, 1.0f, 0.0f);
QTest::newRow("zonly")
- << 0.0f << 0.0f << 270.0f;
+ << 0.0f << 0.0f << 270.0f << QQuaternion(-0.707107f, 0.0f, 0.0f, 0.707107f);
QTest::newRow("x+z")
- << 30.0f << 0.0f << 45.0f;
+ << 30.0f << 0.0f << 45.0f << QQuaternion(0.892399f, 0.239118f, -0.099046f, 0.369644f);
QTest::newRow("x+y")
- << 30.0f << 90.0f << 0.0f;
+ << 30.0f << 90.0f << 0.0f << QQuaternion(0.683013f, 0.183013f, 0.683013f, -0.183013f);
QTest::newRow("y+z")
- << 0.0f << 45.0f << 30.0f;
+ << 0.0f << 45.0f << 30.0f << QQuaternion(0.892399f, 0.099046f, 0.369644f, 0.239118f);
QTest::newRow("complex")
- << 30.0f << 240.0f << -45.0f;
+ << 30.0f << 240.0f << -45.0f << QQuaternion(-0.531976f, -0.43968f, 0.723317f, -0.02226f);
}
void tst_QQuaternion::fromEulerAngles()
{
QFETCH(float, pitch);
QFETCH(float, yaw);
QFETCH(float, roll);
+ QFETCH(QQuaternion, quaternion);
// Use a straight-forward implementation of the algorithm at:
// http://www.j3d.org/matrix_faq/matrfaq_latest.html#Q60
@@ -1132,11 +1135,22 @@ void tst_QQuaternion::fromEulerAngles()
QVERIFY(myFuzzyCompare(answer.z(), result.z()));
QVERIFY(myFuzzyCompare(answer.scalar(), result.scalar()));
+ // quaternion should be the same as the result
+ QVERIFY(myFuzzyCompare(answer.x(), quaternion.x()));
+ QVERIFY(myFuzzyCompare(answer.y(), quaternion.y()));
+ QVERIFY(myFuzzyCompare(answer.z(), quaternion.z()));
+ QVERIFY(myFuzzyCompare(answer.scalar(), quaternion.scalar()));
+
{
QVector3D answerEulerAngles = answer.toEulerAngles();
QVERIFY(myFuzzyCompareDegrees(answerEulerAngles.x(), pitch));
QVERIFY(myFuzzyCompareDegrees(answerEulerAngles.y(), yaw));
QVERIFY(myFuzzyCompareDegrees(answerEulerAngles.z(), roll));
+
+ QVector3D quaternionEulerAngles = quaternion.toEulerAngles();
+ QVERIFY(myFuzzyCompareDegrees(quaternionEulerAngles.x(), pitch));
+ QVERIFY(myFuzzyCompareDegrees(quaternionEulerAngles.y(), yaw));
+ QVERIFY(myFuzzyCompareDegrees(quaternionEulerAngles.z(), roll));
}
answer = QQuaternion::fromEulerAngles(pitch, yaw, roll);
@@ -1151,6 +1165,12 @@ void tst_QQuaternion::fromEulerAngles()
QVERIFY(myFuzzyCompareDegrees(answerPitch, pitch));
QVERIFY(myFuzzyCompareDegrees(answerYaw, yaw));
QVERIFY(myFuzzyCompareDegrees(answerRoll, roll));
+
+ float quaternionPitch, quaternionYaw, quaternionRoll;
+ quaternion.getEulerAngles(&quaternionPitch, &quaternionYaw, &quaternionRoll);
+ QVERIFY(myFuzzyCompareDegrees(quaternionPitch, pitch));
+ QVERIFY(myFuzzyCompareDegrees(quaternionYaw, yaw));
+ QVERIFY(myFuzzyCompareDegrees(quaternionRoll, roll));
}
}
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index 42e98ce363..d7c3f95f1d 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -308,6 +308,7 @@ private slots:
void fillPolygon();
void drawImageAtPointF();
+ void scaledDashes();
private:
void fillData();
@@ -5468,6 +5469,36 @@ void tst_QPainter::drawImageAtPointF()
paint.end();
}
+void tst_QPainter::scaledDashes()
+{
+ // Test that we do not hit the limit-huge-number-of-dashes path
+ QRgb fore = qRgb(0, 0, 0xff);
+ QRgb back = qRgb(0xff, 0xff, 0);
+ QImage image(5, 32, QImage::Format_RGB32);
+ image.fill(back);
+ QPainter p(&image);
+ QPen pen(QColor(fore), 3, Qt::DotLine);
+ p.setPen(pen);
+ p.scale(1, 2);
+ p.drawLine(2, 0, 2, 16);
+ p.end();
+
+ bool foreFound = false;
+ bool backFound = false;
+ int i = 0;
+ while (i < 32 && (!foreFound || !backFound)) {
+ QRgb pix = image.pixel(3, i);
+ if (pix == fore)
+ foreFound = true;
+ else if (pix == back)
+ backFound = true;
+ i++;
+ }
+
+ QVERIFY(foreFound);
+ QVERIFY(backFound);
+}
+
QTEST_MAIN(tst_QPainter)
#include "tst_qpainter.moc"
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index c1dd2d97a1..2feca77f40 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -1909,6 +1909,20 @@ void tst_QTextLayout::longText()
QFontMetricsF fm(layout.font());
QVERIFY(layout.maximumWidth() - fm.horizontalAdvance(' ') <= QFIXED_MAX);
}
+
+ {
+ QTextLayout layout(QString("AAAAAAAA").repeated(200000));
+ layout.setCacheEnabled(true);
+ layout.beginLayout();
+ forever {
+ QTextLine line = layout.createLine();
+ if (!line.isValid())
+ break;
+ }
+ layout.endLayout();
+ QFontMetricsF fm(layout.font());
+ QVERIFY(layout.maximumWidth() - fm.horizontalAdvance('A') <= QFIXED_MAX);
+ }
}
void tst_QTextLayout::widthOfTabs()
diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp
index 0d851cd3df..392419e066 100644
--- a/tests/auto/network/access/http2/tst_http2.cpp
+++ b/tests/auto/network/access/http2/tst_http2.cpp
@@ -271,6 +271,10 @@ void tst_Http2::singleRequest()
request.setAttribute(h2Attribute, QVariant(true));
auto reply = manager->get(request);
+#if QT_CONFIG(ssl)
+ QSignalSpy encSpy(reply, &QNetworkReply::encrypted);
+#endif // QT_CONFIG(ssl)
+
connect(reply, &QNetworkReply::finished, this, &tst_Http2::replyFinished);
// Since we're using self-signed certificates,
// ignore SSL errors:
@@ -285,6 +289,11 @@ void tst_Http2::singleRequest()
QCOMPARE(reply->error(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
+
+#if QT_CONFIG(ssl)
+ if (connectionType == H2Type::h2Alpn || connectionType == H2Type::h2Direct)
+ QCOMPARE(encSpy.count(), 1);
+#endif // QT_CONFIG(ssl)
}
void tst_Http2::multipleRequests()
diff --git a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
index 856033fb63..98b2a0d2f7 100644
--- a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
+++ b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
@@ -35,6 +35,7 @@
#include <algorithm>
#define EXAMPLE_URL "http://user:pass@localhost:4/#foo"
+#define EXAMPLE_URL2 "http://user:pass@localhost:4/bar"
//cached objects are organized into these many subdirs
#define NUM_SUBDIRECTORIES 16
@@ -141,7 +142,7 @@ class SubQNetworkDiskCache : public QNetworkDiskCache
public:
~SubQNetworkDiskCache()
{
- if (!cacheDirectory().isEmpty())
+ if (!cacheDirectory().isEmpty() && clearOnDestruction)
clear();
}
@@ -170,6 +171,11 @@ public:
d->write("Hello World!");
insert(d);
}
+
+ void setClearCacheOnDestruction(bool value) { clearOnDestruction = value; }
+
+private:
+ bool clearOnDestruction = true;
};
tst_QNetworkDiskCache::tst_QNetworkDiskCache()
@@ -241,17 +247,39 @@ void tst_QNetworkDiskCache::prepare()
// public qint64 cacheSize() const
void tst_QNetworkDiskCache::cacheSize()
{
- SubQNetworkDiskCache cache;
- cache.setCacheDirectory(tempDir.path());
- QCOMPARE(cache.cacheSize(), qint64(0));
+ qint64 cacheSize = 0;
+ {
+ SubQNetworkDiskCache cache;
+ cache.setCacheDirectory(tempDir.path());
+ QCOMPARE(cache.cacheSize(), qint64(0));
- QUrl url(EXAMPLE_URL);
- QNetworkCacheMetaData metaData;
- metaData.setUrl(url);
- QIODevice *d = cache.prepare(metaData);
- cache.insert(d);
- QVERIFY(cache.cacheSize() > qint64(0));
+ {
+ QUrl url(EXAMPLE_URL);
+ QNetworkCacheMetaData metaData;
+ metaData.setUrl(url);
+ QIODevice *d = cache.prepare(metaData);
+ cache.insert(d);
+ cacheSize = cache.cacheSize();
+ QVERIFY(cacheSize > qint64(0));
+ }
+ // Add a second item, some difference in behavior when the cache is not empty
+ {
+ QUrl url(EXAMPLE_URL2);
+ QNetworkCacheMetaData metaData;
+ metaData.setUrl(url);
+ QIODevice *d = cache.prepare(metaData);
+ cache.insert(d);
+ QVERIFY(cache.cacheSize() > cacheSize);
+ cacheSize = cache.cacheSize();
+ }
+ // Don't clear the cache on destruction so we can re-open the cache and test its size.
+ cache.setClearCacheOnDestruction(false);
+ }
+
+ SubQNetworkDiskCache cache;
+ cache.setCacheDirectory(tempDir.path());
+ QCOMPARE(cache.cacheSize(), cacheSize);
cache.clear();
QCOMPARE(cache.cacheSize(), qint64(0));
}
diff --git a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
index 115d111974..445e6a2d98 100644
--- a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
+++ b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
@@ -1128,6 +1128,7 @@ void tst_QSslCertificate::verify()
#if QT_CONFIG(securetransport)
QSKIP("Not implemented in SecureTransport");
#endif
+
QList<QSslError> errors;
QList<QSslCertificate> toVerify;
diff --git a/tests/auto/tools/moc/enum_with_include.h b/tests/auto/tools/moc/enum_with_include.h
index b8abf77f12..cd53ba6a28 100644
--- a/tests/auto/tools/moc/enum_with_include.h
+++ b/tests/auto/tools/moc/enum_with_include.h
@@ -34,6 +34,11 @@ class Foo : public QObject {
enum en {
#include <enum_inc.h>
};
+
+ enum class en2 {
+ #include <enum_inc.h>
+ reference = 42
+ };
Q_OBJECT
};
#endif
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 0bdf61e1e1..29158faf95 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -150,6 +150,8 @@ private slots:
void checkFocusAfterActivationChanges_data();
void checkFocusAfterActivationChanges();
void dragSelectAfterNewPress();
+ void dragWithSecondClick_data();
+ void dragWithSecondClick();
private:
static QAbstractItemView *viewFromString(const QByteArray &viewType, QWidget *parent = nullptr)
{
@@ -2511,5 +2513,98 @@ void tst_QAbstractItemView::dragSelectAfterNewPress()
QVERIFY(selected.contains(model.index(i, 0)));
}
+void tst_QAbstractItemView::dragWithSecondClick_data()
+{
+ QTest::addColumn<QString>("viewClass");
+ QTest::addColumn<bool>("doubleClick");
+ for (QString viewClass : {"QListView", "QTreeView"}) {
+ QTest::addRow("DoubleClick") << viewClass << true;
+ QTest::addRow("Two Single Clicks") << viewClass << false;
+ }
+}
+
+// inject the ability to record which indexes get dragged into any QAbstractItemView class
+struct DragRecorder
+{
+ virtual ~DragRecorder() = default;
+ bool dragStarted = false;
+ QModelIndexList draggedIndexes;
+ QAbstractItemView *view;
+};
+
+template<class ViewClass>
+class DragRecorderView : public ViewClass, public DragRecorder
+{
+public:
+ DragRecorderView()
+ { view = this; }
+protected:
+ void startDrag(Qt::DropActions) override
+ {
+ draggedIndexes = ViewClass::selectedIndexes();
+ dragStarted = true;
+ }
+};
+
+void tst_QAbstractItemView::dragWithSecondClick()
+{
+ QFETCH(QString, viewClass);
+ QFETCH(bool, doubleClick);
+
+ QStandardItemModel model;
+ QStandardItem *parentItem = model.invisibleRootItem();
+ for (int i = 0; i < 10; ++i) {
+ QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
+ item->setDragEnabled(true);
+ item->setEditable(false);
+ parentItem->appendRow(item);
+ }
+
+ std::unique_ptr<DragRecorder> dragRecorder;
+ if (viewClass == "QTreeView")
+ dragRecorder.reset(new DragRecorderView<QTreeView>);
+ else if (viewClass == "QListView")
+ dragRecorder.reset(new DragRecorderView<QListView>);
+
+ QAbstractItemView *view = dragRecorder->view;
+ view->setModel(&model);
+ view->setFixedSize(160, 650); // Minimum width for windows with frame on Windows 8
+ view->setSelectionMode(QAbstractItemView::MultiSelection);
+ view->setDragDropMode(QAbstractItemView::InternalMove);
+ centerOnScreen(view);
+ moveCursorAway(view);
+ view->show();
+ QVERIFY(QTest::qWaitForWindowExposed(view));
+
+ QModelIndex index0 = model.index(0, 0);
+ QModelIndex index1 = model.index(1, 0);
+ // Select item 0 using a single click
+ QTest::mouseClick(view->viewport(), Qt::LeftButton, Qt::NoModifier,
+ view->visualRect(index0).center());
+ QCOMPARE(view->currentIndex(), index0);
+
+ if (doubleClick) {
+ // press on same item within the double click interval
+ QTest::mouseDClick(view->viewport(), Qt::LeftButton, Qt::NoModifier,
+ view->visualRect(index0).center());
+ } else {
+ // or on different item with a slow second press
+ QTest::mousePress(view->viewport(), Qt::LeftButton, Qt::NoModifier,
+ view->visualRect(index1).center());
+ }
+ // then drag far enough with left button held
+ const QPoint dragTo = view->visualRect(index1).center()
+ + QPoint(2 * QApplication::startDragDistance(),
+ 2 * QApplication::startDragDistance());
+ QMouseEvent mouseMoveEvent(QEvent::MouseMove, dragTo,
+ Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
+ QVERIFY(QApplication::sendEvent(view->viewport(), &mouseMoveEvent));
+ // twice since the view will first enter dragging state, then start the drag
+ // (not necessary to actually move the mouse)
+ QVERIFY(QApplication::sendEvent(view->viewport(), &mouseMoveEvent));
+ QVERIFY(dragRecorder->dragStarted);
+ QTest::mouseRelease(view->viewport(), Qt::LeftButton, Qt::NoModifier, dragTo);
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index dadb9f836c..875b2c08e5 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -169,6 +169,8 @@ private slots:
void itemAlignment();
void internalDragDropMove_data();
void internalDragDropMove();
+ void scrollOnRemove_data();
+ void scrollOnRemove();
};
// Testing get/set functions
@@ -2550,6 +2552,7 @@ void tst_QListView::internalDragDropMove_data()
| Qt::ItemIsEditable
| Qt::ItemIsDragEnabled;
+ const QStringList unchanged = QStringList{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
const QStringList reordered = QStringList{"0", "2", "3", "4", "5", "6", "7", "8", "9", "1"};
const QStringList replaced = QStringList{"0", "2", "3", "4", "1", "6", "7", "8", "9"};
@@ -2564,7 +2567,8 @@ void tst_QListView::internalDragDropMove_data()
<< Qt::MoveAction
<< defaultFlags
<< modelMoves
- << reordered;
+ // listview in IconMode doesn't change the model
+ << ((viewMode == QListView::IconMode && !modelMoves) ? unchanged : reordered);
QTest::newRow((rowName + ", only move").constData())
<< viewMode
@@ -2573,7 +2577,8 @@ void tst_QListView::internalDragDropMove_data()
<< Qt::MoveAction
<< defaultFlags
<< modelMoves
- << reordered;
+ // listview in IconMode doesn't change the model
+ << ((viewMode == QListView::IconMode && !modelMoves) ? unchanged : reordered);
QTest::newRow((rowName + ", replace item").constData())
<< viewMode
@@ -2719,5 +2724,72 @@ void tst_QListView::internalDragDropMove()
}
+void tst_QListView::scrollOnRemove_data()
+{
+ QTest::addColumn<QListView::ViewMode>("viewMode");
+ QTest::addColumn<QAbstractItemView::SelectionMode>("selectionMode");
+
+ const QMetaObject &mo = QListView::staticMetaObject;
+ const auto viewModeEnum = mo.enumerator(mo.indexOfEnumerator("ViewMode"));
+ const auto selectionModeEnum = mo.enumerator(mo.indexOfEnumerator("SelectionMode"));
+ for (auto viewMode : { QListView::ListMode, QListView::IconMode }) {
+ const char *viewModeName = viewModeEnum.valueToKey(viewMode);
+ for (int index = 0; index < selectionModeEnum.keyCount(); ++index) {
+ const auto selectionMode = QAbstractItemView::SelectionMode(selectionModeEnum.value(index));
+ const char *selectionModeName = selectionModeEnum.valueToKey(selectionMode);
+ QTest::addRow("%s, %s", viewModeName, selectionModeName) << viewMode << selectionMode;
+ }
+ }
+}
+
+void tst_QListView::scrollOnRemove()
+{
+ QFETCH(QListView::ViewMode, viewMode);
+ QFETCH(QAbstractItemView::SelectionMode, selectionMode);
+
+ QPixmap pixmap;
+ if (viewMode == QListView::IconMode) {
+ pixmap = QPixmap(25, 25);
+ pixmap.fill(Qt::red);
+ }
+
+ QStandardItemModel model;
+ for (int i = 0; i < 50; ++i) {
+ QStandardItem *item = new QStandardItem(QString::number(i));
+ item->setIcon(pixmap);
+ model.appendRow(item);
+ }
+
+ QWidget widget;
+ QListView view(&widget);
+ view.setFixedSize(100, 100);
+ view.setAutoScroll(true);
+ if (viewMode == QListView::IconMode)
+ view.setWrapping(true);
+ view.setModel(&model);
+ view.setSelectionMode(selectionMode);
+ view.setViewMode(viewMode);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ QCOMPARE(view.verticalScrollBar()->value(), 0);
+ const QModelIndex item25 = model.index(25, 0);
+ view.scrollTo(item25);
+ QTRY_VERIFY(view.verticalScrollBar()->value() > 0); // layout and scrolling are delayed
+ const int item25Position = view.verticalScrollBar()->value();
+ // selecting a fully visible item shouldn't scroll
+ view.selectionModel()->setCurrentIndex(item25, QItemSelectionModel::SelectCurrent);
+ QTRY_COMPARE(view.verticalScrollBar()->value(), item25Position);
+
+ // removing the selected item might scroll if another item is selected
+ model.removeRow(25);
+
+ // if nothing is selected now, then the view should not have scrolled
+ if (!view.selectionModel()->selectedIndexes().count())
+ QTRY_COMPARE(view.verticalScrollBar()->value(), item25Position);
+}
+
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"
diff --git a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
index 89c4a74739..364bc36dff 100644
--- a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
+++ b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
@@ -113,6 +113,8 @@ private slots:
#endif
void fileSystemModel_data();
void fileSystemModel();
+ void fileDialog_data();
+ void fileDialog();
void changingModel_data();
void changingModel();
@@ -695,7 +697,26 @@ void tst_QCompleter::fileSystemModel()
#ifdef Q_OS_WINRT
QSKIP("WinRT cannot access directories outside of the application's sandbox");
#endif
- //QFileSystemModel is assync.
+ //QFileSystemModel is async.
+ filter(true);
+}
+
+/*!
+ In the file dialog, the completer uses the EditRole.
+ See QTBUG-94799
+*/
+void tst_QCompleter::fileDialog_data()
+{
+ fileSystemModel_data();
+ completer->setCompletionRole(Qt::EditRole);
+}
+
+void tst_QCompleter::fileDialog()
+{
+#ifdef Q_OS_WINRT
+ QSKIP("WinRT cannot access directories outside of the application's sandbox");
+#endif
+ //QFileSystemModel is async.
filter(true);
}
diff --git a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
index 456d0d55e0..c670147920 100644
--- a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
+++ b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -1370,19 +1370,19 @@ void tst_QDateTimeEdit::editingRanged()
QFETCH(QString, userInput);
QFETCH(QDateTime, expected);
- QDateTimeEdit *edit;
+ QScopedPointer<QDateTimeEdit> edit;
if (minTime.isValid()) {
- edit = new QDateTimeEdit;
+ edit.reset(new QDateTimeEdit);
edit->setDisplayFormat("dd.MM.yyyy hh:mm");
edit->setDateTimeRange(QDateTime(minDate, minTime), QDateTime(maxDate, maxTime));
} else {
- edit = new QDateEdit;
+ edit.reset(new QDateEdit);
edit->setDisplayFormat("dd.MM.yyyy");
edit->setDateRange(minDate, maxDate);
}
int callCount = 0;
- connect(edit, &QDateTimeEdit::dateTimeChanged, [&](const QDateTime &dateTime) {
+ connect(edit.get(), &QDateTimeEdit::dateTimeChanged, [&](const QDateTime &dateTime) {
++callCount;
if (minTime.isValid()) {
QVERIFY(dateTime >= QDateTime(minDate, minTime));
@@ -1394,15 +1394,15 @@ void tst_QDateTimeEdit::editingRanged()
});
edit->show();
- QApplication::setActiveWindow(edit);
- if (!QTest::qWaitForWindowActive(edit))
+ QApplication::setActiveWindow(edit.get());
+ if (!QTest::qWaitForWindowActive(edit.get()))
QSKIP("Failed to make window active, aborting");
edit->setFocus();
// with keyboard tracking, never get a signal with an out-of-range value
edit->setKeyboardTracking(true);
- QTest::keyClicks(edit, userInput);
- QTest::keyClick(edit, Qt::Key_Return);
+ QTest::keyClicks(edit.get(), userInput);
+ QTest::keyClick(edit.get(), Qt::Key_Return);
QVERIFY(callCount > 0);
// QDateTimeEdit blocks these dates from being entered - see QTBUG-65
@@ -1418,12 +1418,10 @@ void tst_QDateTimeEdit::editingRanged()
callCount = 0;
edit->setKeyboardTracking(false);
- QTest::keyClicks(edit, userInput);
- QTest::keyClick(edit, Qt::Key_Return);
+ QTest::keyClicks(edit.get(), userInput);
+ QTest::keyClick(edit.get(), Qt::Key_Return);
QCOMPARE(edit->dateTime(), expected);
QCOMPARE(callCount, 1);
-
- delete edit;
}
void tst_QDateTimeEdit::wrappingTime_data()
@@ -3807,7 +3805,6 @@ void tst_QDateTimeEdit::deleteCalendarWidget()
{
{
// setup
- QCalendarWidget *cw = 0;
QDateEdit edit;
QVERIFY(!edit.calendarWidget());
edit.setCalendarPopup(true);
@@ -3815,8 +3812,7 @@ void tst_QDateTimeEdit::deleteCalendarWidget()
edit.calendarWidget()->setObjectName("cw1");;
// delete
- cw = edit.calendarWidget();
- delete cw;
+ delete edit.calendarWidget();
// it should create a new widget
QVERIFY(edit.calendarWidget());
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index 6408df3f11..7c2203deb4 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -292,6 +292,7 @@ private slots:
void clearButtonVisibleAfterSettingText_QTBUG_45518();
void sideWidgets();
void sideWidgetsActionEvents();
+ void sideWidgetsEffectiveMargins();
void shouldShowPlaceholderText_data();
void shouldShowPlaceholderText();
@@ -4646,6 +4647,71 @@ void tst_QLineEdit::sideWidgetsActionEvents()
QCOMPARE(toolButton2->x(), toolButton1X);
}
+/*!
+ Verify that side widgets are positioned correctly and result in
+ correct effective text margins.
+*/
+void tst_QLineEdit::sideWidgetsEffectiveMargins()
+{
+#ifndef QT_BUILD_INTERNAL
+ QSKIP("This test requires a developer build.");
+#else
+ QLineEdit edit;
+ edit.setPlaceholderText("placeholder");
+ edit.setClearButtonEnabled(true);
+ edit.show();
+ QLineEditPrivate *priv = QLineEditPrivate::get(&edit);
+ const auto sideWidgetParameters = priv->sideWidgetParameters();
+ const int sideWidgetWidth = sideWidgetParameters.widgetWidth + sideWidgetParameters.margin;
+ QVERIFY(QTest::qWaitForWindowExposed(&edit));
+
+ QCOMPARE(priv->effectiveTextMargins().left(), 0);
+ QCOMPARE(priv->effectiveTextMargins().right(), 0);
+
+ edit.setText("Left to right"); // clear button fades in on the right
+ QCOMPARE(priv->effectiveTextMargins().left(), 0);
+ QCOMPARE(priv->effectiveTextMargins().right(), sideWidgetWidth);
+ edit.clear();
+ QCOMPARE(priv->effectiveTextMargins().left(), 0);
+ QCOMPARE(priv->effectiveTextMargins().right(), 0);
+
+ edit.setLayoutDirection(Qt::RightToLeft);
+ edit.setText("ئۇيغۇر تىلى"); // clear button fades in on the left
+ QCOMPARE(priv->effectiveTextMargins().left(), sideWidgetWidth);
+ QCOMPARE(priv->effectiveTextMargins().right(), 0);
+ edit.clear();
+ QCOMPARE(priv->effectiveTextMargins().left(), 0);
+ QCOMPARE(priv->effectiveTextMargins().right(), 0);
+
+ edit.setLayoutDirection(Qt::LeftToRight);
+
+ const QIcon leftIcon = edit.style()->standardIcon(QStyle::SP_FileIcon);
+ const QIcon rightIcon = edit.style()->standardIcon(QStyle::SP_DirIcon);
+ edit.addAction(leftIcon, QLineEdit::ActionPosition::LeadingPosition);
+ QCOMPARE(priv->effectiveTextMargins().left(), sideWidgetWidth);
+ QCOMPARE(priv->effectiveTextMargins().right(), 0);
+
+ edit.addAction(rightIcon, QLineEdit::ActionPosition::TrailingPosition);
+ QCOMPARE(priv->effectiveTextMargins().left(), sideWidgetWidth);
+ QCOMPARE(priv->effectiveTextMargins().right(), sideWidgetWidth);
+
+ edit.setText("Left to right"); // clear button on the right
+ QCOMPARE(priv->effectiveTextMargins().left(), sideWidgetWidth);
+ QCOMPARE(priv->effectiveTextMargins().right(), 2 * sideWidgetWidth);
+ edit.clear();
+ QCOMPARE(priv->effectiveTextMargins().left(), sideWidgetWidth);
+ QCOMPARE(priv->effectiveTextMargins().right(), sideWidgetWidth);
+
+ edit.setLayoutDirection(Qt::RightToLeft);
+ edit.setText("ئۇيغۇر تىلى"); // clear button fades in on the left
+ QCOMPARE(priv->effectiveTextMargins().left(), 2 * sideWidgetWidth);
+ QCOMPARE(priv->effectiveTextMargins().right(), sideWidgetWidth);
+ edit.clear();
+ QCOMPARE(priv->effectiveTextMargins().left(), sideWidgetWidth);
+ QCOMPARE(priv->effectiveTextMargins().right(), sideWidgetWidth);
+#endif
+}
+
Q_DECLARE_METATYPE(Qt::AlignmentFlag)
void tst_QLineEdit::shouldShowPlaceholderText_data()
{
diff --git a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
index 79a963f532..f04f803ecf 100644
--- a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
+++ b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
@@ -98,6 +98,9 @@ private slots:
void mouseReleaseOutsideTabBar();
+ void scrollButtons_data();
+ void scrollButtons();
+
private:
void checkPositions(const TabBar &tabbar, const QList<int> &positions);
};
@@ -869,5 +872,71 @@ void tst_QTabBar::checkPositions(const TabBar &tabbar, const QList<int> &positio
}
}
+void tst_QTabBar::scrollButtons_data()
+{
+ QTest::addColumn<QTabWidget::TabPosition>("tabPosition");
+ QTest::addColumn<Qt::LayoutDirection>("layoutDirection");
+
+ for (auto ld : {Qt::LeftToRight, Qt::RightToLeft}) {
+ const char *ldStr = ld == Qt::LeftToRight ? "LTR" : "RTL";
+ QTest::addRow("North, %s", ldStr) << QTabWidget::North << ld;
+ QTest::addRow("South, %s", ldStr) << QTabWidget::South << ld;
+ QTest::addRow("West, %s", ldStr) << QTabWidget::West << ld;
+ QTest::addRow("East, %s", ldStr) << QTabWidget::East << ld;
+ }
+}
+
+void tst_QTabBar::scrollButtons()
+{
+ QFETCH(QTabWidget::TabPosition, tabPosition);
+ QFETCH(Qt::LayoutDirection, layoutDirection);
+
+ QWidget window;
+ QTabWidget tabWidget(&window);
+ tabWidget.setLayoutDirection(layoutDirection);
+ tabWidget.setTabPosition(tabPosition);
+ tabWidget.setElideMode(Qt::ElideNone);
+ tabWidget.setUsesScrollButtons(true);
+
+ const int tabCount = 5;
+ for (int i = 0; i < tabCount; ++i)
+ {
+ const QString num = QString::number(i);
+ tabWidget.addTab(new QPushButton(num), num + " - Really long tab name to force arrows");
+ }
+ tabWidget.move(0, 0);
+ tabWidget.resize(tabWidget.minimumSizeHint());
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ auto *leftB = tabWidget.tabBar()->findChild<QAbstractButton*>(QStringLiteral("ScrollLeftButton"));
+ auto *rightB = tabWidget.tabBar()->findChild<QAbstractButton*>(QStringLiteral("ScrollRightButton"));
+
+ QVERIFY(leftB->isVisible());
+ QVERIFY(!leftB->isEnabled());
+ QVERIFY(rightB->isVisible());
+ QVERIFY(rightB->isEnabled());
+ QVERIFY(!tabWidget.tabBar()->tabRect(1).intersects(tabWidget.tabBar()->rect()));
+
+ int index = 0;
+ for (; index < tabWidget.count(); ++index) {
+ QCOMPARE(leftB->isEnabled(), index > 0);
+ QCOMPARE(rightB->isEnabled(), index < tabWidget.count() - 1);
+ QVERIFY(tabWidget.tabBar()->tabRect(index).intersects(tabWidget.tabBar()->rect()));
+ QCOMPARE(tabWidget.tabBar()->tabAt(tabWidget.tabBar()->rect().center()), index);
+ if (rightB->isEnabled())
+ rightB->click();
+ }
+ for (--index; index >= 0; --index) {
+ QCOMPARE(leftB->isEnabled(), index >= 0);
+ QCOMPARE(rightB->isEnabled(), index < tabWidget.count() - 1);
+
+ QVERIFY(tabWidget.tabBar()->tabRect(index).intersects(tabWidget.tabBar()->rect()));
+ if (leftB->isEnabled())
+ leftB->click();
+ }
+ QVERIFY(!leftB->isEnabled());
+}
+
QTEST_MAIN(tst_QTabBar)
#include "tst_qtabbar.moc"
diff --git a/tests/benchmarks/corelib/io/qdiriterator/main.cpp b/tests/benchmarks/corelib/io/qdiriterator/main.cpp
index eae752d99a..0bbe755f4e 100644
--- a/tests/benchmarks/corelib/io/qdiriterator/main.cpp
+++ b/tests/benchmarks/corelib/io/qdiriterator/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -57,24 +57,23 @@ private slots:
void data();
};
-
void tst_qdiriterator::data()
{
-#if defined(Q_OS_WIN)
- const char *qtdir = "C:\\depot\\qt\\main";
-#else
- const char *qtdir = ::getenv("QTDIR");
-#endif
- if (!qtdir) {
- fprintf(stderr, "QTDIR not set\n");
- exit(1);
- }
+ const char hereRelative[] = "tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro";
+ QString proname = QTest::qFindTestData(QStringLiteral("qdiriterator.pro"));
+ // qDebug("Source pro: %s", proname.toLocal8Bit().constData());
+ // Size chopped counts the '\0', making up for the omitted leading '/':
+ QByteArray dir(QStringRef(&proname).chopped(sizeof(hereRelative)).toLocal8Bit());
+ // qDebug("Root dir: %s", dir.constData());
QTest::addColumn<QByteArray>("dirpath");
- QByteArray ba = QByteArray(qtdir) + "/src/corelib";
- QByteArray ba1 = ba + "/io";
- QTest::newRow(ba) << ba;
- //QTest::newRow(ba1) << ba1;
+ const QByteArray ba = dir + "/src/corelib";
+
+ if (!QFileInfo(QString::fromLocal8Bit(ba)).isDir())
+ QSKIP("Missing Qt directory");
+
+ QTest::newRow("corelib") << ba;
+ QTest::newRow("corelib/io") << (ba + "/io");
}
#ifdef Q_OS_WIN
diff --git a/tests/benchmarks/corelib/io/qfile/main.cpp b/tests/benchmarks/corelib/io/qfile/main.cpp
index 1966b30773..eca2f642b1 100644
--- a/tests/benchmarks/corelib/io/qfile/main.cpp
+++ b/tests/benchmarks/corelib/io/qfile/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -108,72 +108,110 @@ private slots:
void readBigFile_Win32();
private:
- void readBigFile_data(BenchmarkType type, QIODevice::OpenModeFlag t, QIODevice::OpenModeFlag b);
+ void readFile_data(BenchmarkType type, QIODevice::OpenModeFlag t, QIODevice::OpenModeFlag b);
void readBigFile();
- void readSmallFiles_data(BenchmarkType type, QIODevice::OpenModeFlag t, QIODevice::OpenModeFlag b);
void readSmallFiles();
- void createFile();
- void fillFile(int factor=FACTOR);
- void removeFile();
- void createSmallFiles();
- void removeSmallFiles();
- QString filename;
- QString tmpDirName;
+
+ class TestDataDir : public QTemporaryDir
+ {
+ void createFile();
+ void createSmallFiles();
+ public:
+ TestDataDir() : QTemporaryDir(), fail(errorString().toLocal8Bit())
+ {
+ if (fail.isEmpty() && !QTemporaryDir::isValid())
+ fail = "Failed to create temporary directory for data";
+ if (isValid())
+ createSmallFiles();
+ if (isValid())
+ createFile();
+ if (isValid())
+ QTest::qSleep(2000); // let IO settle
+ }
+ bool isValid() { return QTemporaryDir::isValid() && fail.isEmpty(); }
+ QByteArray fail;
+ QString filename;
+ } tempDir;
};
Q_DECLARE_METATYPE(tst_qfile::BenchmarkType)
Q_DECLARE_METATYPE(QIODevice::OpenMode)
Q_DECLARE_METATYPE(QIODevice::OpenModeFlag)
-void tst_qfile::createFile()
+/* None of the tests modify the test data in tempDir, so it's OK to only create
+ * and tear down the directory once.
+ */
+void tst_qfile::TestDataDir::createFile()
{
- removeFile(); // Cleanup in case previous test case aborted before cleaning up
-
- QTemporaryFile tmpFile;
- tmpFile.setAutoRemove(false);
- if (!tmpFile.open())
- ::exit(1);
+ QFile tmpFile(filePath("testFile"));
+ if (!tmpFile.open(QIODevice::WriteOnly)) {
+ fail = "Unable to prepare files for test";
+ return;
+ }
+#if 0 // Varied data, rather than filling with '\0' bytes:
+ for (int row = 0; row < FACTOR; ++row) {
+ tmpFile.write(QByteArray().fill('0' + row % ('0' - 'z'), 80));
+ tmpFile.write("\n");
+ }
+#else
+ tmpFile.seek(FACTOR * 80);
+ tmpFile.putChar('\n');
+#endif
filename = tmpFile.fileName();
tmpFile.close();
}
-void tst_qfile::removeFile()
+void tst_qfile::TestDataDir::createSmallFiles()
{
- if (!filename.isEmpty())
- QFile::remove(filename);
+ for (int i = 0; i < 1000; ++i) {
+ QFile f(filePath(QString::number(i)));
+ if (!f.open(QIODevice::WriteOnly)) {
+ fail = "Unable to prepare small files for test";
+ return;
+ }
+ f.seek(511);
+ f.putChar('\n');
+ f.close();
+ }
}
-void tst_qfile::fillFile(int factor)
+void tst_qfile::initTestCase()
{
- QFile tmpFile(filename);
- tmpFile.open(QIODevice::WriteOnly);
- //for (int row=0; row<factor; ++row) {
- // tmpFile.write(QByteArray().fill('0'+row%('0'-'z'), 80));
- // tmpFile.write("\n");
- //}
- tmpFile.seek(factor*80);
- tmpFile.putChar('\n');
- tmpFile.close();
- // let IO settle
- QTest::qSleep(2000);
+ QVERIFY2(tempDir.isValid(), tempDir.fail.constData());
}
-void tst_qfile::initTestCase()
+void tst_qfile::cleanupTestCase()
{
}
-void tst_qfile::cleanupTestCase()
+void tst_qfile::readFile_data(BenchmarkType type, QIODevice::OpenModeFlag t,
+ QIODevice::OpenModeFlag b)
{
+ QTest::addColumn<tst_qfile::BenchmarkType>("testType");
+ QTest::addColumn<int>("blockSize");
+ QTest::addColumn<QFile::OpenModeFlag>("textMode");
+ QTest::addColumn<QFile::OpenModeFlag>("bufferedMode");
+
+ QByteArray flagstring;
+ if (t & QIODevice::Text)
+ flagstring += "textMode ";
+ if (b & QIODevice::Unbuffered)
+ flagstring += "unbuffered ";
+ if (flagstring.isEmpty())
+ flagstring = "none";
+
+ const int kbs[] = {1, 2, 8, 16, 32, 512};
+ for (int kb : kbs) {
+ const int size = 1024 * kb;
+ QTest::addRow("BS: %d, Flags: %s", size, flagstring.constData())
+ << type << size << t << b;
+ }
}
void tst_qfile::readBigFile_QFile() { readBigFile(); }
void tst_qfile::readBigFile_QFSFileEngine()
{
-#ifdef QT_BUILD_INTERNAL
readBigFile();
-#else
- QSKIP("This test requires -developer-build.");
-#endif
}
void tst_qfile::readBigFile_posix()
{
@@ -183,54 +221,36 @@ void tst_qfile::readBigFile_Win32() { readBigFile(); }
void tst_qfile::readBigFile_QFile_data()
{
- readBigFile_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
- readBigFile_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
- readBigFile_data(QFileBenchmark, QIODevice::Text, QIODevice::NotOpen);
- readBigFile_data(QFileBenchmark, QIODevice::Text, QIODevice::Unbuffered);
+ readFile_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
+ readFile_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
+ readFile_data(QFileBenchmark, QIODevice::Text, QIODevice::NotOpen);
+ readFile_data(QFileBenchmark, QIODevice::Text, QIODevice::Unbuffered);
}
void tst_qfile::readBigFile_QFSFileEngine_data()
{
#ifdef QT_BUILD_INTERNAL
- readBigFile_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
- readBigFile_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
- readBigFile_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::NotOpen);
- readBigFile_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::Unbuffered);
+ // Support for buffering dropped at 5.10, so only test Unbuffered
+ readFile_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
+ readFile_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::Unbuffered);
#else
- QTest::addColumn<int>("dummy");
- QTest::newRow("Test will be skipped") << -1;
+ QSKIP("This test requires -developer-build.");
#endif
}
void tst_qfile::readBigFile_posix_data()
{
- readBigFile_data(PosixBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
+ readFile_data(PosixBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
}
void tst_qfile::readBigFile_Win32_data()
{
- readBigFile_data(Win32Benchmark, QIODevice::NotOpen, QIODevice::NotOpen);
-}
-
-
-void tst_qfile::readBigFile_data(BenchmarkType type, QIODevice::OpenModeFlag t, QIODevice::OpenModeFlag b)
-{
- QTest::addColumn<tst_qfile::BenchmarkType>("testType");
- QTest::addColumn<int>("blockSize");
- QTest::addColumn<QFile::OpenModeFlag>("textMode");
- QTest::addColumn<QFile::OpenModeFlag>("bufferedMode");
-
- const int bs[] = {1024, 1024*2, 1024*8, 1024*16, 1024*32,1024*512};
- int bs_entries = sizeof(bs)/sizeof(const int);
-
- QString flagstring;
- if (t & QIODevice::Text) flagstring += "textMode ";
- if (b & QIODevice::Unbuffered) flagstring += "unbuffered ";
- if (flagstring.isEmpty()) flagstring = "none";
-
- for (int i=0; i<bs_entries; ++i)
- QTest::newRow((QString("BS: %1, Flags: %2" )).arg(bs[i]).arg(flagstring).toLatin1().constData()) << type << bs[i] << t << b;
+#ifdef Q_OS_WIN
+ readFile_data(Win32Benchmark, QIODevice::NotOpen, QIODevice::NotOpen);
+#else
+ QSKIP("This is Windows only benchmark.");
+#endif
}
void tst_qfile::readBigFile()
@@ -240,18 +260,10 @@ void tst_qfile::readBigFile()
QFETCH(QFile::OpenModeFlag, textMode);
QFETCH(QFile::OpenModeFlag, bufferedMode);
-#ifndef Q_OS_WIN
- if (testType == Win32Benchmark)
- QSKIP("This is Windows only benchmark.");
-#endif
-
- char *buffer = new char[BUFSIZE];
- createFile();
- fillFile();
-
+ char buffer[BUFSIZE];
switch (testType) {
case(QFileBenchmark): {
- QFile file(filename);
+ QFile file(tempDir.filename);
file.open(QIODevice::ReadOnly|textMode|bufferedMode);
QBENCHMARK {
while(!file.atEnd())
@@ -263,7 +275,7 @@ void tst_qfile::readBigFile()
break;
#ifdef QT_BUILD_INTERNAL
case(QFSFileEngineBenchmark): {
- QFSFileEngine fse(filename);
+ QFSFileEngine fse(tempDir.filename);
fse.open(QIODevice::ReadOnly|textMode|bufferedMode);
QBENCHMARK {
//qWarning() << fse.supportsExtension(QAbstractFileEngine::AtEndExtension);
@@ -275,7 +287,7 @@ void tst_qfile::readBigFile()
break;
#endif
case(PosixBenchmark): {
- QByteArray data = filename.toLocal8Bit();
+ QByteArray data = tempDir.filename.toLocal8Bit();
const char* cfilename = data.constData();
FILE* cfile = ::fopen(cfilename, "rb");
QBENCHMARK {
@@ -295,7 +307,7 @@ void tst_qfile::readBigFile()
HANDLE hndl;
// ensure we don't account string conversion
- wchar_t* cfilename = (wchar_t*)filename.utf16();
+ const wchar_t *cfilename = reinterpret_cast<const wchar_t *>(tempDir.filename.utf16());
#ifndef Q_OS_WINRT
hndl = CreateFile(cfilename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
@@ -325,9 +337,6 @@ void tst_qfile::readBigFile()
}
break;
}
-
- removeFile();
- delete[] buffer;
}
void tst_qfile::seek_data()
@@ -348,12 +357,9 @@ void tst_qfile::seek()
QFETCH(tst_qfile::BenchmarkType, testType);
int i = 0;
- createFile();
- fillFile();
-
switch (testType) {
case(QFileBenchmark): {
- QFile file(filename);
+ QFile file(tempDir.filename);
file.open(QIODevice::ReadOnly);
QBENCHMARK {
i=(i+1)%sp_size;
@@ -364,8 +370,8 @@ void tst_qfile::seek()
break;
#ifdef QT_BUILD_INTERNAL
case(QFSFileEngineBenchmark): {
- QFSFileEngine fse(filename);
- fse.open(QIODevice::ReadOnly);
+ QFSFileEngine fse(tempDir.filename);
+ fse.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
QBENCHMARK {
i=(i+1)%sp_size;
fse.seek(seekpos[i]);
@@ -375,7 +381,7 @@ void tst_qfile::seek()
break;
#endif
case(PosixBenchmark): {
- QByteArray data = filename.toLocal8Bit();
+ QByteArray data = tempDir.filename.toLocal8Bit();
const char* cfilename = data.constData();
FILE* cfile = ::fopen(cfilename, "rb");
QBENCHMARK {
@@ -394,7 +400,7 @@ void tst_qfile::seek()
HANDLE hndl;
// ensure we don't account string conversion
- wchar_t* cfilename = (wchar_t*)filename.utf16();
+ const wchar_t *cfilename = reinterpret_cast<const wchar_t *>(tempDir.filename.utf16());
#ifndef Q_OS_WINRT
hndl = CreateFile(cfilename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
@@ -413,13 +419,11 @@ void tst_qfile::seek()
}
CloseHandle(hndl);
#else
- QFAIL("Not running on a Windows plattform!");
+ QFAIL("Not running on a Windows platform!");
#endif
}
break;
}
-
- removeFile();
}
void tst_qfile::open_data()
@@ -440,13 +444,11 @@ void tst_qfile::open()
{
QFETCH(tst_qfile::BenchmarkType, testType);
- createFile();
-
switch (testType) {
case(QFileBenchmark): {
QBENCHMARK {
- QFile file( filename );
- file.open( QIODevice::ReadOnly );
+ QFile file(tempDir.filename);
+ file.open(QIODevice::ReadOnly);
file.close();
}
}
@@ -454,8 +456,8 @@ void tst_qfile::open()
#ifdef QT_BUILD_INTERNAL
case(QFSFileEngineBenchmark): {
QBENCHMARK {
- QFSFileEngine fse(filename);
- fse.open(QIODevice::ReadOnly);
+ QFSFileEngine fse(tempDir.filename);
+ fse.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
fse.close();
}
}
@@ -463,7 +465,7 @@ void tst_qfile::open()
#endif
case(PosixBenchmark): {
// ensure we don't account toLocal8Bit()
- QByteArray data = filename.toLocal8Bit();
+ QByteArray data = tempDir.filename.toLocal8Bit();
const char* cfilename = data.constData();
QBENCHMARK {
@@ -474,7 +476,7 @@ void tst_qfile::open()
break;
case(QFileFromPosixBenchmark): {
// ensure we don't account toLocal8Bit()
- QByteArray data = filename.toLocal8Bit();
+ QByteArray data = tempDir.filename.toLocal8Bit();
const char* cfilename = data.constData();
FILE* cfile = ::fopen(cfilename, "rb");
@@ -491,7 +493,7 @@ void tst_qfile::open()
HANDLE hndl;
// ensure we don't account string conversion
- wchar_t* cfilename = (wchar_t*)filename.utf16();
+ const wchar_t *cfilename = reinterpret_cast<const wchar_t *>(tempDir.filename.utf16());
QBENCHMARK {
#ifndef Q_OS_WINRT
@@ -508,19 +510,13 @@ void tst_qfile::open()
}
break;
}
-
- removeFile();
}
void tst_qfile::readSmallFiles_QFile() { readSmallFiles(); }
void tst_qfile::readSmallFiles_QFSFileEngine()
{
-#ifdef QT_BUILD_INTERNAL
readSmallFiles();
-#else
- QSKIP("This test requires -developer-build.");
-#endif
}
void tst_qfile::readSmallFiles_posix()
{
@@ -533,82 +529,39 @@ void tst_qfile::readSmallFiles_Win32()
void tst_qfile::readSmallFiles_QFile_data()
{
- readSmallFiles_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
- readSmallFiles_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
- readSmallFiles_data(QFileBenchmark, QIODevice::Text, QIODevice::NotOpen);
- readSmallFiles_data(QFileBenchmark, QIODevice::Text, QIODevice::Unbuffered);
+ readFile_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
+ readFile_data(QFileBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
+ readFile_data(QFileBenchmark, QIODevice::Text, QIODevice::NotOpen);
+ readFile_data(QFileBenchmark, QIODevice::Text, QIODevice::Unbuffered);
}
void tst_qfile::readSmallFiles_QFSFileEngine_data()
{
#ifdef QT_BUILD_INTERNAL
- readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
- readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
- readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::NotOpen);
- readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::Unbuffered);
+ // Support for buffering dropped at 5.10, so only test Unbuffered
+ readFile_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
+ readFile_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::Unbuffered);
#else
- QTest::addColumn<int>("dummy");
- QTest::newRow("Test will be skipped") << -1;
+ QSKIP("This test requires -developer-build.");
#endif
}
void tst_qfile::readSmallFiles_posix_data()
{
- readSmallFiles_data(PosixBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
+ readFile_data(PosixBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
}
void tst_qfile::readSmallFiles_Win32_data()
{
- readSmallFiles_data(Win32Benchmark, QIODevice::NotOpen, QIODevice::NotOpen);
-}
-
-
-void tst_qfile::readSmallFiles_data(BenchmarkType type, QIODevice::OpenModeFlag t, QIODevice::OpenModeFlag b)
-{
- QTest::addColumn<tst_qfile::BenchmarkType>("testType");
- QTest::addColumn<int>("blockSize");
- QTest::addColumn<QFile::OpenModeFlag>("textMode");
- QTest::addColumn<QFile::OpenModeFlag>("bufferedMode");
-
- const int bs[] = {1024, 1024*2, 1024*8, 1024*16, 1024*32,1024*512};
- int bs_entries = sizeof(bs)/sizeof(const int);
-
- QString flagstring;
- if (t & QIODevice::Text) flagstring += "textMode ";
- if (b & QIODevice::Unbuffered) flagstring += "unbuffered ";
- if (flagstring.isEmpty()) flagstring = "none";
-
- for (int i=0; i<bs_entries; ++i)
- QTest::newRow((QString("BS: %1, Flags: %2" )).arg(bs[i]).arg(flagstring).toLatin1().constData()) << type << bs[i] << t << b;
-
-}
-
-void tst_qfile::createSmallFiles()
-{
- QDir dir = QDir::temp();
- dir.mkdir("tst");
- dir.cd("tst");
- tmpDirName = dir.absolutePath();
-
- for (int i = 0; i < 1000; ++i) {
- QFile f(tmpDirName + QLatin1Char('/') + QString::number(i));
- f.open(QIODevice::WriteOnly);
- f.seek(511);
- f.putChar('\n');
- f.close();
- }
-}
-void tst_qfile::removeSmallFiles()
-{
- QDirIterator it(tmpDirName, QDirIterator::FollowSymlinks);
- while (it.hasNext())
- QFile::remove(it.next());
- QDir::temp().rmdir("tst");
+#ifdef Q_OS_WIN
+ readFile_data(Win32Benchmark, QIODevice::NotOpen, QIODevice::NotOpen);
+#else
+ QSKIP("This is Windows only benchmark.");
+#endif
}
-
void tst_qfile::readSmallFiles()
{
QFETCH(tst_qfile::BenchmarkType, testType);
@@ -616,22 +569,15 @@ void tst_qfile::readSmallFiles()
QFETCH(QFile::OpenModeFlag, textMode);
QFETCH(QFile::OpenModeFlag, bufferedMode);
-#ifndef Q_OS_WIN
- if (testType == Win32Benchmark)
- QSKIP("This is Windows only benchmark.");
-#endif
-
- createSmallFiles();
-
- QDir dir(tmpDirName);
+ QDir dir(tempDir.path());
const QStringList files = dir.entryList(QDir::NoDotAndDotDot|QDir::NoSymLinks|QDir::Files);
- char *buffer = new char[BUFSIZE];
+ char buffer[BUFSIZE];
switch (testType) {
case(QFileBenchmark): {
QList<QFile*> fileList;
Q_FOREACH(QString file, files) {
- QFile *f = new QFile(tmpDirName + QLatin1Char('/') + file);
+ QFile *f = new QFile(tempDir.filePath(file));
f->open(QIODevice::ReadOnly|textMode|bufferedMode);
fileList.append(f);
}
@@ -654,7 +600,7 @@ void tst_qfile::readSmallFiles()
case(QFSFileEngineBenchmark): {
QList<QFSFileEngine*> fileList;
Q_FOREACH(QString file, files) {
- QFSFileEngine *fse = new QFSFileEngine(tmpDirName + QLatin1Char('/') + file);
+ QFSFileEngine *fse = new QFSFileEngine(tempDir.filePath(file));
fse->open(QIODevice::ReadOnly|textMode|bufferedMode);
fileList.append(fse);
}
@@ -675,7 +621,7 @@ void tst_qfile::readSmallFiles()
case(PosixBenchmark): {
QList<FILE*> fileList;
Q_FOREACH(QString file, files) {
- fileList.append(::fopen(QFile::encodeName(tmpDirName + QLatin1Char('/') + file).constData(), "rb"));
+ fileList.append(::fopen(QFile::encodeName(tempDir.filePath(file)).constData(), "rb"));
}
QBENCHMARK {
@@ -700,7 +646,7 @@ void tst_qfile::readSmallFiles()
HANDLE hndl;
// ensure we don't account string conversion
- wchar_t* cfilename = (wchar_t*)filename.utf16();
+ const wchar_t *cfilename = reinterpret_cast<const wchar_t *>(tempDir.filename.utf16());
#ifndef Q_OS_WINRT
hndl = CreateFile(cfilename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
@@ -723,9 +669,6 @@ void tst_qfile::readSmallFiles()
}
break;
}
-
- removeSmallFiles();
- delete[] buffer;
}
QTEST_MAIN(tst_qfile)
diff --git a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro
index 1f56ad6ee6..89fea90d90 100644
--- a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro
+++ b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/testProcessLoopback.pro
@@ -1,4 +1,3 @@
-CONFIG += benchmark
CONFIG -= qt
CONFIG += cmdline
winrt: QMAKE_LFLAGS += /ENTRY:mainCRTStartup
diff --git a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
index 1fd3b9d5da..6cf7529d55 100644
--- a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
+++ b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2020 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -39,10 +39,16 @@ private slots:
void echoTest_performance();
};
+#ifdef Q_OS_WIN
+# define EXE ".exe"
+#else
+# define EXE ""
+#endif
+
void tst_QProcess::echoTest_performance()
{
QProcess process;
- process.start("testProcessLoopback/testProcessLoopback");
+ process.start(QFINDTESTDATA("testProcessLoopback/testProcessLoopback" EXE), QStringList());
QByteArray array;
array.resize(1024 * 1024);
diff --git a/tests/benchmarks/dbus/qdbusperformance/test/test.pro b/tests/benchmarks/dbus/qdbusperformance/test/test.pro
index ddc5410759..faa2fe81ba 100644
--- a/tests/benchmarks/dbus/qdbusperformance/test/test.pro
+++ b/tests/benchmarks/dbus/qdbusperformance/test/test.pro
@@ -1,3 +1,4 @@
+CONFIG += benchmark
SOURCES += ../tst_qdbusperformance.cpp
HEADERS += ../serverobject.h
TARGET = ../tst_qdbusperformance
diff --git a/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp b/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp
index 39c9129456..4bb71c4775 100644
--- a/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp
+++ b/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -79,7 +79,7 @@ void tst_QDBusPerformance::initTestCase()
#else
# define EXE ""
#endif
- proc.start(QFINDTESTDATA("server/server" EXE));
+ proc.start(QFINDTESTDATA("server/server" EXE), QStringList());
QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString()));
QVERIFY(proc.waitForReadyRead());
diff --git a/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp b/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
index 8d7e70f8c9..6a5d353324 100644
--- a/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
+++ b/tests/benchmarks/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
- ** Copyright (C) 2018 The Qt Company Ltd.
+ ** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -178,15 +178,18 @@ void tst_QSqlRecord::benchmarkRecord()
const auto tableName = qTableName("record", __FILE__, db);
{
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("create table " + tableName + " (id int NOT NULL, t_varchar varchar(20), "
+ QVERIFY_SQL(qry, exec("create table " + tableName +
+ " (id int NOT NULL, t_varchar varchar(20), "
"t_char char(20), primary key(id))"));
- for (int i = 0; i < 1000; i++)
+ // Limit to 500: at 600, the set-up takes nearly 5 minutes
+ for (int i = 0; i < 500; i++)
QVERIFY_SQL(qry, exec(QString("INSERT INTO " + tableName +
" VALUES (%1, 'VarChar%1', 'Char%1')").arg(i)));
QVERIFY_SQL(qry, exec(QString("SELECT * from ") + tableName));
QBENCHMARK {
while (qry.next())
qry.record();
+ QVERIFY(qry.seek(0));
}
}
tst_Databases::safeDropTables(db, QStringList() << tableName);
@@ -202,6 +205,7 @@ void tst_QSqlRecord::benchFieldName()
QBENCHMARK {
while (qry.next())
qry.value("r");
+ QVERIFY(qry.seek(0));
}
}
}
@@ -217,6 +221,7 @@ void tst_QSqlRecord::benchFieldIndex()
QBENCHMARK {
while (qry.next())
qry.value(0);
+ QVERIFY(qry.seek(0));
}
}
}