From ae18810d9334b628179c2aa19d06cfade25955cb Mon Sep 17 00:00:00 2001 From: Akira Kakuto Date: Wed, 5 May 2021 22:28:05 +0000 Subject: harfbuzz 2.8.1 git-svn-id: svn://tug.org/texlive/trunk@59092 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/libs/README | 4 +- Build/source/libs/harfbuzz/ChangeLog | 5 + Build/source/libs/harfbuzz/TLpatches/ChangeLog | 5 + Build/source/libs/harfbuzz/TLpatches/TL-Changes | 5 +- Build/source/libs/harfbuzz/configure | 24 +- .../libs/harfbuzz/harfbuzz-src/CMakeLists.txt | 6 +- Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog | 2608 ++++++++++++++++++++ .../source/libs/harfbuzz/harfbuzz-src/Makefile.am | 1 - Build/source/libs/harfbuzz/harfbuzz-src/NEWS | 9 + .../source/libs/harfbuzz/harfbuzz-src/config.h.in | 6 +- .../source/libs/harfbuzz/harfbuzz-src/configure.ac | 29 +- .../source/libs/harfbuzz/harfbuzz-src/meson.build | 16 +- .../libs/harfbuzz/harfbuzz-src/meson_options.txt | 4 +- .../libs/harfbuzz/harfbuzz-src/src/Makefile.am | 10 +- .../harfbuzz/harfbuzz-src/src/Makefile.sources | 2 + .../harfbuzz/harfbuzz-src/src/gen-tag-table.py | 16 +- .../harfbuzz-src/src/hb-aat-layout-ankr-table.hh | 8 +- .../harfbuzz-src/src/hb-aat-layout-common.hh | 7 +- .../harfbuzz-src/src/hb-aat-layout-feat-table.hh | 2 +- .../harfbuzz-src/src/hb-aat-layout-just-table.hh | 16 +- .../harfbuzz-src/src/hb-aat-layout-kerx-table.hh | 14 +- .../harfbuzz-src/src/hb-aat-layout-morx-table.hh | 4 +- .../harfbuzz-src/src/hb-aat-layout-opbd-table.hh | 8 +- .../harfbuzz-src/src/hb-aat-layout-trak-table.hh | 8 +- .../harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh | 4 +- .../libs/harfbuzz/harfbuzz-src/src/hb-array.hh | 2 +- .../harfbuzz-src/src/hb-cff-interp-common.hh | 2 +- .../libs/harfbuzz/harfbuzz-src/src/hb-config.hh | 7 +- .../libs/harfbuzz/harfbuzz-src/src/hb-debug.hh | 4 + .../harfbuzz/harfbuzz-src/src/hb-directwrite.cc | 2 +- .../libs/harfbuzz/harfbuzz-src/src/hb-map.hh | 16 +- .../libs/harfbuzz/harfbuzz-src/src/hb-null.hh | 20 +- .../libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh | 12 +- .../libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh | 98 +- .../harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh | 2 +- .../harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh | 51 +- .../harfbuzz-src/src/hb-ot-color-cbdt-table.hh | 12 +- .../harfbuzz-src/src/hb-ot-color-colr-table.hh | 483 +++- .../harfbuzz-src/src/hb-ot-color-cpal-table.hh | 8 +- .../harfbuzz-src/src/hb-ot-color-sbix-table.hh | 8 +- .../harfbuzz-src/src/hb-ot-color-svg-table.hh | 4 +- .../harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh | 2 +- .../harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh | 2 +- .../harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh | 2 +- .../harfbuzz-src/src/hb-ot-layout-base-table.hh | 36 +- .../harfbuzz-src/src/hb-ot-layout-common.hh | 521 +++- .../harfbuzz-src/src/hb-ot-layout-gdef-table.hh | 36 +- .../harfbuzz-src/src/hb-ot-layout-gpos-table.hh | 592 +++-- .../harfbuzz-src/src/hb-ot-layout-gsub-table.hh | 185 +- .../harfbuzz-src/src/hb-ot-layout-gsubgpos.hh | 596 +++-- .../harfbuzz-src/src/hb-ot-layout-jstf-table.hh | 32 +- .../libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc | 43 +- .../libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.hh | 3 +- .../harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh | 44 +- .../harfbuzz/harfbuzz-src/src/hb-ot-meta-table.hh | 4 +- .../harfbuzz/harfbuzz-src/src/hb-ot-name-table.hh | 7 +- .../harfbuzz/harfbuzz-src/src/hb-ot-post-table.hh | 4 +- .../src/hb-ot-shape-complex-arabic-fallback.hh | 4 +- .../harfbuzz-src/src/hb-ot-shape-fallback.cc | 4 +- .../harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh | 8 +- .../harfbuzz-src/src/hb-ot-var-avar-table.hh | 2 +- .../harfbuzz-src/src/hb-ot-var-fvar-table.hh | 2 +- .../harfbuzz-src/src/hb-ot-var-gvar-table.hh | 6 +- .../harfbuzz-src/src/hb-ot-var-hvar-table.hh | 24 +- .../harfbuzz-src/src/hb-ot-var-mvar-table.hh | 2 +- .../harfbuzz/harfbuzz-src/src/hb-ot-vorg-table.hh | 2 +- .../harfbuzz/harfbuzz-src/src/hb-priority-queue.hh | 151 ++ .../libs/harfbuzz/harfbuzz-src/src/hb-repacker.hh | 758 ++++++ .../libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh | 4 +- .../libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh | 89 +- .../harfbuzz/harfbuzz-src/src/hb-set-digest.hh | 8 + .../libs/harfbuzz/harfbuzz-src/src/hb-set.hh | 6 +- .../libs/harfbuzz/harfbuzz-src/src/hb-static.cc | 1 + .../harfbuzz/harfbuzz-src/src/hb-subset-input.cc | 3 - .../harfbuzz/harfbuzz-src/src/hb-subset-plan.cc | 53 +- .../harfbuzz/harfbuzz-src/src/hb-subset-plan.hh | 6 +- .../libs/harfbuzz/harfbuzz-src/src/hb-subset.cc | 166 +- .../libs/harfbuzz/harfbuzz-src/src/hb-unicode.hh | 4 +- .../libs/harfbuzz/harfbuzz-src/src/hb-vector.hh | 5 + Build/source/libs/harfbuzz/harfbuzz-src/src/hb.hh | 4 +- .../libs/harfbuzz/harfbuzz-src/src/meson.build | 2 + .../harfbuzz-src/src/test-priority-queue.cc | 89 + .../harfbuzz/harfbuzz-src/src/test-repacker.cc | 485 ++++ Build/source/libs/harfbuzz/version.ac | 2 +- 84 files changed, 6643 insertions(+), 908 deletions(-) create mode 100644 Build/source/libs/harfbuzz/harfbuzz-src/src/hb-priority-queue.hh create mode 100644 Build/source/libs/harfbuzz/harfbuzz-src/src/hb-repacker.hh create mode 100644 Build/source/libs/harfbuzz/harfbuzz-src/src/test-priority-queue.cc create mode 100644 Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc (limited to 'Build/source/libs') diff --git a/Build/source/libs/README b/Build/source/libs/README index d0a73e5cc8c..833a2cea6e1 100644 --- a/Build/source/libs/README +++ b/Build/source/libs/README @@ -25,8 +25,8 @@ graphite2 1.3.14 - checked 10apr20 http://sourceforge.net/projects/silgraphite/files/graphite2/ (requires C++11) -harfbuzz 2.8.0 - checked 18apr21 - https://github.com/harfbuzz/harfbuzz/releases/download/2.8.0/ +harfbuzz 2.8.1 - checked 06may21 + https://github.com/harfbuzz/harfbuzz/releases/download/2.8.1/ icu 68.2 - checked 13feb21 http://download.icu-project.org/files/icu4c/ diff --git a/Build/source/libs/harfbuzz/ChangeLog b/Build/source/libs/harfbuzz/ChangeLog index 99f03797515..c38c37f7b1a 100644 --- a/Build/source/libs/harfbuzz/ChangeLog +++ b/Build/source/libs/harfbuzz/ChangeLog @@ -1,3 +1,8 @@ +2021-05-06 Akira Kakuto + + Import harfbuzz-2.8.1. + * version.ac: Adjusted. + 2021-04-18 Akira Kakuto Import harfbuzz-2.8.0. diff --git a/Build/source/libs/harfbuzz/TLpatches/ChangeLog b/Build/source/libs/harfbuzz/TLpatches/ChangeLog index abe2e9aba4f..1ed5e9e0802 100644 --- a/Build/source/libs/harfbuzz/TLpatches/ChangeLog +++ b/Build/source/libs/harfbuzz/TLpatches/ChangeLog @@ -1,3 +1,8 @@ +2021-05-06 Akira Kakuto + + Imported harfbuzz-2.8.1 source tree from: + https://github.com/harfbuzz/harfbuzz/releases/download/2.8.1/ + 2021-04-18 Akira Kakuto Imported harfbuzz-2.8.0 source tree from: diff --git a/Build/source/libs/harfbuzz/TLpatches/TL-Changes b/Build/source/libs/harfbuzz/TLpatches/TL-Changes index f516637bf5f..8ca09c39fc3 100644 --- a/Build/source/libs/harfbuzz/TLpatches/TL-Changes +++ b/Build/source/libs/harfbuzz/TLpatches/TL-Changes @@ -1,5 +1,5 @@ -Changes applied to the harfbuzz-2.8.0/ tree as obtained from: - https://github.com/harfbuzz/harfbuzz/releases/download/2.8.0/ +Changes applied to the harfbuzz-2.8.1/ tree as obtained from: + https://github.com/harfbuzz/harfbuzz/releases/download/2.8.1/ Removed: COPYING @@ -22,7 +22,6 @@ Removed: unused dirs: docs m4 - meson-cc-tests perf subprojects test diff --git a/Build/source/libs/harfbuzz/configure b/Build/source/libs/harfbuzz/configure index 90604243ed3..797bbe2fc50 100755 --- a/Build/source/libs/harfbuzz/configure +++ b/Build/source/libs/harfbuzz/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 2.8.0. +# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 2.8.1. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='harfbuzz (TeX Live)' PACKAGE_TARNAME='harfbuzz--tex-live-' -PACKAGE_VERSION='2.8.0' -PACKAGE_STRING='harfbuzz (TeX Live) 2.8.0' +PACKAGE_VERSION='2.8.1' +PACKAGE_STRING='harfbuzz (TeX Live) 2.8.1' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' @@ -1311,7 +1311,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures harfbuzz (TeX Live) 2.8.0 to adapt to many kinds of systems. +\`configure' configures harfbuzz (TeX Live) 2.8.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1382,7 +1382,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of harfbuzz (TeX Live) 2.8.0:";; + short | recursive ) echo "Configuration of harfbuzz (TeX Live) 2.8.1:";; esac cat <<\_ACEOF @@ -1487,7 +1487,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -harfbuzz (TeX Live) configure 2.8.0 +harfbuzz (TeX Live) configure 2.8.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2123,7 +2123,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by harfbuzz (TeX Live) $as_me 2.8.0, which was +It was created by harfbuzz (TeX Live) $as_me 2.8.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4042,7 +4042,7 @@ fi # Define the identity of the package. PACKAGE='harfbuzz--tex-live-' - VERSION='2.8.0' + VERSION='2.8.1' # Some tools Automake needs. @@ -4236,8 +4236,8 @@ WARNING_CFLAGS=$kpse_cv_warning_cflags HB_VERSION_MAJOR=2 HB_VERSION_MINOR=8 -HB_VERSION_MICRO=0 -HB_VERSION=2.8.0 +HB_VERSION_MICRO=1 +HB_VERSION=2.8.1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7914,7 +7914,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by harfbuzz (TeX Live) $as_me 2.8.0, which was +This file was extended by harfbuzz (TeX Live) $as_me 2.8.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7980,7 +7980,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -harfbuzz (TeX Live) config.status 2.8.0 +harfbuzz (TeX Live) config.status 2.8.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt b/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt index 285ae1043bf..37909190771 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt +++ b/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.0) +cmake_minimum_required(VERSION 3.0.0) project(harfbuzz) message(WARN "HarfBuzz has a Meson port and tries to migrate all the other build systems to it, please consider using it as we might remove our cmake port soon.") @@ -414,7 +414,9 @@ endif () ## Define harfbuzz library add_library(harfbuzz ${project_sources} ${project_extra_sources} ${project_headers}) target_link_libraries(harfbuzz ${THIRD_PARTY_LIBS}) - +target_include_directories(harfbuzz PUBLIC + "$" + "$") ## Define harfbuzz-icu library if (HB_HAVE_ICU) diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog index 741d677a03a..ca3bf2018d4 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog +++ b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog @@ -1,3 +1,2611 @@ +commit b37f03f16b39d397a626f097858e9ae550234ca0 +Author: Khaled Hosny +Date: Tue May 4 02:07:06 2021 +0200 + + 2.8.1 + + NEWS | 9 +++++++++ + configure.ac | 2 +- + meson.build | 2 +- + src/hb-version.h | 4 ++-- + 4 files changed, 13 insertions(+), 4 deletions(-) + +commit d3e84413fd512441e62e5200eab6a24d34282e9a +Author: Khaled Hosny +Date: Sun May 2 01:03:21 2021 +0200 + + [ci] Drop macos-10_13_6-aat-fonts job + + This version of macOS is no longer supported by Homebrew, it takes 26 + minutes to brew the dependencies before it fails. + + .circleci/config.yml | 14 -------------- + 1 file changed, 14 deletions(-) + +commit 517d68b26e04be63a306cdacec20218a18ede3a4 +Author: Khaled Hosny +Date: Sat May 1 23:50:39 2021 +0200 + + [ci] Pin fedora 33 docker image + + g-ir-scanner is broken on 34 image: + + FAILED: src/HarfBuzz-0.0.gir + /usr/bin/g-ir-scanner --no-libtool --namespace=HarfBuzz --nsversion=0.0 --warn-all --output src/HarfBuzz-0.0.gir --c-include=hb-gobject.h --cflags-begin -DHB_NO_SINGLE_HEADER_ERROR -DHAVE_GOBJECT -DHB_EXTERN= --cflags-end -I/root/project/src -I/root/project/build/src -I./. -I../. --filelist=/root/project/build/src/libharfbuzz-gobject.so.0.20800.0.p/HarfBuzz_0.0_gir_filelist --include=GObject-2.0 --symbol-prefix=hb --symbol-prefix=hb_gobject --identifier-prefix=hb_ --pkg-export=harfbuzz-gobject --cflags-begin -DHAVE_CONFIG_H -I./. -I../. -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I./src/. -I../src/. -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/gobject-introspection-1.0 --cflags-end --add-include-path=/usr/share/gir-1.0 -L/root/project/build/src --extra-library=harfbuzz --library harfbuzz-gobject -L/root/project/build/src -L/root/project/build/src --extra-library=glib-2.0 --extra-library=gobject-2.0 --extra-library=m --extra-library=freetype --extra-library=girepository-1.0 --sources-top-dirs /root/project/subprojects/ --sources-top-dirs /root/project/build/subprojects/ + ../src/hb-buffer.cc:641: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-face.cc:192: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-font.cc:551: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-font.cc:1519: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-map.cc:43: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-ot-name.cc:55: Warning: HarfBuzz: unexpected annotation: out + ../src/hb-set.cc:43: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-shape-plan.cc:173: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-shape-plan.cc:201: Warning: HarfBuzz: unknown annotation: xconstructor + ../src/hb-unicode.cc:172: Warning: HarfBuzz: unknown annotation: xconstructor + g-ir-scanner: link: gcc -pthread -o /root/project/build/tmp-introspecta9rymai3/HarfBuzz-0.0 /root/project/build/tmp-introspecta9rymai3/HarfBuzz-0.0.o -L. -Wl,-rpath,. -Wl,--no-as-needed -L/root/project/build/src -Wl,-rpath,/root/project/build/src -L/root/project/build/src -Wl,-rpath,/root/project/build/src -L/root/project/build/src -Wl,-rpath,/root/project/build/src -lharfbuzz-gobject -lharfbuzz -lglib-2.0 -lgobject-2.0 -lm -lfreetype -lgirepository-1.0 -lgio-2.0 -lgobject-2.0 -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -lglib-2.0 + ldd: error: you do not have read permission for `/root/project/build/tmp-introspecta9rymai3/HarfBuzz-0.0' + Traceback (most recent call last): + File "/usr/bin/g-ir-scanner", line 99, in + sys.exit(scanner_main(sys.argv)) + File "/usr/lib64/gobject-introspection/giscanner/scannermain.py", line 599, in scanner_main + shlibs = create_binary(transformer, options, args) + File "/usr/lib64/gobject-introspection/giscanner/scannermain.py", line 428, in create_binary + shlibs = resolve_shlibs(options, binary, options.libraries) + File "/usr/lib64/gobject-introspection/giscanner/shlibs.py", line 170, in resolve_shlibs + _resolve_non_libtool(options, binary, non_libtool)) + File "/usr/lib64/gobject-introspection/giscanner/shlibs.py", line 106, in _resolve_non_libtool + output = subprocess.check_output(args) + File "/usr/lib64/python3.9/subprocess.py", line 424, in check_output + return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, + File "/usr/lib64/python3.9/subprocess.py", line 528, in run + raise CalledProcessError(retcode, process.args, + subprocess.CalledProcessError: Command '['ldd', '/root/project/build/tmp-introspecta9rymai3/HarfBuzz-0.0']' returned non-zero exit status 1. + ninja: build stopped: subcommand failed. + + .circleci/config.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2b7647649a2016e1f10a0eacc2bf2285e1207954 +Author: Garret Rieger +Date: Fri Apr 30 13:34:16 2021 -0700 + + [subset] update test-subset-gpos expected files. + + test/api/fonts/AdobeVFPrototype.WA.gpos.otf | Bin 4148 -> 4096 bytes + test/api/fonts/Roboto-Regular-gpos-aw.ttf | Bin 2236 -> 2228 bytes + 2 files changed, 0 insertions(+), 0 deletions(-) + +commit be50779cda64d6b7bc8422d6b428892ca829733f +Author: Garret Rieger +Date: Fri Apr 30 12:59:17 2021 -0700 + + [subset] correct ClassDef format determination. + + It was possible for glyph_min to be a glyph mapped to class zero which threw off the number of glyph calculation. + + src/hb-ot-layout-common.hh | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit 90713f270eeb8286067c141245209814b9e7e706 +Author: Khaled Hosny +Date: Fri Apr 30 16:56:39 2021 +0200 + + [hb-ot-layout] Document some return values + + src/hb-ot-layout.cc | 25 +++++++++++++++++++++++-- + 1 file changed, 23 insertions(+), 2 deletions(-) + +commit 46362a954c1408f8e4046d1c2069f2f9d7f80dcd +Merge: 42bf8e3d4 e25efb31f +Author: Behdad Esfahbod +Date: Fri Apr 30 11:39:47 2021 -0600 + + Merge pull request #2958 from googlefonts/layout_by_default_gr + + [subset] Enable layout subsetting by default. + +commit 42bf8e3d49b789adc00c6d7602ba8c73757ebfaf +Author: Behdad Esfahbod +Date: Mon Apr 26 12:31:44 2021 -0600 + + [util] Disable chafa's truecolor mode + + See https://github.com/harfbuzz/harfbuzz/pull/2959#issuecomment-827056111 + + util/helper-cairo-ansi.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c571a96eb0866093f6bece1069f292e34f933421 +Author: Khaled Hosny +Date: Sun Apr 25 15:43:30 2021 +0200 + + [ci] Disable Chafa on jobs that enables all auto features + + No suitable versions are available on these setups. + + .circleci/config.yml | 2 +- + .github/workflows/linux-ci.yml | 2 +- + .github/workflows/msys2-ci.yml | 3 ++- + 3 files changed, 4 insertions(+), 3 deletions(-) + +commit 8298c2f93b0dbe39eae66455c80e68e812213a2f +Author: Hans Petter Jansson +Date: Fri Apr 23 18:37:58 2021 +0200 + + [hb-view] Use Chafa for terminal graphics if available + + This produces high-quality terminal graphics using symbols or sixels + according to the detected terminal capabilities. + + Fixes #2430. + + configure.ac | 19 +++++++++ + meson.build | 7 ++++ + meson_options.txt | 2 + + util/Makefile.am | 2 + + util/helper-cairo-ansi.cc | 104 +++++++++++++++++++++++++++++++++++++++++++++- + util/meson.build | 2 +- + 6 files changed, 133 insertions(+), 3 deletions(-) + +commit e25efb31f21441d29866a2be866abb835b77d7c8 +Author: Garret Rieger +Date: Fri Apr 23 19:09:37 2021 -0700 + + [subset] consider all value formats when computing effective format. + + src/hb-ot-layout-gpos-table.hh | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit 84dbfacfec3818478a1e5ac2b9922d25917493ef +Author: Qunxin Liu +Date: Thu Apr 15 16:52:11 2021 -0700 + + [subset] fix collect_variation_idx in PairPosFormat2 + + src/hb-ot-layout-common.hh | 15 ++++++++++----- + src/hb-ot-layout-gdef-table.hh | 4 ++-- + src/hb-ot-layout-gpos-table.hh | 22 ++++++++++++++++++---- + 3 files changed, 30 insertions(+), 11 deletions(-) + +commit d356d0f79c6086e913722a8f40cbc0e59a365c1b +Author: Garret Rieger +Date: Fri Apr 23 17:41:09 2021 -0700 + + [subset] optimize ValueRecord's for PairPosFormat1. + + src/hb-ot-layout-gpos-table.hh | 53 +++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 52 insertions(+), 1 deletion(-) + +commit f9fbe4817ebcb0c88865dc19b7a6e616842a7be6 +Author: Garret Rieger +Date: Fri Apr 23 17:06:06 2021 -0700 + + [subset] implement value record optimization for PairPosFormat2. + + src/hb-ot-layout-gpos-table.hh | 59 ++++++++++++++++++++++++++++-------------- + 1 file changed, 40 insertions(+), 19 deletions(-) + +commit badb8e409bf65a7a0a1f73af735c86870c5c7899 +Author: Garret Rieger +Date: Fri Apr 23 16:32:56 2021 -0700 + + [subset] use copy_values for PairPos serialize. + + src/hb-ot-layout-gpos-table.hh | 111 +++++++++++++++++++++++------------------ + 1 file changed, 62 insertions(+), 49 deletions(-) + +commit 2f50283cd33f20b41a9efd5e851272edacf1d8c1 +Author: Garret Rieger +Date: Fri Apr 23 15:21:30 2021 -0700 + + [subset] Begin implementing ValueRecord optimization: + + remove value records which have a zero value. + + src/hb-ot-layout-gpos-table.hh | 91 +++++++++++++++++++++++++++++++++++------- + 1 file changed, 76 insertions(+), 15 deletions(-) + +commit 5df7c668ba530fb5b27e6eed482aa286db3add23 +Author: Garret Rieger +Date: Thu Apr 22 16:45:14 2021 -0700 + + [subset] In SinglePosFormat1 serialize only 1 value record. + + Previously one record per glyph in the subset was serialized. + + src/hb-ot-layout-gpos-table.hh | 22 ++++++++++++++-------- + 1 file changed, 14 insertions(+), 8 deletions(-) + +commit 92757f68097aaae74043a5030789289cc3ce514e +Author: Garret Rieger +Date: Thu Apr 22 15:18:35 2021 -0700 + + [subset] Don't drop anchor device tables when dropping hints. These may contain variation data. + + Update subseting expected files to match latest version of fontTools. + + src/hb-ot-layout-gpos-table.hh | 20 +++++++++----------- + .../Comfortaa-Regular-new.default.61,62,63.ttf | Bin 8100 -> 8100 bytes + .../basics/Comfortaa-Regular-new.default.61,63.ttf | Bin 7736 -> 7736 bytes + .../basics/Comfortaa-Regular-new.default.61.ttf | Bin 7360 -> 7360 bytes + .../basics/Comfortaa-Regular-new.default.62.ttf | Bin 6796 -> 6796 bytes + ...aa-Regular-new.default.retain-all-codepoint.ttf | Bin 222212 -> 222212 bytes + ...Regular-new.drop-hints-retain-gids.61,62,63.ttf | Bin 7032 -> 7012 bytes + ...aa-Regular-new.drop-hints-retain-gids.61,63.ttf | Bin 6724 -> 6712 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.61.ttf | Bin 6396 -> 6388 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.62.ttf | Bin 4396 -> 4396 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.63.ttf | Bin 4472 -> 4468 bytes + ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 187952 -> 190920 bytes + .../Comfortaa-Regular-new.drop-hints.61,62,63.ttf | Bin 3444 -> 3424 bytes + .../Comfortaa-Regular-new.drop-hints.61,63.ttf | Bin 3140 -> 3128 bytes + .../basics/Comfortaa-Regular-new.drop-hints.61.ttf | Bin 2804 -> 2800 bytes + .../basics/Comfortaa-Regular-new.drop-hints.62.ttf | Bin 2396 -> 2396 bytes + .../basics/Comfortaa-Regular-new.drop-hints.63.ttf | Bin 2464 -> 2460 bytes + ...Regular-new.drop-hints.retain-all-codepoint.ttf | Bin 187944 -> 190908 bytes + .../basics/Comfortaa-Regular-new.gids.61,62,63.ttf | Bin 9036 -> 9036 bytes + .../basics/Comfortaa-Regular-new.gids.61,63.ttf | Bin 8668 -> 8668 bytes + .../basics/Comfortaa-Regular-new.gids.61.ttf | Bin 8304 -> 8304 bytes + .../basics/Comfortaa-Regular-new.gids.62.ttf | Bin 8236 -> 8236 bytes + .../basics/Comfortaa-Regular-new.gids.63.ttf | Bin 8220 -> 8220 bytes + ...ortaa-Regular-new.gids.retain-all-codepoint.ttf | Bin 222212 -> 222212 bytes + .../Comfortaa-Regular-new.name-ids.61,62,63.ttf | Bin 7840 -> 7840 bytes + .../Comfortaa-Regular-new.name-ids.61,63.ttf | Bin 7476 -> 7476 bytes + .../basics/Comfortaa-Regular-new.name-ids.61.ttf | Bin 7100 -> 7100 bytes + .../basics/Comfortaa-Regular-new.name-ids.62.ttf | Bin 6536 -> 6536 bytes + ...a-Regular-new.name-ids.retain-all-codepoint.ttf | Bin 221952 -> 221952 bytes + ...mfortaa-Regular-new.name-languages.61,62,63.ttf | Bin 8100 -> 8100 bytes + .../Comfortaa-Regular-new.name-languages.61,63.ttf | Bin 7736 -> 7736 bytes + .../Comfortaa-Regular-new.name-languages.61.ttf | Bin 7360 -> 7360 bytes + .../Comfortaa-Regular-new.name-languages.62.ttf | Bin 6796 -> 6796 bytes + ...lar-new.name-languages.retain-all-codepoint.ttf | Bin 222212 -> 222212 bytes + .../Comfortaa-Regular-new.name-legacy.61,62,63.ttf | Bin 8100 -> 8100 bytes + .../Comfortaa-Regular-new.name-legacy.61,63.ttf | Bin 7736 -> 7736 bytes + .../Comfortaa-Regular-new.name-legacy.61.ttf | Bin 7360 -> 7360 bytes + .../Comfortaa-Regular-new.name-legacy.62.ttf | Bin 6796 -> 6796 bytes + ...egular-new.name-legacy.retain-all-codepoint.ttf | Bin 222212 -> 222212 bytes + .../Comfortaa-Regular-new.retain-gids.61,62,63.ttf | Bin 11688 -> 11688 bytes + .../Comfortaa-Regular-new.retain-gids.61,63.ttf | Bin 11320 -> 11320 bytes + .../Comfortaa-Regular-new.retain-gids.61.ttf | Bin 10952 -> 10952 bytes + .../Comfortaa-Regular-new.retain-gids.62.ttf | Bin 8796 -> 8796 bytes + ...egular-new.retain-gids.retain-all-codepoint.ttf | Bin 222224 -> 222224 bytes + ...Regular.abc.drop-hints-retain-gids.61,62,63.ttf | Bin 1208 -> 1192 bytes + ...to-Regular.abc.drop-hints-retain-gids.61,63.ttf | Bin 1136 -> 1124 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.61.ttf | Bin 988 -> 984 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.63.ttf | Bin 972 -> 968 bytes + ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 1208 -> 1192 bytes + .../Roboto-Regular.abc.drop-hints.61,62,63.ttf | Bin 1208 -> 1192 bytes + .../basics/Roboto-Regular.abc.drop-hints.61,63.ttf | Bin 1120 -> 1108 bytes + .../basics/Roboto-Regular.abc.drop-hints.61.ttf | Bin 988 -> 984 bytes + .../basics/Roboto-Regular.abc.drop-hints.63.ttf | Bin 960 -> 956 bytes + ...Regular.abc.drop-hints.retain-all-codepoint.ttf | Bin 1208 -> 1192 bytes + ...subroutinize-retain-gids.1FC,21,41,20,62,63.otf | Bin 30500 -> 30488 bytes + ...rop-hints-desubroutinize.1FC,21,41,20,62,63.otf | Bin 3680 -> 3668 bytes + ...r.drop-hints-retain-gids.1FC,21,41,20,62,63.otf | Bin 30636 -> 30624 bytes + ...nsPro-Regular.drop-hints.1FC,21,41,20,62,63.otf | Bin 3820 -> 3808 bytes + .../Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf | Bin 2192 -> 2184 bytes + ...ifVariable-Roman.default.1FC,21,41,20,62,63.ttf | Bin 6876 -> 6876 bytes + .../SourceSerifVariable-Roman.default.61,62,63.ttf | Bin 6552 -> 6552 bytes + ...ariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf | Bin 6612 -> 6832 bytes + ...urceSerifVariable-Roman.drop-hints.61,62,63.ttf | Bin 6356 -> 6552 bytes + ...rifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf | Bin 5880 -> 6136 bytes + .../AdobeVFPrototype.drop-hints.41,42,43,57.otf | Bin 5180 -> 5272 bytes + .../AdobeVFPrototype.drop-hints.41,42,43.otf | Bin 4688 -> 4744 bytes + .../AdobeVFPrototype.drop-hints.41,42.otf | Bin 4236 -> 4264 bytes + .../AdobeVFPrototype.drop-hints.41,56,57.otf | Bin 4348 -> 4408 bytes + .../AdobeVFPrototype.drop-hints.41.otf | Bin 3552 -> 3560 bytes + .../AdobeVFPrototype.drop-hints.42,57.otf | Bin 4364 -> 4396 bytes + .../Roboto-Regular.drop-hints.1E00,303.ttf | Bin 1468 -> 1464 bytes + .../expected/layout.khmer/Khmer.default.1780.ttf | Bin 0 -> 4204 bytes + ...ult.1789,17BB,17C6,1794,17B6,1793,1798,17BE.ttf | Bin 0 -> 6412 bytes + .../expected/layout.khmer/Khmer.default.31.ttf | Bin 0 -> 4140 bytes + .../layout.khmer/Khmer.retain-gids.1780.ttf | Bin 0 -> 4464 bytes + ...ids.1789,17BB,17C6,1794,17B6,1793,1798,17BE.ttf | Bin 0 -> 7848 bytes + .../expected/layout.khmer/Khmer.retain-gids.31.ttf | Bin 0 -> 4256 bytes + .../variable/Fraunces.default.26,66,69,124,125.ttf | Bin 0 -> 18448 bytes + .../data/expected/variable/Fraunces.default.61.ttf | Bin 0 -> 5880 bytes + 79 files changed, 9 insertions(+), 11 deletions(-) + +commit 6fddc2bbf9224bde4327e1792a683de637ad5613 +Author: Garret Rieger +Date: Thu Apr 1 15:34:17 2021 -0700 + + [subset] subset layout tables (G*) by default. + + src/hb-subset-input.cc | 3 --- + .../Comfortaa-Regular-new.default.61,62,63.ttf | Bin 7392 -> 8100 bytes + .../basics/Comfortaa-Regular-new.default.61,63.ttf | Bin 7036 -> 7736 bytes + .../basics/Comfortaa-Regular-new.default.61.ttf | Bin 6684 -> 7360 bytes + .../basics/Comfortaa-Regular-new.default.62.ttf | Bin 6628 -> 6796 bytes + .../basics/Comfortaa-Regular-new.default.63.ttf | Bin 6608 -> 6844 bytes + ...aa-Regular-new.default.retain-all-codepoint.ttf | Bin 182876 -> 222212 bytes + ...Regular-new.drop-hints-retain-gids.61,62,63.ttf | Bin 4844 -> 7032 bytes + ...aa-Regular-new.drop-hints-retain-gids.61,63.ttf | Bin 4552 -> 6724 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.61.ttf | Bin 3988 -> 6396 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.62.ttf | Bin 4228 -> 4396 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.63.ttf | Bin 4236 -> 4472 bytes + ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 151672 -> 187952 bytes + .../Comfortaa-Regular-new.drop-hints.61,62,63.ttf | Bin 2852 -> 3444 bytes + .../Comfortaa-Regular-new.drop-hints.61,63.ttf | Bin 2552 -> 3140 bytes + .../basics/Comfortaa-Regular-new.drop-hints.61.ttf | Bin 2240 -> 2804 bytes + .../basics/Comfortaa-Regular-new.drop-hints.62.ttf | Bin 2228 -> 2396 bytes + .../basics/Comfortaa-Regular-new.drop-hints.63.ttf | Bin 2228 -> 2464 bytes + ...Regular-new.drop-hints.retain-all-codepoint.ttf | Bin 151608 -> 187944 bytes + .../basics/Comfortaa-Regular-new.gids.61,62,63.ttf | Bin 8296 -> 9036 bytes + .../basics/Comfortaa-Regular-new.gids.61,63.ttf | Bin 7944 -> 8668 bytes + .../basics/Comfortaa-Regular-new.gids.61.ttf | Bin 7588 -> 8304 bytes + .../basics/Comfortaa-Regular-new.gids.62.ttf | Bin 7528 -> 8236 bytes + .../basics/Comfortaa-Regular-new.gids.63.ttf | Bin 7516 -> 8220 bytes + ...ortaa-Regular-new.gids.retain-all-codepoint.ttf | Bin 182876 -> 222212 bytes + ...Regular-new.keep-layout-drop-hints.61,62,63.ttf | Bin 3444 -> 0 bytes + ...aa-Regular-new.keep-layout-drop-hints.61,63.ttf | Bin 3140 -> 0 bytes + ...ortaa-Regular-new.keep-layout-drop-hints.61.ttf | Bin 2804 -> 0 bytes + ...ortaa-Regular-new.keep-layout-drop-hints.62.ttf | Bin 2396 -> 0 bytes + ...ortaa-Regular-new.keep-layout-drop-hints.63.ttf | Bin 2464 -> 0 bytes + ...keep-layout-drop-hints.retain-all-codepoint.ttf | Bin 187944 -> 0 bytes + .../Comfortaa-Regular-new.keep-layout.61,62,63.ttf | Bin 8100 -> 0 bytes + .../Comfortaa-Regular-new.keep-layout.61,63.ttf | Bin 7736 -> 0 bytes + .../Comfortaa-Regular-new.keep-layout.61.ttf | Bin 7360 -> 0 bytes + .../Comfortaa-Regular-new.keep-layout.62.ttf | Bin 6796 -> 0 bytes + .../Comfortaa-Regular-new.keep-layout.63.ttf | Bin 6844 -> 0 bytes + ...egular-new.keep-layout.retain-all-codepoint.ttf | Bin 222212 -> 0 bytes + .../Comfortaa-Regular-new.name-ids.61,62,63.ttf | Bin 7132 -> 7840 bytes + .../Comfortaa-Regular-new.name-ids.61,63.ttf | Bin 6776 -> 7476 bytes + .../basics/Comfortaa-Regular-new.name-ids.61.ttf | Bin 6424 -> 7100 bytes + .../basics/Comfortaa-Regular-new.name-ids.62.ttf | Bin 6368 -> 6536 bytes + .../basics/Comfortaa-Regular-new.name-ids.63.ttf | Bin 6348 -> 6584 bytes + ...a-Regular-new.name-ids.retain-all-codepoint.ttf | Bin 182616 -> 221952 bytes + ...mfortaa-Regular-new.name-languages.61,62,63.ttf | Bin 7392 -> 8100 bytes + .../Comfortaa-Regular-new.name-languages.61,63.ttf | Bin 7036 -> 7736 bytes + .../Comfortaa-Regular-new.name-languages.61.ttf | Bin 6684 -> 7360 bytes + .../Comfortaa-Regular-new.name-languages.62.ttf | Bin 6628 -> 6796 bytes + .../Comfortaa-Regular-new.name-languages.63.ttf | Bin 6608 -> 6844 bytes + ...lar-new.name-languages.retain-all-codepoint.ttf | Bin 182876 -> 222212 bytes + .../Comfortaa-Regular-new.name-legacy.61,62,63.ttf | Bin 7392 -> 8100 bytes + .../Comfortaa-Regular-new.name-legacy.61,63.ttf | Bin 7036 -> 7736 bytes + .../Comfortaa-Regular-new.name-legacy.61.ttf | Bin 6684 -> 7360 bytes + .../Comfortaa-Regular-new.name-legacy.62.ttf | Bin 6628 -> 6796 bytes + .../Comfortaa-Regular-new.name-legacy.63.ttf | Bin 6608 -> 6844 bytes + ...egular-new.name-legacy.retain-all-codepoint.ttf | Bin 182876 -> 222212 bytes + .../Comfortaa-Regular-new.retain-gids.61,62,63.ttf | Bin 9384 -> 11688 bytes + .../Comfortaa-Regular-new.retain-gids.61,63.ttf | Bin 9036 -> 11320 bytes + .../Comfortaa-Regular-new.retain-gids.61.ttf | Bin 8432 -> 10952 bytes + .../Comfortaa-Regular-new.retain-gids.62.ttf | Bin 8628 -> 8796 bytes + .../Comfortaa-Regular-new.retain-gids.63.ttf | Bin 8616 -> 8852 bytes + ...egular-new.retain-gids.retain-all-codepoint.ttf | Bin 182940 -> 222224 bytes + ...ular-subset.keep-layout-drop-hints.61,62,63.ttf | Bin 1452 -> 0 bytes + ...Regular-subset.keep-layout-drop-hints.61,63.ttf | Bin 1276 -> 0 bytes + ...jo-Regular-subset.keep-layout-drop-hints.61.ttf | Bin 1128 -> 0 bytes + ...jo-Regular-subset.keep-layout-drop-hints.62.ttf | Bin 1140 -> 0 bytes + ...jo-Regular-subset.keep-layout-drop-hints.63.ttf | Bin 1104 -> 0 bytes + ...keep-layout-drop-hints.retain-all-codepoint.ttf | Bin 3536 -> 0 bytes + ...yeongjo-Regular-subset.keep-layout.61,62,63.ttf | Bin 4128 -> 0 bytes + ...umMyeongjo-Regular-subset.keep-layout.61,63.ttf | Bin 3580 -> 0 bytes + ...NanumMyeongjo-Regular-subset.keep-layout.61.ttf | Bin 3156 -> 0 bytes + ...NanumMyeongjo-Regular-subset.keep-layout.62.ttf | Bin 3180 -> 0 bytes + ...NanumMyeongjo-Regular-subset.keep-layout.63.ttf | Bin 3048 -> 0 bytes + ...lar-subset.keep-layout.retain-all-codepoint.ttf | Bin 9524 -> 0 bytes + .../basics/Roboto-Regular.abc.default.61,62,63.ttf | Bin 2168 -> 2452 bytes + .../basics/Roboto-Regular.abc.default.61,63.ttf | Bin 1988 -> 2260 bytes + .../basics/Roboto-Regular.abc.default.61.ttf | Bin 1792 -> 2048 bytes + .../basics/Roboto-Regular.abc.default.62.ttf | Bin 1740 -> 1916 bytes + .../basics/Roboto-Regular.abc.default.63.ttf | Bin 1716 -> 1972 bytes + ...to-Regular.abc.default.retain-all-codepoint.ttf | Bin 2168 -> 2452 bytes + ...Regular.abc.drop-hints-retain-gids.61,62,63.ttf | Bin 924 -> 1208 bytes + ...to-Regular.abc.drop-hints-retain-gids.61,63.ttf | Bin 856 -> 1136 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.61.ttf | Bin 732 -> 988 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.62.ttf | Bin 704 -> 880 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.63.ttf | Bin 716 -> 972 bytes + ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 924 -> 1208 bytes + .../Roboto-Regular.abc.drop-hints.61,62,63.ttf | Bin 924 -> 1208 bytes + .../basics/Roboto-Regular.abc.drop-hints.61,63.ttf | Bin 848 -> 1120 bytes + .../basics/Roboto-Regular.abc.drop-hints.61.ttf | Bin 732 -> 988 bytes + .../basics/Roboto-Regular.abc.drop-hints.62.ttf | Bin 700 -> 876 bytes + .../basics/Roboto-Regular.abc.drop-hints.63.ttf | Bin 704 -> 960 bytes + ...Regular.abc.drop-hints.retain-all-codepoint.ttf | Bin 924 -> 1208 bytes + .../basics/Roboto-Regular.abc.gids.61,62,63.ttf | Bin 2168 -> 2452 bytes + .../basics/Roboto-Regular.abc.gids.61,63.ttf | Bin 2168 -> 2452 bytes + .../expected/basics/Roboto-Regular.abc.gids.61.ttf | Bin 2168 -> 2452 bytes + .../expected/basics/Roboto-Regular.abc.gids.62.ttf | Bin 2168 -> 2452 bytes + .../expected/basics/Roboto-Regular.abc.gids.63.ttf | Bin 2168 -> 2452 bytes + ...oboto-Regular.abc.gids.retain-all-codepoint.ttf | Bin 2168 -> 2452 bytes + ...Regular.abc.keep-layout-drop-hints.61,62,63.ttf | Bin 1208 -> 0 bytes + ...to-Regular.abc.keep-layout-drop-hints.61,63.ttf | Bin 1120 -> 0 bytes + ...oboto-Regular.abc.keep-layout-drop-hints.61.ttf | Bin 988 -> 0 bytes + ...oboto-Regular.abc.keep-layout-drop-hints.62.ttf | Bin 876 -> 0 bytes + ...oboto-Regular.abc.keep-layout-drop-hints.63.ttf | Bin 960 -> 0 bytes + ...keep-layout-drop-hints.retain-all-codepoint.ttf | Bin 1208 -> 0 bytes + .../Roboto-Regular.abc.keep-layout.61,62,63.ttf | Bin 2452 -> 0 bytes + .../Roboto-Regular.abc.keep-layout.61,63.ttf | Bin 2260 -> 0 bytes + .../basics/Roboto-Regular.abc.keep-layout.61.ttf | Bin 2048 -> 0 bytes + .../basics/Roboto-Regular.abc.keep-layout.62.ttf | Bin 1916 -> 0 bytes + .../basics/Roboto-Regular.abc.keep-layout.63.ttf | Bin 1972 -> 0 bytes + ...egular.abc.keep-layout.retain-all-codepoint.ttf | Bin 2452 -> 0 bytes + .../Roboto-Regular.abc.name-ids.61,62,63.ttf | Bin 2168 -> 2452 bytes + .../basics/Roboto-Regular.abc.name-ids.61,63.ttf | Bin 1988 -> 2260 bytes + .../basics/Roboto-Regular.abc.name-ids.61.ttf | Bin 1792 -> 2048 bytes + .../basics/Roboto-Regular.abc.name-ids.62.ttf | Bin 1740 -> 1916 bytes + .../basics/Roboto-Regular.abc.name-ids.63.ttf | Bin 1716 -> 1972 bytes + ...o-Regular.abc.name-ids.retain-all-codepoint.ttf | Bin 2168 -> 2452 bytes + .../Roboto-Regular.abc.name-languages.61,62,63.ttf | Bin 2168 -> 2452 bytes + .../Roboto-Regular.abc.name-languages.61,63.ttf | Bin 1988 -> 2260 bytes + .../Roboto-Regular.abc.name-languages.61.ttf | Bin 1792 -> 2048 bytes + .../Roboto-Regular.abc.name-languages.62.ttf | Bin 1740 -> 1916 bytes + .../Roboto-Regular.abc.name-languages.63.ttf | Bin 1716 -> 1972 bytes + ...lar.abc.name-languages.retain-all-codepoint.ttf | Bin 2168 -> 2452 bytes + .../Roboto-Regular.abc.name-legacy.61,62,63.ttf | Bin 2168 -> 2452 bytes + .../Roboto-Regular.abc.name-legacy.61,63.ttf | Bin 1988 -> 2260 bytes + .../basics/Roboto-Regular.abc.name-legacy.61.ttf | Bin 1792 -> 2048 bytes + .../basics/Roboto-Regular.abc.name-legacy.62.ttf | Bin 1740 -> 1916 bytes + .../basics/Roboto-Regular.abc.name-legacy.63.ttf | Bin 1716 -> 1972 bytes + ...egular.abc.name-legacy.retain-all-codepoint.ttf | Bin 2168 -> 2452 bytes + .../Roboto-Regular.abc.retain-gids.61,62,63.ttf | Bin 2168 -> 2452 bytes + .../Roboto-Regular.abc.retain-gids.61,63.ttf | Bin 1996 -> 2276 bytes + .../basics/Roboto-Regular.abc.retain-gids.61.ttf | Bin 1792 -> 2048 bytes + .../basics/Roboto-Regular.abc.retain-gids.62.ttf | Bin 1748 -> 1924 bytes + .../basics/Roboto-Regular.abc.retain-gids.63.ttf | Bin 1732 -> 1988 bytes + ...egular.abc.retain-gids.retain-all-codepoint.ttf | Bin 2168 -> 2452 bytes + ...olorEmoji.subset.index_format3.default.2049.ttf | Bin 3112 -> 3108 bytes + ...rEmoji.subset.index_format3.default.38,2049.ttf | Bin 4080 -> 4076 bytes + ...rEmoji.subset.index_format3.default.38,20E3.ttf | Bin 3564 -> 3560 bytes + ...index_format3.default.38,39,AE,2049,38,20E3.ttf | Bin 10112 -> 10112 bytes + ...oji.subset.index_format3.default.38,AE,2049.ttf | Bin 7536 -> 7536 bytes + ...oColorEmoji.subset.index_format3.default.39.ttf | Bin 1920 -> 1916 bytes + ...oColorEmoji.subset.index_format3.default.AE.ttf | Bin 4412 -> 4408 bytes + ...t.index_format3.drop-hints-retain-gids.2049.ttf | Bin 3136 -> 3132 bytes + ...ndex_format3.drop-hints-retain-gids.38,2049.ttf | Bin 4104 -> 4100 bytes + ...ndex_format3.drop-hints-retain-gids.38,20E3.ttf | Bin 3596 -> 3592 bytes + ...rop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf | Bin 10112 -> 10112 bytes + ...x_format3.drop-hints-retain-gids.38,AE,2049.ttf | Bin 7556 -> 7552 bytes + ...set.index_format3.drop-hints-retain-gids.39.ttf | Bin 1928 -> 1924 bytes + ...set.index_format3.drop-hints-retain-gids.AE.ttf | Bin 4428 -> 4424 bytes + ...rEmoji.subset.index_format3.drop-hints.2049.ttf | Bin 3112 -> 3108 bytes + ...oji.subset.index_format3.drop-hints.38,2049.ttf | Bin 4080 -> 4076 bytes + ...oji.subset.index_format3.drop-hints.38,20E3.ttf | Bin 3564 -> 3560 bytes + ...ex_format3.drop-hints.38,39,AE,2049,38,20E3.ttf | Bin 10112 -> 10112 bytes + ....subset.index_format3.drop-hints.38,AE,2049.ttf | Bin 7536 -> 7536 bytes + ...lorEmoji.subset.index_format3.drop-hints.39.ttf | Bin 1920 -> 1916 bytes + ...lorEmoji.subset.index_format3.drop-hints.AE.ttf | Bin 4412 -> 4408 bytes + ...Emoji.subset.index_format3.retain-gids.2049.ttf | Bin 3136 -> 3132 bytes + ...ji.subset.index_format3.retain-gids.38,2049.ttf | Bin 4104 -> 4100 bytes + ...ji.subset.index_format3.retain-gids.38,20E3.ttf | Bin 3596 -> 3592 bytes + ...x_format3.retain-gids.38,39,AE,2049,38,20E3.ttf | Bin 10112 -> 10112 bytes + ...subset.index_format3.retain-gids.38,AE,2049.ttf | Bin 7556 -> 7552 bytes + ...orEmoji.subset.index_format3.retain-gids.39.ttf | Bin 1928 -> 1924 bytes + ...orEmoji.subset.index_format3.retain-gids.AE.ttf | Bin 4428 -> 4424 bytes + ...eSansPro-Regular.default.1FC,21,41,20,62,63.otf | Bin 2180 -> 4192 bytes + .../SourceSansPro-Regular.default.61,62,63.otf | Bin 1892 -> 3856 bytes + ...ourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf | Bin 2008 -> 3144 bytes + ...subroutinize-retain-gids.1FC,21,41,20,62,63.otf | Bin 19796 -> 30788 bytes + ...Regular.desubroutinize-retain-gids.61,62,63.otf | Bin 1992 -> 30908 bytes + ...r.desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf | Bin 30208 -> 31336 bytes + ...o-Regular.desubroutinize.1FC,21,41,20,62,63.otf | Bin 2036 -> 3968 bytes + ...urceSansPro-Regular.desubroutinize.61,62,63.otf | Bin 1796 -> 3556 bytes + ...nsPro-Regular.desubroutinize.D7,D8,D9,DA,DE.otf | Bin 1992 -> 3168 bytes + ...subroutinize-retain-gids.1FC,21,41,20,62,63.otf | Bin 19636 -> 30500 bytes + ...p-hints-desubroutinize-retain-gids.61,62,63.otf | Bin 1868 -> 30668 bytes + ...s-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf | Bin 30060 -> 31124 bytes + ...rop-hints-desubroutinize.1FC,21,41,20,62,63.otf | Bin 1876 -> 3680 bytes + ...-Regular.drop-hints-desubroutinize.61,62,63.otf | Bin 1672 -> 3320 bytes + ...ar.drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf | Bin 1844 -> 2952 bytes + ...r.drop-hints-retain-gids.1FC,21,41,20,62,63.otf | Bin 19728 -> 30636 bytes + ...Pro-Regular.drop-hints-retain-gids.61,62,63.otf | Bin 1904 -> 30888 bytes + ...gular.drop-hints-retain-gids.D7,D8,D9,DA,DE.otf | Bin 30072 -> 31104 bytes + ...nsPro-Regular.drop-hints.1FC,21,41,20,62,63.otf | Bin 1960 -> 3820 bytes + .../SourceSansPro-Regular.drop-hints.61,62,63.otf | Bin 1736 -> 3524 bytes + ...ceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf | Bin 1860 -> 2932 bytes + ...sPro-Regular.retain-gids.1FC,21,41,20,62,63.otf | Bin 19948 -> 31012 bytes + .../SourceSansPro-Regular.retain-gids.61,62,63.otf | Bin 2060 -> 31208 bytes + ...eSansPro-Regular.retain-gids.D7,D8,D9,DA,DE.otf | Bin 30224 -> 31312 bytes + ...ubset.default.3042,3044,3046,3048,304A,304B.otf | Bin 3036 -> 4884 bytes + ...ubset.default.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 3248 -> 6276 bytes + ...eHanSans-Regular_subset.default.61,63,65,6B.otf | Bin 2208 -> 2588 bytes + ...ubset.default.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 3468 -> 6736 bytes + .../SourceHanSans-Regular_subset.default.660E.otf | Bin 1928 -> 2456 bytes + ...e-retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 8932 -> 129876 bytes + ...e-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 116080 -> 130920 bytes + ...bset.desubroutinize-retain-gids.61,63,65,6B.otf | Bin 3016 -> 3412 bytes + ...e-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 116264 -> 122048 bytes + ...ular_subset.desubroutinize-retain-gids.660E.otf | Bin 50224 -> 50760 bytes + ...esubroutinize.3042,3044,3046,3048,304A,304B.otf | Bin 2960 -> 4724 bytes + ...esubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 3144 -> 5928 bytes + ...s-Regular_subset.desubroutinize.61,63,65,6B.otf | Bin 2140 -> 2520 bytes + ...esubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 3264 -> 6232 bytes + ...eHanSans-Regular_subset.desubroutinize.660E.otf | Bin 1904 -> 2440 bytes + ...e-retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 8672 -> 129448 bytes + ...e-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 115768 -> 130312 bytes + ...ints-desubroutinize-retain-gids.61,63,65,6B.otf | Bin 2892 -> 3288 bytes + ...e-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 115884 -> 121284 bytes + ....drop-hints-desubroutinize-retain-gids.660E.otf | Bin 50040 -> 50540 bytes + ...esubroutinize.3042,3044,3046,3048,304A,304B.otf | Bin 2800 -> 4420 bytes + ...esubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 2904 -> 5416 bytes + ...ubset.drop-hints-desubroutinize.61,63,65,6B.otf | Bin 2036 -> 2416 bytes + ...esubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 2972 -> 5556 bytes + ...gular_subset.drop-hints-desubroutinize.660E.otf | Bin 1812 -> 2308 bytes + ...s-retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 8740 -> 129576 bytes + ...s-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 115864 -> 130604 bytes + ...r_subset.drop-hints-retain-gids.61,63,65,6B.otf | Bin 2852 -> 3248 bytes + ...s-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 116084 -> 121776 bytes + ...-Regular_subset.drop-hints-retain-gids.660E.otf | Bin 50060 -> 50552 bytes + ...et.drop-hints.3042,3044,3046,3048,304A,304B.otf | Bin 2856 -> 4548 bytes + ...et.drop-hints.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 2996 -> 5708 bytes + ...nSans-Regular_subset.drop-hints.61,63,65,6B.otf | Bin 2068 -> 2448 bytes + ...et.drop-hints.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 3172 -> 6048 bytes + ...ourceHanSans-Regular_subset.drop-hints.660E.otf | Bin 1832 -> 2316 bytes + ...t.retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 9016 -> 130036 bytes + ...t.retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 116184 -> 131272 bytes + ...Sans-Regular_subset.retain-gids.61,63,65,6B.otf | Bin 3012 -> 3408 bytes + ...t.retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 116468 -> 122552 bytes + ...urceHanSans-Regular_subset.retain-gids.660E.otf | Bin 50244 -> 50776 bytes + .../TwemojiMozilla.subset.default.32,3297,3299.ttf | Bin 5624 -> 5712 bytes + .../colr/TwemojiMozilla.subset.default.32,3297.ttf | Bin 5088 -> 5176 bytes + .../colr/TwemojiMozilla.subset.default.32,3299.ttf | Bin 5264 -> 5352 bytes + .../colr/TwemojiMozilla.subset.default.32.ttf | Bin 4664 -> 4748 bytes + .../TwemojiMozilla.subset.default.3297,3299.ttf | Bin 5604 -> 5692 bytes + .../colr/TwemojiMozilla.subset.default.3297.ttf | Bin 5068 -> 5152 bytes + .../colr/TwemojiMozilla.subset.default.3299.ttf | Bin 5244 -> 5328 bytes + ....subset.drop-hints-retain-gids.32,3297,3299.ttf | Bin 5604 -> 5692 bytes + ...zilla.subset.drop-hints-retain-gids.32,3297.ttf | Bin 5084 -> 5172 bytes + ...zilla.subset.drop-hints-retain-gids.32,3299.ttf | Bin 5264 -> 5352 bytes + ...ojiMozilla.subset.drop-hints-retain-gids.32.ttf | Bin 4644 -> 4728 bytes + ...lla.subset.drop-hints-retain-gids.3297,3299.ttf | Bin 5588 -> 5676 bytes + ...iMozilla.subset.drop-hints-retain-gids.3297.ttf | Bin 5064 -> 5148 bytes + ...iMozilla.subset.drop-hints-retain-gids.3299.ttf | Bin 5244 -> 5328 bytes + ...emojiMozilla.subset.drop-hints.32,3297,3299.ttf | Bin 5604 -> 5692 bytes + .../TwemojiMozilla.subset.drop-hints.32,3297.ttf | Bin 5068 -> 5156 bytes + .../TwemojiMozilla.subset.drop-hints.32,3299.ttf | Bin 5244 -> 5332 bytes + .../colr/TwemojiMozilla.subset.drop-hints.32.ttf | Bin 4644 -> 4728 bytes + .../TwemojiMozilla.subset.drop-hints.3297,3299.ttf | Bin 5584 -> 5672 bytes + .../colr/TwemojiMozilla.subset.drop-hints.3297.ttf | Bin 5048 -> 5132 bytes + .../colr/TwemojiMozilla.subset.drop-hints.3299.ttf | Bin 5224 -> 5308 bytes + ...mojiMozilla.subset.retain-gids.32,3297,3299.ttf | Bin 5624 -> 5712 bytes + .../TwemojiMozilla.subset.retain-gids.32,3297.ttf | Bin 5104 -> 5192 bytes + .../TwemojiMozilla.subset.retain-gids.32,3299.ttf | Bin 5284 -> 5372 bytes + .../colr/TwemojiMozilla.subset.retain-gids.32.ttf | Bin 4664 -> 4748 bytes + ...TwemojiMozilla.subset.retain-gids.3297,3299.ttf | Bin 5608 -> 5696 bytes + .../TwemojiMozilla.subset.retain-gids.3297.ttf | Bin 5084 -> 5168 bytes + .../TwemojiMozilla.subset.retain-gids.3299.ttf | Bin 5264 -> 5348 bytes + .../Roboto-Regular.default.1FC,21,41,20,62,63.ttf | Bin 2984 -> 4656 bytes + .../full-font/Roboto-Regular.default.61,62,63.ttf | Bin 2580 -> 3904 bytes + .../Roboto-Regular.default.D7,D8,D9,DA,DE.ttf | Bin 2944 -> 3976 bytes + ...oboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf | Bin 1436 -> 2532 bytes + .../Roboto-Regular.drop-hints.61,62,63.ttf | Bin 1228 -> 2116 bytes + .../Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf | Bin 1464 -> 2192 bytes + ...ifVariable-Roman.default.1FC,21,41,20,62,63.ttf | Bin 3572 -> 6876 bytes + .../SourceSerifVariable-Roman.default.61,62,63.ttf | Bin 3540 -> 6552 bytes + ...eSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf | Bin 4032 -> 6136 bytes + ...ariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf | Bin 3572 -> 6612 bytes + ...urceSerifVariable-Roman.drop-hints.61,62,63.ttf | Bin 3540 -> 6356 bytes + ...rifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf | Bin 4032 -> 5880 bytes + .../Mplus1p-Regular.default.1D715,1D7D8,41,42.ttf | Bin 2108 -> 2344 bytes + .../japanese/Mplus1p-Regular.default.25771.ttf | Bin 1824 -> 1992 bytes + ...gular.default.3042,3044,3046,3048,304A,304B.ttf | Bin 2532 -> 2704 bytes + ...gular.default.3042,3044,3046,73E0,5EA6,8F38.ttf | Bin 2776 -> 2948 bytes + .../Mplus1p-Regular.default.61,63,65,6B.ttf | Bin 2076 -> 2324 bytes + ...gular.default.660E,6975,73E0,5EA6,8F38,6E05.ttf | Bin 3072 -> 3244 bytes + .../japanese/Mplus1p-Regular.default.660E.ttf | Bin 1816 -> 1984 bytes + ...plus1p-Regular.drop-hints.1D715,1D7D8,41,42.ttf | Bin 1380 -> 1616 bytes + .../japanese/Mplus1p-Regular.drop-hints.25771.ttf | Bin 1096 -> 1264 bytes + ...ar.drop-hints.3042,3044,3046,3048,304A,304B.ttf | Bin 1804 -> 1976 bytes + ...ar.drop-hints.3042,3044,3046,73E0,5EA6,8F38.ttf | Bin 2048 -> 2220 bytes + .../Mplus1p-Regular.drop-hints.61,63,65,6B.ttf | Bin 1348 -> 1596 bytes + ...ar.drop-hints.660E,6975,73E0,5EA6,8F38,6E05.ttf | Bin 2344 -> 2516 bytes + .../japanese/Mplus1p-Regular.drop-hints.660E.ttf | Bin 1088 -> 1256 bytes + ...Mplus1p-Regular.keep-gdef.1D715,1D7D8,41,42.ttf | Bin 2148 -> 2344 bytes + .../japanese/Mplus1p-Regular.keep-gdef.25771.ttf | Bin 1860 -> 1992 bytes + ...lar.keep-gdef.3042,3044,3046,3048,304A,304B.ttf | Bin 2572 -> 2704 bytes + ...lar.keep-gdef.3042,3044,3046,73E0,5EA6,8F38.ttf | Bin 2816 -> 2948 bytes + .../Mplus1p-Regular.keep-gdef.61,63,65,6B.ttf | Bin 2116 -> 2324 bytes + ...lar.keep-gdef.660E,6975,73E0,5EA6,8F38,6E05.ttf | Bin 3112 -> 3244 bytes + .../japanese/Mplus1p-Regular.keep-gdef.660E.ttf | Bin 1852 -> 1984 bytes + ...ext1_multiple_subrules_f1.default.41,42,43.otf} | Bin + ...ontext1_multiple_subrules_f1.default.41,42.otf} | Bin + ...ontext1_multiple_subrules_f1.default.41,43.otf} | Bin + ...s_context1_multiple_subrules_f1.default.41.otf} | Bin + ...e_subrules_f1.default.retain-all-codepoint.otf} | Bin + ..._multiple_subrules_f1.retain-gids.41,42,43.otf} | Bin + ...xt1_multiple_subrules_f1.retain-gids.41,42.otf} | Bin + ...xt1_multiple_subrules_f1.retain-gids.41,43.otf} | Bin + ...ntext1_multiple_subrules_f1.retain-gids.41.otf} | Bin + ...brules_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...ext2_multiple_subrules_f1.default.41,42,43.otf} | Bin + ...ontext2_multiple_subrules_f1.default.41,42.otf} | Bin + ...ontext2_multiple_subrules_f1.default.41,43.otf} | Bin + ...s_context2_multiple_subrules_f1.default.41.otf} | Bin + ...e_subrules_f1.default.retain-all-codepoint.otf} | Bin + ..._multiple_subrules_f1.retain-gids.41,42,43.otf} | Bin + ...xt2_multiple_subrules_f1.retain-gids.41,42.otf} | Bin + ...xt2_multiple_subrules_f1.retain-gids.41,43.otf} | Bin + ...ntext2_multiple_subrules_f1.retain-gids.41.otf} | Bin + ...brules_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...> gpos_context3_simple_f1.default.41,42,43.otf} | Bin + ...f => gpos_context3_simple_f1.default.41,42.otf} | Bin + ...f => gpos_context3_simple_f1.default.41,43.otf} | Bin + ....otf => gpos_context3_simple_f1.default.41.otf} | Bin + ...xt3_simple_f1.default.retain-all-codepoint.otf} | Bin + ...os_context3_simple_f1.retain-gids.41,42,43.otf} | Bin + ... gpos_context3_simple_f1.retain-gids.41,42.otf} | Bin + ... gpos_context3_simple_f1.retain-gids.41,43.otf} | Bin + ... => gpos_context3_simple_f1.retain-gids.41.otf} | Bin + ...simple_f1.retain-gids.retain-all-codepoint.otf} | Bin + .../IndicTestJalandhar-Regular.default.A01.ttf | Bin 4088 -> 4220 bytes + .../IndicTestJalandhar-Regular.default.A05,A06.ttf | Bin 4652 -> 4796 bytes + .../IndicTestJalandhar-Regular.default.A07,A1B.ttf | Bin 4620 -> 4768 bytes + ...andhar-Regular.default.retain-all-codepoint.ttf | Bin 28176 -> 49288 bytes + .../IndicTestJalandhar-Regular.drop-hints.A01.ttf | Bin 948 -> 1080 bytes + ...dicTestJalandhar-Regular.drop-hints.A05,A06.ttf | Bin 1244 -> 1388 bytes + ...dicTestJalandhar-Regular.drop-hints.A07,A1B.ttf | Bin 1240 -> 1388 bytes + ...har-Regular.drop-hints.retain-all-codepoint.ttf | Bin 15200 -> 29504 bytes + .../IndicTestJalandhar-Regular.keep-gdef.A01.ttf | Bin 4140 -> 4220 bytes + ...ndicTestJalandhar-Regular.keep-gdef.A05,A06.ttf | Bin 4716 -> 4796 bytes + ...ndicTestJalandhar-Regular.keep-gdef.A07,A1B.ttf | Bin 4688 -> 4768 bytes + ...dhar-Regular.keep-gdef.retain-all-codepoint.ttf | Bin 28604 -> 49288 bytes + .../AdobeVFPrototype.default.41,42,43,57.otf | Bin 4960 -> 5460 bytes + .../AdobeVFPrototype.default.41,42,43.otf | Bin 4540 -> 4932 bytes + .../AdobeVFPrototype.default.41,42.otf | Bin 4132 -> 4452 bytes + .../AdobeVFPrototype.default.41,56,57.otf | Bin 4152 -> 4600 bytes + .../AdobeVFPrototype.default.41.otf | Bin 3468 -> 3748 bytes + .../AdobeVFPrototype.default.42,57.otf | Bin 4208 -> 4584 bytes + .../AdobeVFPrototype.drop-hints.41,42,43,57.otf | Bin 4772 -> 5180 bytes + .../AdobeVFPrototype.drop-hints.41,42,43.otf | Bin 4352 -> 4688 bytes + .../AdobeVFPrototype.drop-hints.41,42.otf | Bin 3944 -> 4236 bytes + .../AdobeVFPrototype.drop-hints.41,56,57.otf | Bin 3964 -> 4348 bytes + .../AdobeVFPrototype.drop-hints.41.otf | Bin 3280 -> 3552 bytes + .../AdobeVFPrototype.drop-hints.42,57.otf | Bin 4020 -> 4364 bytes + ...AdobeVFPrototype.keep-gdef-gpos.41,42,43,57.otf | Bin 5400 -> 5460 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41,42,43.otf | Bin 4872 -> 4932 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41,42.otf | Bin 4392 -> 4452 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41,56,57.otf | Bin 4540 -> 4600 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41.otf | Bin 3688 -> 3748 bytes + .../AdobeVFPrototype.keep-gdef-gpos.42,57.otf | Bin 4524 -> 4584 bytes + .../Roboto-Regular.default.1E00,303.ttf | Bin 2456 -> 2720 bytes + .../layout.gdef/Roboto-Regular.default.303.ttf | Bin 2128 -> 2312 bytes + .../Roboto-Regular.default.309,20,30F.ttf | Bin 2220 -> 2408 bytes + .../layout.gdef/Roboto-Regular.default.323.ttf | Bin 2020 -> 2204 bytes + .../Roboto-Regular.default.41,42,43.ttf | Bin 2480 -> 3668 bytes + .../Roboto-Regular.drop-hints.1E00,303.ttf | Bin 1204 -> 1468 bytes + .../layout.gdef/Roboto-Regular.drop-hints.303.ttf | Bin 1012 -> 1196 bytes + .../Roboto-Regular.drop-hints.309,20,30F.ttf | Bin 1068 -> 1256 bytes + .../layout.gdef/Roboto-Regular.drop-hints.323.ttf | Bin 952 -> 1136 bytes + .../Roboto-Regular.drop-hints.41,42,43.ttf | Bin 1188 -> 2036 bytes + .../Roboto-Regular.keep-gdef-gpos.1E00,303.ttf | Bin 2648 -> 2720 bytes + .../Roboto-Regular.keep-gdef-gpos.303.ttf | Bin 2240 -> 2312 bytes + .../Roboto-Regular.keep-gdef-gpos.309,20,30F.ttf | Bin 2336 -> 2408 bytes + .../Roboto-Regular.keep-gdef-gpos.323.ttf | Bin 2132 -> 2204 bytes + .../Roboto-Regular.keep-gdef-gpos.41,42,43.ttf | Bin 2728 -> 3668 bytes + ...ut.41,43.otf => gpos1_2_font.default.41,43.otf} | Bin + ...ut.41,46.otf => gpos1_2_font.default.41,46.otf} | Bin + ...p-layout.41.otf => gpos1_2_font.default.41.otf} | Bin + ...ut.42,44.otf => gpos1_2_font.default.42,44.otf} | Bin + ...ut.43,46.otf => gpos1_2_font.default.43,46.otf} | Bin + ... gpos1_2_font.default.retain-all-codepoint.otf} | Bin + ...1,43.otf => gpos1_2_font.retain-gids.41,43.otf} | Bin + ...1,46.otf => gpos1_2_font.retain-gids.41,46.otf} | Bin + ...gids.41.otf => gpos1_2_font.retain-gids.41.otf} | Bin + ...2,44.otf => gpos1_2_font.retain-gids.42,44.otf} | Bin + ...3,46.otf => gpos1_2_font.retain-gids.43,46.otf} | Bin + ...s1_2_font.retain-gids.retain-all-codepoint.otf} | Bin + ...3,25.otf => gpos2_1_font7.default.21,23,25.otf} | Bin + ...t.21,23.otf => gpos2_1_font7.default.21,23.otf} | Bin + ...t.2E,23.otf => gpos2_1_font7.default.2E,23.otf} | Bin + ...2,43.otf => gpos2_1_font7.default.41,42,43.otf} | Bin + ...gpos2_1_font7.default.retain-all-codepoint.otf} | Bin + ....otf => gpos2_1_font7.retain-gids.21,23,25.otf} | Bin + ...,23.otf => gpos2_1_font7.retain-gids.21,23.otf} | Bin + ...,23.otf => gpos2_1_font7.retain-gids.2E,23.otf} | Bin + ....otf => gpos2_1_font7.retain-gids.41,42,43.otf} | Bin + ...2_1_font7.retain-gids.retain-all-codepoint.otf} | Bin + ...3,25.otf => gpos2_2_font5.default.21,23,25.otf} | Bin + ...t.21,23.otf => gpos2_2_font5.default.21,23.otf} | Bin + ...t.2E,23.otf => gpos2_2_font5.default.2E,23.otf} | Bin + ...2,43.otf => gpos2_2_font5.default.41,42,43.otf} | Bin + ...gpos2_2_font5.default.retain-all-codepoint.otf} | Bin + ....otf => gpos2_2_font5.retain-gids.21,23,25.otf} | Bin + ...,23.otf => gpos2_2_font5.retain-gids.21,23.otf} | Bin + ...,23.otf => gpos2_2_font5.retain-gids.2E,23.otf} | Bin + ....otf => gpos2_2_font5.retain-gids.41,42,43.otf} | Bin + ...2_2_font5.retain-gids.retain-all-codepoint.otf} | Bin + ...out.28,29.otf => gpos3_font3.default.28,29.otf} | Bin + ...out.28,2B.otf => gpos3_font3.default.28,2B.otf} | Bin + ...out.29,2B.otf => gpos3_font3.default.29,2B.otf} | Bin + ...,42,43.otf => gpos3_font3.default.41,42,43.otf} | Bin + ...> gpos3_font3.default.retain-all-codepoint.otf} | Bin + ...28,29.otf => gpos3_font3.retain-gids.28,29.otf} | Bin + ...28,2B.otf => gpos3_font3.retain-gids.28,2B.otf} | Bin + ...29,2B.otf => gpos3_font3.retain-gids.29,2B.otf} | Bin + ...43.otf => gpos3_font3.retain-gids.41,42,43.otf} | Bin + ...os3_font3.retain-gids.retain-all-codepoint.otf} | Bin + ...os4_multiple_anchors_1.default.41,42,43,44.otf} | Bin + ...os4_multiple_anchors_1.default.41,42,43,45.otf} | Bin + ... gpos4_multiple_anchors_1.default.41,42,43.otf} | Bin + ... => gpos4_multiple_anchors_1.default.41,42.otf} | Bin + ..._multiple_anchors_1.default.41,43,44,45,46.otf} | Bin + ... gpos4_multiple_anchors_1.default.41,43,44.otf} | Bin + ... gpos4_multiple_anchors_1.default.41,43,45.otf} | Bin + ... => gpos4_multiple_anchors_1.default.41,43.otf} | Bin + ...otf => gpos4_multiple_anchors_1.default.41.otf} | Bin + ...ple_anchors_1.default.retain-all-codepoint.otf} | Bin + ...multiple_anchors_1.retain-gids.41,42,43,44.otf} | Bin + ...multiple_anchors_1.retain-gids.41,42,43,45.otf} | Bin + ...s4_multiple_anchors_1.retain-gids.41,42,43.otf} | Bin + ...gpos4_multiple_anchors_1.retain-gids.41,42.otf} | Bin + ...tiple_anchors_1.retain-gids.41,43,44,45,46.otf} | Bin + ...s4_multiple_anchors_1.retain-gids.41,43,44.otf} | Bin + ...s4_multiple_anchors_1.retain-gids.41,43,45.otf} | Bin + ...gpos4_multiple_anchors_1.retain-gids.41,43.otf} | Bin + ...=> gpos4_multiple_anchors_1.retain-gids.41.otf} | Bin + ...anchors_1.retain-gids.retain-all-codepoint.otf} | Bin + ...,44.otf => gpos5_font1.default.41,42,43,44.otf} | Bin + ...,45.otf => gpos5_font1.default.41,42,43,45.otf} | Bin + ...,42,43.otf => gpos5_font1.default.41,42,43.otf} | Bin + ...,42,44.otf => gpos5_font1.default.41,42,44.otf} | Bin + ...,42,45.otf => gpos5_font1.default.41,42,45.otf} | Bin + ...out.41,42.otf => gpos5_font1.default.41,42.otf} | Bin + ...out.41,43.otf => gpos5_font1.default.41,43.otf} | Bin + ...ep-layout.41.otf => gpos5_font1.default.41.otf} | Bin + ...ep-layout.42.otf => gpos5_font1.default.42.otf} | Bin + ...> gpos5_font1.default.retain-all-codepoint.otf} | Bin + ...otf => gpos5_font1.retain-gids.41,42,43,44.otf} | Bin + ...otf => gpos5_font1.retain-gids.41,42,43,45.otf} | Bin + ...43.otf => gpos5_font1.retain-gids.41,42,43.otf} | Bin + ...44.otf => gpos5_font1.retain-gids.41,42,44.otf} | Bin + ...45.otf => gpos5_font1.retain-gids.41,42,45.otf} | Bin + ...41,42.otf => gpos5_font1.retain-gids.41,42.otf} | Bin + ...41,43.otf => gpos5_font1.retain-gids.41,43.otf} | Bin + ...-gids.41.otf => gpos5_font1.retain-gids.41.otf} | Bin + ...-gids.42.otf => gpos5_font1.retain-gids.42.otf} | Bin + ...os5_font1.retain-gids.retain-all-codepoint.otf} | Bin + ...,44.otf => gpos6_font1.default.41,42,43,44.otf} | Bin + ...,45.otf => gpos6_font1.default.41,42,43,45.otf} | Bin + ...,42,43.otf => gpos6_font1.default.41,42,43.otf} | Bin + ...out.41,42.otf => gpos6_font1.default.41,42.otf} | Bin + ....otf => gpos6_font1.default.41,43,44,45,46.otf} | Bin + ...,43,44.otf => gpos6_font1.default.41,43,44.otf} | Bin + ...,43,45.otf => gpos6_font1.default.41,43,45.otf} | Bin + ...out.41,43.otf => gpos6_font1.default.41,43.otf} | Bin + ...ep-layout.41.otf => gpos6_font1.default.41.otf} | Bin + ...> gpos6_font1.default.retain-all-codepoint.otf} | Bin + ...otf => gpos6_font1.retain-gids.41,42,43,44.otf} | Bin + ...otf => gpos6_font1.retain-gids.41,42,43,45.otf} | Bin + ...43.otf => gpos6_font1.retain-gids.41,42,43.otf} | Bin + ...41,42.otf => gpos6_font1.retain-gids.41,42.otf} | Bin + ... => gpos6_font1.retain-gids.41,43,44,45,46.otf} | Bin + ...44.otf => gpos6_font1.retain-gids.41,43,44.otf} | Bin + ...45.otf => gpos6_font1.retain-gids.41,43,45.otf} | Bin + ...41,43.otf => gpos6_font1.retain-gids.41,43.otf} | Bin + ...-gids.41.otf => gpos6_font1.retain-gids.41.otf} | Bin + ...os6_font1.retain-gids.retain-all-codepoint.otf} | Bin + ...lar.default.627,644,623,62D,644,627,645,2E.ttf} | Bin + ...f => Amiri-Regular.default.627,644,62D,628.ttf} | Bin + ...7,644.ttf => Amiri-Regular.default.627,644.ttf} | Bin + ...Regular.default.633,645,627,621,20,644,627.ttf} | Bin + ...1.ttf => Amiri-Regular.default.63A,64A,631.ttf} | Bin + ...retain-gids.627,644,623,62D,644,627,645,2E.ttf} | Bin + ... Amiri-Regular.retain-gids.627,644,62D,628.ttf} | Bin + ...4.ttf => Amiri-Regular.retain-gids.627,644.ttf} | Bin + ...lar.retain-gids.633,645,627,621,20,644,627.ttf} | Bin + ...f => Amiri-Regular.retain-gids.63A,64A,631.ttf} | Bin + ...1_multiple_subrules_f1.default.30,31,32,33.otf} | Bin + ...ing1_multiple_subrules_f1.default.41,42,43.otf} | Bin + ...e_subrules_f1.default.retain-all-codepoint.otf} | Bin + ...ltiple_subrules_f1.retain-gids.30,31,32,33.otf} | Bin + ..._multiple_subrules_f1.retain-gids.41,42,43.otf} | Bin + ...brules_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...2_multiple_subrules_f1.default.30,31,32,33.otf} | Bin + ...ing2_multiple_subrules_f1.default.41,42,43.otf} | Bin + ...e_subrules_f1.default.retain-all-codepoint.otf} | Bin + ...ltiple_subrules_f1.retain-gids.30,31,32,33.otf} | Bin + ..._multiple_subrules_f1.retain-gids.41,42,43.otf} | Bin + ...brules_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...os_chaining3_simple_f1.default.30,31,32,33.otf} | Bin + ... gpos_chaining3_simple_f1.default.41,42,43.otf} | Bin + ...ng3_simple_f1.default.retain-all-codepoint.otf} | Bin + ...haining3_simple_f1.retain-gids.30,31,32,33.otf} | Bin + ...s_chaining3_simple_f1.retain-gids.41,42,43.otf} | Bin + ...simple_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...out.41,42.otf => gpos9_font2.default.41,42.otf} | Bin + ...ep-layout.41.otf => gpos9_font2.default.41.otf} | Bin + ...ep-layout.42.otf => gpos9_font2.default.42.otf} | Bin + ...41,42.otf => gpos9_font2.retain-gids.41,42.otf} | Bin + ...-gids.41.otf => gpos9_font2.retain-gids.41.otf} | Bin + ...-gids.42.otf => gpos9_font2.retain-gids.42.otf} | Bin + ...b_alternate_substitution.default.53A9,53F1.otf} | Bin + ...> gsub_alternate_substitution.default.53A9.otf} | Bin + ...> gsub_alternate_substitution.default.53F1.otf} | Bin + ..._substitution.default.retain-all-codepoint.otf} | Bin + ...ternate_substitution.retain-gids.53A9,53F1.otf} | Bin + ...ub_alternate_substitution.retain-gids.53A9.otf} | Bin + ...ub_alternate_substitution.retain-gids.53F1.otf} | Bin + ...stitution.retain-gids.retain-all-codepoint.otf} | Bin + ...ext1_multiple_subrules_f2.default.41,42,43.otf} | Bin + ...ontext1_multiple_subrules_f2.default.41,42.otf} | Bin + ...ontext1_multiple_subrules_f2.default.41,43.otf} | Bin + ...b_context1_multiple_subrules_f2.default.41.otf} | Bin + ...e_subrules_f2.default.retain-all-codepoint.otf} | Bin + ..._multiple_subrules_f2.retain-gids.41,42,43.otf} | Bin + ...xt1_multiple_subrules_f2.retain-gids.41,42.otf} | Bin + ...xt1_multiple_subrules_f2.retain-gids.41,43.otf} | Bin + ...ntext1_multiple_subrules_f2.retain-gids.41.otf} | Bin + ...brules_f2.retain-gids.retain-all-codepoint.otf} | Bin + ...ext2_multiple_subrules_f2.default.41,42,43.otf} | Bin + ...ontext2_multiple_subrules_f2.default.41,42.otf} | Bin + ...ontext2_multiple_subrules_f2.default.41,43.otf} | Bin + ...b_context2_multiple_subrules_f2.default.41.otf} | Bin + ...e_subrules_f2.default.retain-all-codepoint.otf} | Bin + ..._multiple_subrules_f2.retain-gids.41,42,43.otf} | Bin + ...xt2_multiple_subrules_f2.retain-gids.41,42.otf} | Bin + ...xt2_multiple_subrules_f2.retain-gids.41,43.otf} | Bin + ...ntext2_multiple_subrules_f2.retain-gids.41.otf} | Bin + ...brules_f2.retain-gids.retain-all-codepoint.otf} | Bin + ...ub_context3_successive_f1.default.41,42,43.otf} | Bin + ... gsub_context3_successive_f1.default.41,42.otf} | Bin + ... gsub_context3_successive_f1.default.41,43.otf} | Bin + ... => gsub_context3_successive_f1.default.41.otf} | Bin + ...successive_f1.default.retain-all-codepoint.otf} | Bin + ...ontext3_successive_f1.retain-gids.41,42,43.otf} | Bin + ...b_context3_successive_f1.retain-gids.41,42.otf} | Bin + ...b_context3_successive_f1.retain-gids.41,43.otf} | Bin + ...gsub_context3_successive_f1.retain-gids.41.otf} | Bin + ...essive_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...1_multiple_subrules_f1.default.30,31,32,33.otf} | Bin + ...ing1_multiple_subrules_f1.default.41,42,43.otf} | Bin + ...e_subrules_f1.default.retain-all-codepoint.otf} | Bin + ...ltiple_subrules_f1.retain-gids.30,31,32,33.otf} | Bin + ..._multiple_subrules_f1.retain-gids.41,42,43.otf} | Bin + ...brules_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...2_multiple_subrules_f1.default.30,31,32,33.otf} | Bin + ...ing2_multiple_subrules_f1.default.41,42,43.otf} | Bin + ...e_subrules_f1.default.retain-all-codepoint.otf} | Bin + ...ltiple_subrules_f1.retain-gids.30,31,32,33.otf} | Bin + ..._multiple_subrules_f1.retain-gids.41,42,43.otf} | Bin + ...brules_f1.retain-gids.retain-all-codepoint.otf} | Bin + ...ub_chaining3_simple_f2.default.30,31,32,33.otf} | Bin + ... gsub_chaining3_simple_f2.default.41,42,43.otf} | Bin + ...ng3_simple_f2.default.retain-all-codepoint.otf} | Bin + ...haining3_simple_f2.retain-gids.30,31,32,33.otf} | Bin + ...b_chaining3_simple_f2.retain-gids.41,42,43.otf} | Bin + ...simple_f2.retain-gids.retain-all-codepoint.otf} | Bin + ...created.default.41,42,43,44,45,46,47,48,49.otf} | Bin + ...ually_created.default.41,42,43,44,45,46,47.otf} | Bin + ...ually_created.default.41,42,43,44,45,46,4D.otf} | Bin + ...ually_created.default.41,42,43,44,45,46,51.otf} | Bin + ...manually_created.default.41,42,43,44,45,46.otf} | Bin + ...=> gsub8_manually_created.default.41,42,43.otf} | Bin + ...1.otf => gsub8_manually_created.default.41.otf} | Bin + ...1.otf => gsub8_manually_created.default.61.otf} | Bin + ...ually_created.default.retain-all-codepoint.otf} | Bin + ...ted.retain-gids.41,42,43,44,45,46,47,48,49.otf} | Bin + ...y_created.retain-gids.41,42,43,44,45,46,47.otf} | Bin + ...y_created.retain-gids.41,42,43,44,45,46,4D.otf} | Bin + ...y_created.retain-gids.41,42,43,44,45,46,51.otf} | Bin + ...ally_created.retain-gids.41,42,43,44,45,46.otf} | Bin + ...sub8_manually_created.retain-gids.41,42,43.otf} | Bin + ...f => gsub8_manually_created.retain-gids.41.otf} | Bin + ...f => gsub8_manually_created.retain-gids.61.otf} | Bin + ...y_created.retain-gids.retain-all-codepoint.otf} | Bin + .../Khmer.keep-layout-retain-gids.1780.ttf | Bin 4464 -> 0 bytes + ...ids.1789,17BB,17C6,1794,17B6,1793,1798,17BE.ttf | Bin 7848 -> 0 bytes + .../Khmer.keep-layout-retain-gids.31.ttf | Bin 4256 -> 0 bytes + .../layout.khmer/Khmer.keep-layout.1780.ttf | Bin 4204 -> 0 bytes + ...out.1789,17BB,17C6,1794,17B6,1793,1798,17BE.ttf | Bin 6412 -> 0 bytes + .../expected/layout.khmer/Khmer.keep-layout.31.ttf | Bin 4140 -> 0 bytes + ...oNastaliqUrdu-Bold.retain-gids.627,644,62D.ttf} | Bin + ... Roboto-Regular.smallcaps.default.41,42,43.ttf} | Bin + ... => Roboto-Regular.smallcaps.default.41,43.ttf} | Bin + ...ttf => Roboto-Regular.smallcaps.default.41.ttf} | Bin + ...ttf => Roboto-Regular.smallcaps.default.43.ttf} | Bin + ... => Roboto-Regular.smallcaps.default.CA,CB.ttf} | Bin + ...oto-Regular.smallcaps.retain-gids.41,42,43.ttf} | Bin + ...Roboto-Regular.smallcaps.retain-gids.41,43.ttf} | Bin + ...=> Roboto-Regular.smallcaps.retain-gids.41.ttf} | Bin + ...=> Roboto-Regular.smallcaps.retain-gids.43.ttf} | Bin + ...Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf} | Bin + .../Fraunces.keep-layout.26,66,69,124,125.ttf | Bin 18496 -> 0 bytes + .../expected/variable/Fraunces.keep-layout.61.ttf | Bin 5880 -> 0 bytes + .../data/profiles/keep-layout-drop-hints.txt | 2 -- + .../data/profiles/keep-layout-retain-gids.txt | 2 -- + test/subset/data/profiles/keep-layout.txt | 1 - + test/subset/data/tests/basics.tests | 2 -- + test/subset/data/tests/layout.context.tests | 4 ++-- + test/subset/data/tests/layout.gpos.tests | 4 ++-- + test/subset/data/tests/layout.gpos2.tests | 4 ++-- + test/subset/data/tests/layout.gpos3.tests | 4 ++-- + test/subset/data/tests/layout.gpos4.tests | 4 ++-- + test/subset/data/tests/layout.gpos5.tests | 4 ++-- + test/subset/data/tests/layout.gpos6.tests | 4 ++-- + test/subset/data/tests/layout.gpos8.amiri.tests | 4 ++-- + test/subset/data/tests/layout.gpos8.tests | 4 ++-- + test/subset/data/tests/layout.gpos9.tests | 4 ++-- + test/subset/data/tests/layout.gsub3.tests | 4 ++-- + test/subset/data/tests/layout.gsub5.tests | 4 ++-- + test/subset/data/tests/layout.gsub6.tests | 4 ++-- + test/subset/data/tests/layout.gsub8.tests | 4 ++-- + test/subset/data/tests/layout.khmer.tests | 4 ++-- + .../data/tests/layout.notonastaliqurdu.tests | 2 +- + test/subset/data/tests/layout.tests | 4 ++-- + test/subset/data/tests/variable.tests | 2 +- + test/subset/generate-expected-outputs.py | 2 +- + test/subset/run-tests.py | 2 +- + 614 files changed, 36 insertions(+), 46 deletions(-) + +commit 425ba1f4ab4fd1ee0245bc822336d26bd1755c52 +Author: Garret Rieger +Date: Mon Apr 19 18:01:24 2021 -0700 + + [subset] fixes infinite loop in hb_set_get_max(). + + Fixes https://oss-fuzz.com/testcase-detail/5363902507515904 + + src/hb-set.hh | 2 +- + test/api/test-set.c | 7 ++++++- + ...-testcase-minimized-hb-subset-fuzzer-5363902507515904 | Bin 0 -> 1683 bytes + 3 files changed, 7 insertions(+), 2 deletions(-) + +commit ec4321068b9de1ea2730b8a62dda7cb23d064303 +Author: Garret Rieger +Date: Mon Apr 19 17:18:05 2021 -0700 + + [subset] fix infinite loop caused by alloc failure in repacker. + + Fixes: https://oss-fuzz.com/testcase-detail/5609112151916544. + + src/hb-repacker.hh | 8 ++++---- + ...testcase-minimized-hb-subset-fuzzer-5609112151916544 | Bin 0 -> 80225 bytes + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 0e845d973e2bf15b56cf68af9db778d1258b7709 +Author: Garret Rieger +Date: Mon Apr 19 16:09:37 2021 -0700 + + [subset] fix memory leak in repacker caused by failed alloc. + + Fixes: https://oss-fuzz.com/testcase-detail/5616763250278400. + + src/hb-repacker.hh | 4 +++- + ...testcase-minimized-hb-subset-fuzzer-5616763250278400 | Bin 0 -> 97363 bytes + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit 3fb62cdc141d2d30ba0fc4a173dd50e7c1d56466 +Author: Garret Rieger +Date: Mon Apr 5 15:48:34 2021 -0700 + + [subset] fail on offset overflow in tables that we don't repack. + + Fixes: https://oss-fuzz.com/testcase-detail/5229304507138048 + + src/hb-subset.cc | 5 ++++- + ...testcase-minimized-hb-subset-fuzzer-5229304507138048 | Bin 0 -> 56552 bytes + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit 19e096aa97b1b3af21313df5250a937ddfece7fb +Merge: ed2ee8a8c 23a28f5ad +Author: Behdad Esfahbod +Date: Fri Apr 16 14:35:04 2021 -0600 + + Merge pull request #2067 from harfbuzz/null-size + + Avoid undefined-behavior, another try + +commit ed2ee8a8c26dc39e39172c169d8a0d434083fefe +Author: Behdad Esfahbod +Date: Fri Apr 16 13:53:43 2021 -0600 + + Revert "Disable -Wunused-macros under GCC" + + This reverts commit 1b1413246b8b4a9c6f7e0aac16afd6d110c142cf. + + Err. It wasn't working. We already have that disabled in the files it + is warning about. Doesn't work. + + src/hb.hh | 1 - + 1 file changed, 1 deletion(-) + +commit 47cbf8f2c49ae82b85bf1edb211ade257f009800 +Author: Behdad Esfahbod +Date: Tue Mar 30 21:01:44 2021 -0600 + + [test] Silence more compiler warnings + + test/api/test-unicode.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 1b1413246b8b4a9c6f7e0aac16afd6d110c142cf +Author: Behdad Esfahbod +Date: Tue Mar 30 20:54:20 2021 -0600 + + Disable -Wunused-macros under GCC + + Since the pragram in hb-ot-shape-complex-indic-table.cc didn't seem to + silence GCC, eg: + + ../../src/hb-ot-shape-complex-indic-table.cc:55: warning: macro "ISC_TL" is not used [-Wunused-macros] + 55 | #define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 7 chars; Tone_Letter */ + + disable it at compiler level. + + src/hb.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 23a28f5ad059a45ff861a06a63d8537dab7f81b7 +Author: Behdad Esfahbod +Date: Fri Apr 16 13:22:05 2021 -0600 + + Avoid undefined-behavior + + If a struct had (because it's a union) sizeof that is larger than the null_size, + we were providing only null_size bytes for its Null object. We know we'd never + access beyond that, but is undefined-behavior nonetheless according to the + standard. + + The alternative fix would have required use of flexible-arrays, which are not + standard and have their own issues in various compiler. We've discussed that + extensively in the follow Mozilla issue (currently locked; I've asked that it + be opened): + + https://bugzilla.mozilla.org/show_bug.cgi?id=1577584 + + Part of + https://github.com/harfbuzz/harfbuzz/pull/2067 + + src/hb-null.hh | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 499248c533eaf88f20920bc438a939989a359956 +Author: Behdad Esfahbod +Date: Fri Apr 16 13:14:48 2021 -0600 + + [blob] Use min_size, instead of null_size in .as() + + Part of https://github.com/harfbuzz/harfbuzz/pull/2067 + + src/hb-array.hh | 2 +- + src/hb-null.hh | 9 ++++++++- + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit a4fb5da984d1dc50e419298a6212a0f53b4f761f +Author: Khaled Hosny +Date: Fri Apr 16 14:10:37 2021 +0200 + + [ci] Enable DirectWrite in win32 tarballs + + .ci/build-win32.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f2240d12c2a847afda0eb2da635694ca2346de65 +Author: Khaled Hosny +Date: Fri Apr 16 02:37:11 2021 +0200 + + [ci] Use -j2 for make and ninja in distcheck job + + Lets see if this makes it faster without crashing gcc. + + .circleci/config.yml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f5c922b7091b9919cd6dbe17db663edb366aea52 +Author: Khaled Hosny +Date: Fri Apr 16 01:47:34 2021 +0200 + + [ci] Try to stop distcheck job from crashing gcc + + .circleci/config.yml | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit e116058bba1f5eb667d211c0c6c0be1bbffc6213 +Author: Khaled Hosny +Date: Thu Apr 15 13:52:19 2021 +0200 + + [directwrite] Use correct UTF-16 string length + + Fixes https://github.com/harfbuzz/harfbuzz/issues/2474 + + src/hb-directwrite.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 668acff1f07ed6bb1472467e59d16399befa68ae +Author: Ben Denckla +Date: Mon Apr 12 14:25:19 2021 -0400 + + similarly improve comments on Hebrew ccc 18 & 19 + + Should have committed this along with commit 9658435a25c2ba82 but forgot. + + src/hb-ot-shape-fallback.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 43d955207bcfcddbf5a5e3d35819fddb81605be3 +Author: Ben Denckla +Date: Mon Apr 12 14:01:56 2021 -0400 + + improve comments on Hebrew ccc 18 & 19 + + improve comments to reflect that: + ccc 18 includes both "flavors" of qamats: qamats [gadol] and qamats qatan + ccc 19 includes both "flavors" of holam: holam [not haser for vav] and holam haser for vav + This code and its comments may have been written before these code points were added to Unicode. + I.e. originally, these comments may have been complete, but they may have become incomplete in the meantime. + + src/hb-unicode.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4cc4cd3b24ded40cfff651ebf63d20d19253c505 +Author: Ambient Lighter +Date: Sat Apr 10 14:11:23 2021 +0300 + + [docs] Fix spelling typo (#2945) + + docs/usermanual-object-model.xml | 2 +- + perf/texts/en-words.txt | 1 - + 2 files changed, 1 insertion(+), 2 deletions(-) + +commit 9dc9f0385dce05456d48730bf5dc7cac52eaa4da +Author: Qunxin Liu +Date: Thu Apr 8 11:00:17 2021 -0700 + + [subset] fix for fuzzer testcase: https://oss-fuzz.com/testcase-detail/5858518134554624 + + src/hb-ot-layout-gpos-table.hh | 4 ++++ + ...z-testcase-minimized-hb-subset-fuzzer-5858518134554624 | Bin 0 -> 802 bytes + 2 files changed, 4 insertions(+) + +commit 430a67ceaba5896c850c0a0da80f1bc211c022d8 +Author: Qunxin Liu +Date: Thu Apr 1 12:01:19 2021 -0700 + + [subset] COLRv1 struct definitions + + src/hb-ot-color-colr-table.hh | 479 +++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 474 insertions(+), 5 deletions(-) + +commit 553ffaf6823040bf4a91bcd4c8e42592cd4d13c2 +Author: Qunxin Liu +Date: Wed Apr 7 17:15:32 2021 -0700 + + [subset] fix for fuzzer testcase: https://oss-fuzz.com/testcase-detail/6382598554255360 + avoid writing to null pointer + + src/hb-ot-layout-gpos-table.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 4af5dacedc8d45c701c8a559962f1b071419ca50 +Author: Qunxin Liu +Date: Wed Apr 7 10:56:49 2021 -0700 + + [subset] add fuzzer testcase + + ...z-testcase-minimized-hb-subset-fuzzer-6382598554255360 | Bin 0 -> 766 bytes + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 8b686afeb5a7f959d98c0f85844d782c1cbc489f +Author: Garret Rieger +Date: Tue Apr 6 11:33:38 2021 -0700 + + [subset] add unlikely(). + + src/hb-ot-layout-gsubgpos.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 64122b5a443d78cc1c4c0c94fa2e489e1f22dd3e +Author: Garret Rieger +Date: Mon Apr 5 12:53:08 2021 -0700 + + [subset] don't visit lookup if covered glyph set has failed. + + If covered glyph set is in error then the same lookup can be recursed into repeatedly potentially causing a fuzzer timeout. Fixes: https://oss-fuzz.com/testcase-detail/5416421032067072. + + src/hb-ot-layout-gsubgpos.hh | 2 ++ + ...z-testcase-minimized-hb-subset-fuzzer-5416421032067072 | Bin 0 -> 114 bytes + 2 files changed, 2 insertions(+) + +commit 4ec18c85e6eebc0948c29df36fc13b5467fce86b +Author: Garret Rieger +Date: Fri Apr 2 15:33:54 2021 -0700 + + [subset] add subsetting tests with drop hints and layout subsetting enabled. + + ...taa-Regular-new.keep-layout-drop-hints.61,62,63.ttf | Bin 0 -> 3444 bytes + ...fortaa-Regular-new.keep-layout-drop-hints.61,63.ttf | Bin 0 -> 3140 bytes + ...Comfortaa-Regular-new.keep-layout-drop-hints.61.ttf | Bin 0 -> 2804 bytes + ...Comfortaa-Regular-new.keep-layout-drop-hints.62.ttf | Bin 0 -> 2396 bytes + ...Comfortaa-Regular-new.keep-layout-drop-hints.63.ttf | Bin 0 -> 2464 bytes + ...new.keep-layout-drop-hints.retain-all-codepoint.ttf | Bin 0 -> 187944 bytes + ...-Regular-subset.keep-layout-drop-hints.61,62,63.ttf | Bin 0 -> 1452 bytes + ...gjo-Regular-subset.keep-layout-drop-hints.61,63.ttf | Bin 0 -> 1276 bytes + ...eongjo-Regular-subset.keep-layout-drop-hints.61.ttf | Bin 0 -> 1128 bytes + ...eongjo-Regular-subset.keep-layout-drop-hints.62.ttf | Bin 0 -> 1140 bytes + ...eongjo-Regular-subset.keep-layout-drop-hints.63.ttf | Bin 0 -> 1104 bytes + ...set.keep-layout-drop-hints.retain-all-codepoint.ttf | Bin 0 -> 3536 bytes + ...oto-Regular.abc.keep-layout-drop-hints.61,62,63.ttf | Bin 0 -> 1208 bytes + ...Roboto-Regular.abc.keep-layout-drop-hints.61,63.ttf | Bin 0 -> 1120 bytes + .../Roboto-Regular.abc.keep-layout-drop-hints.61.ttf | Bin 0 -> 988 bytes + .../Roboto-Regular.abc.keep-layout-drop-hints.62.ttf | Bin 0 -> 876 bytes + .../Roboto-Regular.abc.keep-layout-drop-hints.63.ttf | Bin 0 -> 960 bytes + ...abc.keep-layout-drop-hints.retain-all-codepoint.ttf | Bin 0 -> 1208 bytes + test/subset/data/profiles/keep-layout-drop-hints.txt | 2 ++ + test/subset/data/tests/basics.tests | 1 + + 20 files changed, 3 insertions(+) + +commit 6f98a8ed4627b662d9591649328d2d302fc01987 +Author: Garret Rieger +Date: Fri Apr 2 14:37:10 2021 -0700 + + [subset] Anchor should only use format 1 when hints are dropped. + + Refactor Anchor to have a subset method instead of copy. This also allows + use to use serialize_subset in several places which simplifies calculating + offset bases. + + src/hb-ot-layout-gpos-table.hh | 189 +++++++++++++++++++++-------------------- + 1 file changed, 95 insertions(+), 94 deletions(-) + +commit 71d6d1560035619ee685dc9aa626eeefabe5e9f1 +Author: Garret Rieger +Date: Mon Apr 5 12:03:17 2021 -0700 + + [subset] clamp distance to prevent shifting outside of the limits of int64. + + Fixes https://oss-fuzz.com/testcase-detail/4961171477233664. + + src/hb-repacker.hh | 3 ++- + ...testcase-minimized-hb-subset-fuzzer-4961171477233664 | Bin 0 -> 39793 bytes + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit fcacd17748b85a56ff0c1d822295bfcbd8e175a2 +Author: Khaled Hosny +Date: Mon Apr 5 22:27:39 2021 +0200 + + [ot] Update _hb_glyph_info_is_default_ignorable_and_not_hidden() + + Used _hb_glyph_info_substituted() similar to the change made to + _hb_glyph_info_is_default_ignorable() in + 7686ff854bbb9698bb1469dcfe6d288c695a76b7. + + src/hb-ot-layout.hh | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 596f4258d0b6464a8186263625a2da1b16014bdd +Author: Garret Rieger +Date: Fri Apr 2 12:41:09 2021 -0700 + + [subset] copy Lookup::markFilteringSet when subseting. + + src/hb-ot-layout-common.hh | 8 ++++++++ + .../Comfortaa-Regular-new.keep-layout.61,62,63.ttf | Bin 0 -> 8100 bytes + .../basics/Comfortaa-Regular-new.keep-layout.61,63.ttf | Bin 0 -> 7736 bytes + .../basics/Comfortaa-Regular-new.keep-layout.61.ttf | Bin 0 -> 7360 bytes + .../basics/Comfortaa-Regular-new.keep-layout.62.ttf | Bin 0 -> 6796 bytes + .../basics/Comfortaa-Regular-new.keep-layout.63.ttf | Bin 0 -> 6844 bytes + ...aa-Regular-new.keep-layout.retain-all-codepoint.ttf | Bin 0 -> 222212 bytes + ...numMyeongjo-Regular-subset.keep-layout.61,62,63.ttf | Bin 0 -> 4128 bytes + .../NanumMyeongjo-Regular-subset.keep-layout.61,63.ttf | Bin 0 -> 3580 bytes + .../NanumMyeongjo-Regular-subset.keep-layout.61.ttf | Bin 0 -> 3156 bytes + .../NanumMyeongjo-Regular-subset.keep-layout.62.ttf | Bin 0 -> 3180 bytes + .../NanumMyeongjo-Regular-subset.keep-layout.63.ttf | Bin 0 -> 3048 bytes + ...Regular-subset.keep-layout.retain-all-codepoint.ttf | Bin 0 -> 9524 bytes + .../basics/Roboto-Regular.abc.keep-layout.61,62,63.ttf | Bin 0 -> 2452 bytes + .../basics/Roboto-Regular.abc.keep-layout.61,63.ttf | Bin 0 -> 2260 bytes + .../basics/Roboto-Regular.abc.keep-layout.61.ttf | Bin 0 -> 2048 bytes + .../basics/Roboto-Regular.abc.keep-layout.62.ttf | Bin 0 -> 1916 bytes + .../basics/Roboto-Regular.abc.keep-layout.63.ttf | Bin 0 -> 1972 bytes + ...to-Regular.abc.keep-layout.retain-all-codepoint.ttf | Bin 0 -> 2452 bytes + test/subset/data/tests/basics.tests | 1 + + 20 files changed, 9 insertions(+) + +commit d3a2f999e4d5c83e14f6380b780aab170d9cbd39 +Author: Behdad Esfahbod +Date: Fri Apr 2 08:32:41 2021 -0600 + + Fix up build + + This was left out; oops. + + src/hb-set-digest.hh | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit c35d7863979f2395140d70cda49a19857b98f515 +Author: Garret Rieger +Date: Thu Apr 1 14:32:38 2021 -0700 + + [subset] never drop the 'pref' feature. + + Never ever drop feature 'pref', even if it's empty. Harfbuzz uses it to choose the shaper for Khmer. + + src/hb-ot-layout-gsubgpos.hh | 7 +++++++ + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + .../layout.khmer/Khmer.keep-layout-retain-gids.1780.ttf | Bin 0 -> 4464 bytes + ...ain-gids.1789,17BB,17C6,1794,17B6,1793,1798,17BE.ttf | Bin 0 -> 7848 bytes + .../layout.khmer/Khmer.keep-layout-retain-gids.31.ttf | Bin 0 -> 4256 bytes + .../expected/layout.khmer/Khmer.keep-layout.1780.ttf | Bin 0 -> 4204 bytes + ...p-layout.1789,17BB,17C6,1794,17B6,1793,1798,17BE.ttf | Bin 0 -> 6412 bytes + .../data/expected/layout.khmer/Khmer.keep-layout.31.ttf | Bin 0 -> 4140 bytes + test/subset/data/fonts/Khmer.ttf | Bin 0 -> 75368 bytes + test/subset/data/tests/layout.khmer.tests | 11 +++++++++++ + test/subset/meson.build | 1 + + 12 files changed, 21 insertions(+) + +commit 092094f7055c1632e9bdf2c07f16e984a88a65ec +Author: Behdad Esfahbod +Date: Thu Apr 1 15:47:21 2021 -0600 + + Use as_array() and range loops in a few places + + src/hb-ot-cmap-table.hh | 17 +++++++---------- + src/hb-ot-layout-common.hh | 26 +++++++++----------------- + src/hb-set.hh | 4 ++++ + 3 files changed, 20 insertions(+), 27 deletions(-) + +commit 55e7f3fe329021c77c880f1f3fd6d082f4ac27da +Author: Garret Rieger +Date: Thu Apr 1 13:35:30 2021 -0700 + + [subset] Match FeatureVariationRecord dropping from fontTools. + + Only drop records with no matching features that are at the end of the list. See: https://github.com/fonttools/fonttools/commit/cab7d13dc0883765cde435215c7d65e9212f152d + + src/hb-ot-layout-common.hh | 36 ++++++++++++++++++++++++++++++------ + 1 file changed, 30 insertions(+), 6 deletions(-) + +commit f0c78e028261a7823194cccc7be241aa9ddbac25 +Author: Garret Rieger +Date: Thu Mar 25 12:57:12 2021 -0700 + + [subset] don't drop features referenced in a feature variation substitution. + + src/hb-ot-layout-common.hh | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +commit dae99b7769616d354e8cce41fbd7cf780353cb44 +Author: Garret Rieger +Date: Thu Mar 25 12:33:51 2021 -0700 + + [subset] don't keep FeatureVariationRecord's with no subsittutions. + + src/hb-ot-layout-common.hh | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit 85b07287838440e000622c53cee9cc911ad0de6d +Author: Garret Rieger +Date: Thu Mar 25 12:17:18 2021 -0700 + + Add full variable font subsetting test. + + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + .../variable/Fraunces.keep-layout.26,66,69,124,125.ttf | Bin 0 -> 18496 bytes + .../data/expected/variable/Fraunces.keep-layout.61.ttf | Bin 0 -> 5880 bytes + test/subset/data/fonts/Fraunces.ttf | Bin 0 -> 360440 bytes + test/subset/data/tests/variable.tests | 9 +++++++++ + test/subset/meson.build | 1 + + 7 files changed, 12 insertions(+) + +commit c4b49075f62eaa11799c95099a70acbb70e566c9 +Author: Behdad Esfahbod +Date: Thu Apr 1 10:47:18 2021 -0700 + + Update CMakeLists.txt + + Keep the warning. + + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9945f327463066957f2677237d468651235a1f3d +Author: Timo Suoranta +Date: Sat Feb 6 14:24:25 2021 +0200 + + Test fix to export target include directories + + CMakeLists.txt | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit b10741ca7f4cd55526f303c47c72f0a5c1a932fe +Author: Garret Rieger +Date: Thu Mar 25 19:14:48 2021 -0700 + + [subset] when closing glyphs in context lookups don't use a current glyph set if a lookup is already applied. + + src/hb-ot-layout-gsubgpos.hh | 12 ++++++++---- + ...ayout-retain-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 18272 -> 0 bytes + ...rdu-Bold.keep-layout-retain-gids.627,644,62D,628.ttf | Bin 24416 -> 0 bytes + ...liqUrdu-Bold.keep-layout-retain-gids.627,644,62D.ttf | Bin 0 -> 11532 bytes + ...astaliqUrdu-Bold.keep-layout-retain-gids.627,644.ttf | Bin 9216 -> 0 bytes + ...ep-layout-retain-gids.633,645,627,621,20,644,627.ttf | Bin 18212 -> 0 bytes + ...liqUrdu-Bold.keep-layout-retain-gids.63A,64A,631.ttf | Bin 26628 -> 0 bytes + ...-Bold.keep-layout.627,644,623,62D,644,627,645,2E.ttf | Bin 11436 -> 0 bytes + ...otoNastaliqUrdu-Bold.keep-layout.627,644,62D,628.ttf | Bin 18288 -> 0 bytes + .../NotoNastaliqUrdu-Bold.keep-layout.627,644.ttf | Bin 3568 -> 0 bytes + ...Urdu-Bold.keep-layout.633,645,627,621,20,644,627.ttf | Bin 12408 -> 0 bytes + .../NotoNastaliqUrdu-Bold.keep-layout.63A,64A,631.ttf | Bin 20408 -> 0 bytes + test/subset/data/tests/layout.notonastaliqurdu.tests | 7 +------ + 13 files changed, 9 insertions(+), 10 deletions(-) + +commit 2773d057403292e4a13e13ca12912437607b9d86 +Author: Garret Rieger +Date: Wed Nov 4 11:11:16 2020 -0800 + + [subset] Add a test case using NotoNastaliqUrdu. + + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + ...ayout-retain-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 0 -> 18272 bytes + ...rdu-Bold.keep-layout-retain-gids.627,644,62D,628.ttf | Bin 0 -> 24416 bytes + ...astaliqUrdu-Bold.keep-layout-retain-gids.627,644.ttf | Bin 0 -> 9216 bytes + ...ep-layout-retain-gids.633,645,627,621,20,644,627.ttf | Bin 0 -> 18212 bytes + ...liqUrdu-Bold.keep-layout-retain-gids.63A,64A,631.ttf | Bin 0 -> 26628 bytes + ...-Bold.keep-layout.627,644,623,62D,644,627,645,2E.ttf | Bin 0 -> 11436 bytes + ...otoNastaliqUrdu-Bold.keep-layout.627,644,62D,628.ttf | Bin 0 -> 18288 bytes + .../NotoNastaliqUrdu-Bold.keep-layout.627,644.ttf | Bin 0 -> 3568 bytes + ...Urdu-Bold.keep-layout.633,645,627,621,20,644,627.ttf | Bin 0 -> 12408 bytes + .../NotoNastaliqUrdu-Bold.keep-layout.63A,64A,631.ttf | Bin 0 -> 20408 bytes + test/subset/data/tests/layout.notonastaliqurdu.tests | 13 +++++++++++++ + test/subset/meson.build | 1 + + 14 files changed, 16 insertions(+) + +commit 8ef4257dc8d6b59b55d0169b66c8de135d5f199b +Author: Garret Rieger +Date: Wed Mar 31 15:00:46 2021 -0700 + + [sanitize] change max ops to track number of bytes processed. + + Counting bytes as the operations is likely to be a better proxy for how + much work processing the table will cost vs. the current approach of + counting the number of sub-objects. + + This should allow checks for max features, max scripts, etc. to be removed. + + I tested this change against the full collection of fonts at https://github.com/google/fonts + and a max ops factor of 3 was sufficient to successfully sanitize all of them. + + src/hb-sanitize.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 70110f6aaac541bc157eb5612b476d3b906b5d2a +Author: Behdad Esfahbod +Date: Wed Mar 31 17:04:02 2021 -0600 + + Modify OffsetTo<>::sanitize() overflow check + + The code in question was introduced in 70eb2ff682. + Rewrite it to not call sanitizer check_range() as we want to use + check_range() for byte accounting. + + Part of https://github.com/harfbuzz/harfbuzz/pull/2923 + + src/hb-open-type.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4dba749d833491ec0c73fb4647f55236be1caee3 +Author: Behdad Esfahbod +Date: Wed Mar 31 16:09:39 2021 -0600 + + Add SortedArray{16,32}Of<> + + src/hb-open-type.hh | 5 ++++- + src/hb-ot-cmap-table.hh | 10 +++++----- + src/hb-ot-color-svg-table.hh | 2 +- + src/hb-ot-layout-base-table.hh | 8 ++++---- + src/hb-ot-layout-common.hh | 8 ++++---- + src/hb-ot-layout-jstf-table.hh | 2 +- + src/hb-ot-vorg-table.hh | 2 +- + 7 files changed, 20 insertions(+), 17 deletions(-) + +commit 5639e253f91bd71cdb626719ebc5b8d68631cc73 +Author: Behdad Esfahbod +Date: Wed Mar 31 16:04:43 2021 -0600 + + Add Array16Of<> + + src/hb-aat-layout-common.hh | 2 +- + src/hb-aat-layout-just-table.hh | 2 +- + src/hb-open-type.hh | 6 ++-- + src/hb-ot-gasp-table.hh | 2 +- + src/hb-ot-layout-common.hh | 12 +++---- + src/hb-ot-layout-gdef-table.hh | 4 +-- + src/hb-ot-layout-gpos-table.hh | 8 ++--- + src/hb-ot-layout-gsub-table.hh | 20 +++++------ + src/hb-ot-layout-gsubgpos.hh | 54 +++++++++++++++--------------- + src/hb-ot-math-table.hh | 10 +++--- + src/hb-ot-post-table.hh | 4 +-- + src/hb-ot-shape-complex-arabic-fallback.hh | 2 +- + src/hb-ot-var-avar-table.hh | 2 +- + 13 files changed, 64 insertions(+), 64 deletions(-) + +commit 2520a82df9116fbc287cec1be66d05874c467bbb +Author: Behdad Esfahbod +Date: Wed Mar 31 15:34:26 2021 -0600 + + s/LArrayOf/Array32Of/g + + src/hb-aat-layout-ankr-table.hh | 2 +- + src/hb-aat-layout-just-table.hh | 2 +- + src/hb-aat-ltag-table.hh | 2 +- + src/hb-open-file.hh | 4 ++-- + src/hb-open-type.hh | 4 ++-- + src/hb-ot-color-cbdt-table.hh | 8 ++++---- + src/hb-ot-layout-common.hh | 2 +- + src/hb-ot-meta-table.hh | 2 +- + 8 files changed, 13 insertions(+), 13 deletions(-) + +commit 5efe3609865b450305474b9abe672905bd25cc06 +Author: Behdad Esfahbod +Date: Wed Mar 31 15:33:22 2021 -0600 + + Rename (Unsized)OffsetListOf + + src/hb-aat-layout-morx-table.hh | 4 ++-- + src/hb-open-type.hh | 6 +++--- + src/hb-ot-layout-common.hh | 8 ++++---- + src/hb-ot-layout-gpos-table.hh | 2 +- + src/hb-ot-layout-gsubgpos.hh | 2 +- + src/hb-ot-layout-jstf-table.hh | 6 +++--- + 6 files changed, 14 insertions(+), 14 deletions(-) + +commit 6c4e0491d7ebdc41318db59c4b0911212b299341 +Author: Behdad Esfahbod +Date: Wed Mar 31 15:31:32 2021 -0600 + + s/OffsetArrayOf/Array16OfOffset16To/g + + src/hb-open-type.hh | 6 ++--- + src/hb-ot-layout-base-table.hh | 2 +- + src/hb-ot-layout-common.hh | 8 +++---- + src/hb-ot-layout-gdef-table.hh | 6 ++--- + src/hb-ot-layout-gpos-table.hh | 2 +- + src/hb-ot-layout-gsub-table.hh | 26 ++++++++++---------- + src/hb-ot-layout-gsubgpos.hh | 54 +++++++++++++++++++++--------------------- + 7 files changed, 52 insertions(+), 52 deletions(-) + +commit 1fc6b69aed28aa768b65a8cf0825b79aa851a71f +Author: Behdad Esfahbod +Date: Wed Mar 31 15:30:35 2021 -0600 + + s/UnsizedOffsetArrayOf/UnsizedArray16OfOffsetTo/g + + src/hb-open-type.hh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 2a54c9f744b195bb1412573afcc36db806d20a4b +Author: Behdad Esfahbod +Date: Wed Mar 31 15:26:42 2021 -0600 + + . + + src/hb-open-type.hh | 9 +++------ + src/hb-ot-color-sbix-table.hh | 4 ++-- + src/hb-ot-layout-common.hh | 4 ++-- + 3 files changed, 7 insertions(+), 10 deletions(-) + +commit c539afb08b1b698216541087b1eec222472699ea +Author: Behdad Esfahbod +Date: Wed Mar 31 13:28:25 2021 -0600 + + [CFF] Use NNOffsetTo<> instead of OffsetTo<> + + I'm pretty sure that's what is intended. + + src/hb-ot-cff1-table.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9b4b58493b7e4c15565e4a47118181d96f517fae +Author: Behdad Esfahbod +Date: Wed Mar 31 13:27:21 2021 -0600 + + Fixup for recent OffsetTo<> changes + + src/hb-open-type.hh | 2 +- + src/hb-ot-layout-gsubgpos.hh | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit ad28f973f3ec6184b4c405efc0e17fba87b51062 +Author: Behdad Esfahbod +Date: Wed Mar 31 12:49:14 2021 -0600 + + Rename offset types to be explicit about their size + + Add Offset16To<>, Offset24To<>, and Offset32To<> for most use-cases. + + src/hb-aat-layout-ankr-table.hh | 6 +-- + src/hb-aat-layout-common.hh | 2 +- + src/hb-aat-layout-feat-table.hh | 2 +- + src/hb-aat-layout-just-table.hh | 12 ++--- + src/hb-aat-layout-kerx-table.hh | 14 +++--- + src/hb-aat-layout-opbd-table.hh | 8 ++-- + src/hb-aat-layout-trak-table.hh | 8 ++-- + src/hb-aat-ltag-table.hh | 2 +- + src/hb-open-file.hh | 12 ++--- + src/hb-open-type.hh | 14 +++--- + src/hb-ot-cmap-table.hh | 6 +-- + src/hb-ot-color-cbdt-table.hh | 4 +- + src/hb-ot-color-colr-table.hh | 4 +- + src/hb-ot-color-cpal-table.hh | 8 ++-- + src/hb-ot-color-sbix-table.hh | 4 +- + src/hb-ot-color-svg-table.hh | 4 +- + src/hb-ot-layout-base-table.hh | 28 ++++++------ + src/hb-ot-layout-common.hh | 22 +++++----- + src/hb-ot-layout-gdef-table.hh | 24 +++++----- + src/hb-ot-layout-gpos-table.hh | 70 +++++++++++++++--------------- + src/hb-ot-layout-gsub-table.hh | 14 +++--- + src/hb-ot-layout-gsubgpos.hh | 64 +++++++++++++-------------- + src/hb-ot-layout-jstf-table.hh | 24 +++++----- + src/hb-ot-math-table.hh | 34 +++++++-------- + src/hb-ot-meta-table.hh | 2 +- + src/hb-ot-name-table.hh | 4 +- + src/hb-ot-shape-complex-arabic-fallback.hh | 2 +- + src/hb-ot-stat-table.hh | 8 ++-- + src/hb-ot-var-fvar-table.hh | 2 +- + src/hb-ot-var-gvar-table.hh | 6 +-- + src/hb-ot-var-hvar-table.hh | 10 ++--- + src/hb-ot-var-mvar-table.hh | 2 +- + 32 files changed, 214 insertions(+), 212 deletions(-) + +commit c5c13006a1f8e5fb9b28a3c2081e93eb4e5d4c98 +Author: Garret Rieger +Date: Wed Mar 31 11:23:46 2021 -0700 + + [subset] fix memory leaks found in https://oss-fuzz.com/testcase-detail/5179935334465536 + + src/hb-repacker.hh | 3 ++- + src/hb-vector.hh | 5 +++++ + ...testcase-minimized-hb-subset-fuzzer-5179935334465536 | Bin 0 -> 50501 bytes + 3 files changed, 7 insertions(+), 1 deletion(-) + +commit bd2950b3939d88fed998717b05367651153dc21b +Author: Behdad Esfahbod +Date: Wed Mar 31 11:36:36 2021 -0600 + + Make VariationStore::get_delta(outer, inner) private + + src/hb-ot-layout-common.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit 934675a42958ba2e4e3e10aa4b55a9e772977399 +Author: Behdad Esfahbod +Date: Wed Mar 31 11:34:41 2021 -0600 + + Use VarIdx in VariationDevice + + src/hb-ot-layout-common.hh | 17 +++++++---------- + 1 file changed, 7 insertions(+), 10 deletions(-) + +commit 0f7f7536b9d98e65f345398529da9c6bc365a3fb +Author: Behdad Esfahbod +Date: Wed Mar 31 11:31:49 2021 -0600 + + [hvar] Change variation-index types from "unsigned int" to uint32_t + + src/hb-ot-var-hvar-table.hh | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 9ffc46b8ff5546998fc9b74cb54dec8618ed0ac7 +Author: Behdad Esfahbod +Date: Wed Mar 31 11:26:18 2021 -0600 + + Add VarIdx + + src/hb-open-type.hh | 6 ++++++ + src/hb-static.cc | 1 + + 2 files changed, 7 insertions(+) + +commit 2179281c406452392a2d9c7e17b81e02735fe50b +Author: Behdad Esfahbod +Date: Wed Mar 31 11:20:21 2021 -0600 + + Add Offset24 + + src/hb-open-type.hh | 1 + + 1 file changed, 1 insertion(+) + +commit b3159ed8d2dbe4af584d05298448e6de62d394d6 +Author: Behdad Esfahbod +Date: Tue Mar 30 20:52:56 2021 -0600 + + [util] Silence compiler warning + + util/helper-cairo.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cab9d5a57dc56c47ba4db51b813fac618694c9a9 +Author: Andrzej Perczak +Date: Fri Mar 19 22:10:50 2021 +0100 + + hb-config: Include config-override earlier + + Currently config-override.h is included at the end of this file. This caused a problem for me while undefing HB_DISABLE_DEPRECATED, namely HB_IF_NOT_DEPRECATED was defined before actual undef took place and broke the whole build. I believe it would break builds for some other defines, too. Moving config-override.h include right after predefined configs is more sane and fixes all potential problems with includes. + + src/hb-config.hh | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +commit adca4ce071d12998deea6bb53b223daa3aa163c5 +Author: Garret Rieger +Date: Tue Mar 30 13:20:50 2021 -0700 + + [subset] fixes https://oss-fuzz.com/testcase-detail/6173520787800064. + + Caused by incorrect bounds check in glyph closure for context lookups. + + src/hb-ot-layout-gsubgpos.hh | 2 +- + ...-testcase-minimized-hb-subset-fuzzer-6173520787800064 | Bin 0 -> 1731 bytes + 2 files changed, 1 insertion(+), 1 deletion(-) + +commit 9f77a0c1ff02765862d6d2bfed6b9aab78db6fff +Author: Garret Rieger +Date: Tue Mar 30 14:10:45 2021 -0700 + + [subset] use hb_set_clear to avoid calling clear() on null pool set. + + src/hb-ot-layout-gsubgpos.hh | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 752e393ad2f5ec4f7faae84f5322fbef41ddb2ab +Author: Garret Rieger +Date: Mon Mar 29 17:23:33 2021 -0700 + + [subset] avoid calling clear on null pool set. + + src/hb-ot-layout-gsubgpos.hh | 3 ++- + ...z-testcase-minimized-hb-subset-fuzzer-5617065093365760 | Bin 0 -> 160 bytes + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 9ed5f04a7092c76744076ba65673b250aee22dcd +Author: Behdad Esfahbod +Date: Mon Mar 29 18:14:30 2021 -0600 + + [subset] Simplify recent out-of-memory fixes + + By checking return status of map->set(). + + src/hb-ot-layout-common.hh | 8 ++++---- + src/hb-ot-layout-gsubgpos.hh | 12 ++++++------ + 2 files changed, 10 insertions(+), 10 deletions(-) + +commit a8f9f85a919543ce79b5a7d5df90c132830ae772 +Author: Behdad Esfahbod +Date: Mon Mar 29 18:12:05 2021 -0600 + + [map] Return success from ->set() + + src/hb-map.hh | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit 8741914a8043757d4800b14192980fbc1ea24492 +Author: Garret Rieger +Date: Mon Mar 29 16:39:44 2021 -0700 + + [subset] fix memory leak when map insert fails. + + src/hb-ot-layout-common.hh | 17 ++++++++++++----- + ...estcase-minimized-hb-subset-fuzzer-6421315436281856 | Bin 0 -> 59 bytes + 2 files changed, 12 insertions(+), 5 deletions(-) + +commit 2397689387419f9a86b928ea5084b2318d136ac6 +Author: Behdad Esfahbod +Date: Mon Mar 29 17:34:23 2021 -0600 + + Remove hb_success_t + + Was not rolled-out yet. So just expand. + + src/hb-open-type.hh | 4 ++-- + src/hb.hh | 1 - + 2 files changed, 2 insertions(+), 3 deletions(-) + +commit 7a2eda7817a26e017c9da3db4700a24dde550dde +Author: Behdad Esfahbod +Date: Mon Mar 29 17:32:29 2021 -0600 + + Move code around + + src/hb-open-type.hh | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +commit bcb57dccaabad4275ab96b14123413bbec6d0fec +Author: Behdad Esfahbod +Date: Mon Mar 29 17:31:09 2021 -0600 + + [sanitize] Add short-circuit to ArrayOfM1 + + Like the sibling ArrayOf types. + + src/hb-open-type.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 5b6da6d2f0bcaeb7768705e6891f575ae73c8b41 +Author: Garret Rieger +Date: Mon Mar 29 16:19:17 2021 -0700 + + [subset] add fuzzer test case. + + ...z-testcase-minimized-hb-subset-fuzzer-5250795600740352 | Bin 0 -> 409 bytes + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 52df6b9fd8cf075f416372f0469a6915e814b0d6 +Author: Garret Rieger +Date: Mon Mar 29 16:17:27 2021 -0700 + + [subset] check for set insertion success. + + src/hb-ot-layout-gsubgpos.hh | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit c6adb90a273f22159b0775f798724d36d552d36c +Author: Garret Rieger +Date: Mon Mar 29 16:08:44 2021 -0700 + + [subset] fix nullptr deref. + + src/hb-ot-layout-gsubgpos.hh | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +commit 9a3537e5f688637a2ac2ced57de9e2b7c21d90a5 +Author: Garret Rieger +Date: Mon Mar 29 14:34:24 2021 -0700 + + [subset] invert err() return value. Undo previous change to check_success. + + src/hb-serialize.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit a804a0c903f6dd230954ff5855ed7ff1dd92844d +Author: Garret Rieger +Date: Mon Mar 29 14:25:20 2021 -0700 + + [subset] add fuzzer test case. + + ...-testcase-minimized-hb-subset-fuzzer-5887968763052032 | Bin 0 -> 3889 bytes + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit cdba5d44c28a97ab8d9298a3bef60fcbd0845000 +Author: Garret Rieger +Date: Mon Mar 29 14:23:59 2021 -0700 + + [subset] fix incorrect handling of return value in check_success in the error case. + + src/hb-serialize.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 05e845c49ad2eebf110dcc6cb0ee48a7f68ca233 +Author: Behdad Esfahbod +Date: Mon Mar 29 16:02:10 2021 -0700 + + Make previous commit gcc-only + + src/hb.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit b5e40323921566ce8a15aa7808d22d36acac4edd +Author: Behdad Esfahbod +Date: Mon Mar 29 15:54:40 2021 -0700 + + -Wno-unused-result + + GCC doesn't let one turn off the warning using "(void) foo()". + People have introduced macros that do "unused << foo()" instead. + Until we do something similar, silence gcc. + + Clang on the other hand understands "(void) foo()". + + src/hb.hh | 1 + + 1 file changed, 1 insertion(+) + +commit c30349d54e67c1ee7e1ea759e8378fcf6a6c9ff4 +Author: Khaled Hosny +Date: Sun Mar 21 20:12:59 2021 +0200 + + [hb-view] Support kitty inline images protocol + + https://github.com/harfbuzz/harfbuzz/issues/2758 + + util/helper-cairo.cc | 36 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 36 insertions(+) + +commit f7d5889b3ea9012d23407b83a176bcd54a94e21b +Author: Khaled Hosny +Date: Sun Mar 21 18:16:33 2021 +0200 + + [hb-view] Support iTerm2 inline images protocol + + https://github.com/harfbuzz/harfbuzz/issues/2758 + + util/helper-cairo.cc | 85 +++++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 78 insertions(+), 7 deletions(-) + +commit 743baf35436d8de937984e09467f453cdfba102e +Author: Khaled Hosny +Date: Mon Mar 22 15:51:17 2021 +0200 + + [build] Don’t look for FontConfig + + We don’t currently use it anywhere. It was used briefly for the + hb-fc-list tool, but this tool have not been built since 2015: + + commit cd042fc8c4a3984c3647cd22a27c34f00636f6e8 + Author: Behdad Esfahbod + Date: Thu Jun 18 10:55:13 2015 -0700 + + [util] Disable hb-fc-list for now + + Until I figure out what to do about the API, and finalize + the tool. + + .circleci/config.yml | 2 +- + Makefile.am | 1 - + configure.ac | 19 ------------------- + docs/usermanual-install-harfbuzz.xml | 20 -------------------- + meson.build | 7 ------- + meson_options.txt | 2 -- + subprojects/.gitignore | 1 - + subprojects/fontconfig.wrap | 6 ------ + 8 files changed, 1 insertion(+), 57 deletions(-) + +commit 95230e291dddc20185e6a34b69836631d894c0d8 +Author: Qunxin Liu +Date: Thu Mar 18 17:41:25 2021 -0700 + + [subset] support subsetting GSUB8 + + src/hb-ot-layout-gsub-table.hh | 73 ++++++++++++++++++++- + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + ...yout-retain-gids.41,42,43,44,45,46,47,48,49.otf | Bin 0 -> 3172 bytes + ...eep-layout-retain-gids.41,42,43,44,45,46,47.otf | Bin 0 -> 2796 bytes + ...eep-layout-retain-gids.41,42,43,44,45,46,4D.otf | Bin 0 -> 2860 bytes + ...eep-layout-retain-gids.41,42,43,44,45,46,51.otf | Bin 0 -> 2864 bytes + ...d.keep-layout-retain-gids.41,42,43,44,45,46.otf | Bin 0 -> 2540 bytes + ...ly_created.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 1984 bytes + ...manually_created.keep-layout-retain-gids.41.otf | Bin 0 -> 1872 bytes + ...manually_created.keep-layout-retain-gids.61.otf | Bin 0 -> 2584 bytes + ...eep-layout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3832 bytes + ...ated.keep-layout.41,42,43,44,45,46,47,48,49.otf | Bin 0 -> 2384 bytes + ...ly_created.keep-layout.41,42,43,44,45,46,47.otf | Bin 0 -> 1996 bytes + ...ly_created.keep-layout.41,42,43,44,45,46,4D.otf | Bin 0 -> 1996 bytes + ...ly_created.keep-layout.41,42,43,44,45,46,51.otf | Bin 0 -> 2044 bytes + ...ually_created.keep-layout.41,42,43,44,45,46.otf | Bin 0 -> 1832 bytes + ...gsub8_manually_created.keep-layout.41,42,43.otf | Bin 0 -> 1284 bytes + .../gsub8_manually_created.keep-layout.41.otf | Bin 0 -> 1172 bytes + .../gsub8_manually_created.keep-layout.61.otf | Bin 0 -> 1540 bytes + ...ly_created.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3832 bytes + test/subset/data/fonts/gsub8_manually_created.otf | Bin 0 -> 4824 bytes + test/subset/data/tests/layout.gsub8.tests | 17 +++++ + test/subset/meson.build | 1 + + 24 files changed, 91 insertions(+), 2 deletions(-) + +commit d18915f920a0d9ab7ce5cfec4654d3d610b1d082 +Author: David Corbett +Date: Sun Mar 28 10:09:13 2021 -0400 + + Reformat gen-tag-table.py + + src/gen-tag-table.py | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +commit 3c8273ab68e37ed5b08b4edacac995fc451d5732 +Author: Garret Rieger +Date: Thu Mar 25 11:39:57 2021 -0700 + + Check for alloc failures on the gsub/gpos_langsys maps in subset plan creation. + + src/hb-subset-plan.cc | 46 ++++++++++++++++++++++++++++------------------ + src/hb-subset.cc | 4 +++- + 2 files changed, 31 insertions(+), 19 deletions(-) + +commit 29708e959a04ee003b9c0738f0c5330584f15b4f +Author: Behdad Esfahbod +Date: Mon Mar 22 15:22:15 2021 -0700 + + [aat] Fix offsetToIndex math for out-of-bounds values + + Previously, some bad font data was accidentally being interpretted as + legit if it happened to not fall out of memory bounds. The intention + of the code was what this commit does. I'm surprised we weren't getting + a "arithmetic between signed and unsigned values" warning / error + before. + + src/hb-aat-layout-common.hh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit c5d6bdb4bf2d8d595f5c762c3e618444621803ae +Merge: a7d120aea 46bf03d69 +Author: Behdad Esfahbod +Date: Thu Mar 18 14:38:55 2021 -0700 + + Merge pull request #2857 from googlefonts/repacker + + [subset] add a GSUB/GPOS table repacker to resolve offset overflows. + +commit 46bf03d6919087e4ce8f0626a3d342380346dc97 +Author: Garret Rieger +Date: Thu Mar 18 14:35:36 2021 -0700 + + [subset] add NODISCARD to error checking methods on serializer. + + src/hb-serialize.hh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 3827a3eb567b424e8144564a42a22df74a20a7c6 +Author: Garret Rieger +Date: Thu Mar 18 11:20:03 2021 -0700 + + [subset] rename serializer::set_error() to err(). + + src/hb-repacker.hh | 4 ++-- + src/hb-serialize.hh | 15 +++++++-------- + 2 files changed, 9 insertions(+), 10 deletions(-) + +commit f561fa6e4c5572c60c8fcf40e617919e531e6ee3 +Author: Garret Rieger +Date: Thu Mar 18 11:13:47 2021 -0700 + + Change priority queue to use (priority, value) instead of (value, priority). + + src/Makefile.sources | 2 +- + src/hb-priority-queue.hh | 24 +++++++++++++----------- + src/hb-repacker.hh | 14 +++++++------- + src/test-priority-queue.cc | 40 ++++++++++++++++++++-------------------- + 4 files changed, 41 insertions(+), 39 deletions(-) + +commit b14475d2ae488acf3c2a169126a4901796401157 +Author: Garret Rieger +Date: Thu Mar 18 10:51:26 2021 -0700 + + [subset] further changes to serializer error handling. + + - Rename enum type and enum members. + - in_errors() now returns true for any error having been set. hb-subset now looks for offset overflow only errors to divert to repacker. + - Added INT_OVERFLOW and ARRAY_OVERFLOW enum values. + + src/hb-cff-interp-common.hh | 2 +- + src/hb-open-type.hh | 8 +++---- + src/hb-ot-cmap-table.hh | 11 +++++----- + src/hb-ot-hmtx-table.hh | 2 +- + src/hb-ot-layout-gpos-table.hh | 8 +++---- + src/hb-ot-layout-gsub-table.hh | 2 +- + src/hb-repacker.hh | 4 ++-- + src/hb-serialize.hh | 50 ++++++++++++++++++++++++------------------ + src/hb-subset.cc | 4 ++-- + 9 files changed, 50 insertions(+), 41 deletions(-) + +commit 73ed59f7a68fc5363ef444b6de131c92cc5ca836 +Author: Garret Rieger +Date: Wed Mar 17 15:53:10 2021 -0700 + + [subset] store errors in the serializer as a flag set. + + Make check_assign/check_equal specify the type of error to set. + + src/hb-cff-interp-common.hh | 2 +- + src/hb-open-type.hh | 10 ++++--- + src/hb-ot-cmap-table.hh | 17 +++++++---- + src/hb-ot-hdmx-table.hh | 2 +- + src/hb-ot-hmtx-table.hh | 2 +- + src/hb-ot-layout-gpos-table.hh | 8 +++--- + src/hb-ot-layout-gsub-table.hh | 4 +-- + src/hb-ot-name-table.hh | 3 +- + src/hb-repacker.hh | 4 +-- + src/hb-serialize.hh | 64 +++++++++++++++++++++++++----------------- + src/hb-subset.cc | 8 +++--- + src/test-repacker.cc | 4 +-- + 12 files changed, 76 insertions(+), 52 deletions(-) + +commit b9ecc7420df811e94413d77e6d70140e18d6ebe6 +Author: Garret Rieger +Date: Tue Feb 16 13:39:10 2021 -0800 + + [subset] init offset_overflow in hb_serialize_context_t. + + src/hb-serialize.hh | 1 + + 1 file changed, 1 insertion(+) + +commit cf79fc342d7e59966fc7ba3e8460d58083b33966 +Author: Garret Rieger +Date: Tue Feb 16 13:24:43 2021 -0800 + + [subset] limit priority bumps to 16. + + src/hb-repacker.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0104409959b15ca8dc344df4a60ce36fc7f40105 +Author: Garret Rieger +Date: Tue Feb 16 11:38:14 2021 -0800 + + Fix repack_tests for distcheck. + + test/subset/data/repack_tests/Makefile.am | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +commit e2f14e81bd20cc944bdecba7fcea20a4b4eddec0 +Author: Garret Rieger +Date: Wed Nov 11 13:55:35 2020 -0800 + + [subset] fix memory leaks in test-repacker. + + src/test-repacker.cc | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +commit d3e2ba7c01b26da9cc5fac49a204fae8a54a3eb1 +Author: Garret Rieger +Date: Wed Nov 11 13:50:18 2020 -0800 + + [subset] comment cleanup in hb-repacker.hh + + src/hb-repacker.hh | 35 ++++++++++++++++++++++++----------- + 1 file changed, 24 insertions(+), 11 deletions(-) + +commit 832f2b599b3d4fad5eea6d0eeef77377d3e0bad0 +Author: Garret Rieger +Date: Tue Nov 10 16:15:37 2020 -0800 + + [subset] Refactor _subset () to reduce nesting and eliminate the use of 'goto'. + + src/hb-serialize.hh | 9 ++++ + src/hb-subset.cc | 134 +++++++++++++++++++++++++++++++--------------------- + src/meson.build | 1 + + 3 files changed, 90 insertions(+), 54 deletions(-) + +commit bb5c80a7c2d2454bba745a155146e7eaad912474 +Author: Garret Rieger +Date: Tue Nov 10 14:11:57 2020 -0800 + + [subset] add error tracking to the repacker. + Also check for allocation failures as needed. + + src/hb-repacker.hh | 93 ++++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 62 insertions(+), 31 deletions(-) + +commit b8b8c58b9ff9b51108caf47f5d98a15801b39058 +Author: Garret Rieger +Date: Tue Nov 10 11:56:09 2020 -0800 + + [subset] add tests that check for successful repacking of a real font file. + + configure.ac | 1 + + test/subset/Makefile.am | 2 + + test/subset/data/Makefile.am | 2 +- + test/subset/data/fonts/NotoNastaliqUrdu-Bold.ttf | Bin 0 -> 459600 bytes + test/subset/data/repack_tests/Makefile.am | 22 +++++ + test/subset/data/repack_tests/Makefile.sources | 12 +++ + .../repack_tests/advanced_prioritization.tests | 72 ++++++++++++++ + test/subset/data/repack_tests/basic.tests | 52 +++++++++++ + test/subset/data/repack_tests/prioritization.tests | 77 +++++++++++++++ + .../data/repack_tests/table_duplication.tests | 97 +++++++++++++++++++ + test/subset/meson.build | 22 +++++ + test/subset/repack_test.py | 36 +++++++ + test/subset/run-repack-tests.py | 104 +++++++++++++++++++++ + 13 files changed, 498 insertions(+), 1 deletion(-) + +commit 6e9468fcfb71c731b0ec5a5e9c434119f16245e9 +Author: Garret Rieger +Date: Mon Nov 9 16:52:36 2020 -0800 + + [subset] cleanup memory leaks in the repacker. + + src/hb-repacker.hh | 7 ++++++- + src/hb-subset.cc | 12 ++++++++---- + 2 files changed, 14 insertions(+), 5 deletions(-) + +commit a7a86a6eb4da25822cf0d42d7dd1668a15325a8f +Author: Garret Rieger +Date: Fri Nov 6 16:22:48 2020 -0800 + + [subset] Add prioritization offset resolution. + Vertices can now be prioritized to force them to sort closer to their parent. The resolver will attempt to use this for overflows on non-shared vertices. + + src/hb-repacker.hh | 107 +++++++++++++++++++++++++++++++++++++++++---------- + src/test-repacker.cc | 1 + + 2 files changed, 88 insertions(+), 20 deletions(-) + +commit b452b2c76c9f76c9ea3501e8eb6534cb172f59ce +Author: Garret Rieger +Date: Fri Nov 6 15:37:05 2020 -0800 + + [subset] refactor repacker graph to cache edge count and distances of vertices. + + src/hb-repacker.hh | 315 ++++++++++++++++++++++++++++++--------------------- + src/test-repacker.cc | 158 +++++++++++++------------- + 2 files changed, 265 insertions(+), 208 deletions(-) + +commit 75414e82b52d5a3adeb1eb48e64f43472913cba2 +Author: Garret Rieger +Date: Thu Nov 5 16:39:23 2020 -0800 + + [subset] Add table duplication overflow resolution. + + src/hb-debug.hh | 4 ++ + src/hb-repacker.hh | 181 ++++++++++++++++++++++++++++++++++++++++------- + src/test-repacker.cc | 196 +++++++++++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 347 insertions(+), 34 deletions(-) + +commit 8286bd80940a7d136ee503dd1b1142190c6695ff +Author: Garret Rieger +Date: Thu Nov 5 14:23:29 2020 -0800 + + [subset] use vectors instead of hashmaps throughout the repacker since all keys will be mapped for these use cases. + + src/hb-repacker.hh | 65 ++++++++++++++++++++++++++---------------------------- + 1 file changed, 31 insertions(+), 34 deletions(-) + +commit 519ae96617e1e2867122c5dbbdc8f1bbce89cb24 +Author: Garret Rieger +Date: Thu Nov 5 11:22:16 2020 -0800 + + [subset] switch sort_shortest_distance() to use priority queue. + + src/hb-repacker.hh | 35 +++++++++++++---------------------- + 1 file changed, 13 insertions(+), 22 deletions(-) + +commit 5d3511e5b13eb825ea9914aa2400cc040edef8a7 +Author: Garret Rieger +Date: Thu Nov 5 10:34:26 2020 -0800 + + [subset] Change compute_distances() to use a priority queue. + + src/hb-repacker.hh | 38 ++++++++++++++++++++++++++++---------- + src/meson.build | 1 + + 2 files changed, 29 insertions(+), 10 deletions(-) + +commit 59ac0a0d0a99e91a75d18a3884ae276309370997 +Author: Garret Rieger +Date: Thu Nov 5 10:29:56 2020 -0800 + + [subset] Use priority for comparison in heap. + + src/hb-priority-queue.hh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 4c8dd41ed90292d4516c539be23c16d625d69a41 +Author: Garret Rieger +Date: Thu Nov 5 09:21:25 2020 -0800 + + [subset] re-write compute distances to use an array lookup for the distance map. + + src/hb-priority-queue.hh | 4 ++-- + src/hb-repacker.hh | 55 ++++++++++++++++++++---------------------------- + src/test-repacker.cc | 2 ++ + 3 files changed, 27 insertions(+), 34 deletions(-) + +commit 5c4e0ffd9768de0c51a42baa35d9c29636fdd99a +Author: Garret Rieger +Date: Wed Nov 4 16:08:01 2020 -0800 + + [subset] Add a basic priority queue datastructure (binary heap). + + src/Makefile.am | 6 +- + src/Makefile.sources | 1 + + src/hb-priority-queue.hh | 149 +++++++++++++++++++++++++++++++++++++++++++++ + src/test-priority-queue.cc | 89 +++++++++++++++++++++++++++ + 4 files changed, 244 insertions(+), 1 deletion(-) + +commit dd8e5d0e1b0c52190bf16ab091ee3756b30d4d97 +Author: Garret Rieger +Date: Tue Nov 3 14:01:42 2020 -0800 + + [subset] Only run the repacker for GSUB/GPOS. + + src/hb-subset.cc | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit aaa7873d425a6267b1df16f5a1f3750578b438f0 +Author: Garret Rieger +Date: Mon Nov 2 16:16:27 2020 -0800 + + [subset] add topological sort by closest distance via Dijkstra's algorithm. + + src/hb-repacker.hh | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++ + src/test-repacker.cc | 37 ++++++++++++++- + 2 files changed, 160 insertions(+), 2 deletions(-) + +commit 8ebe5d734f3543b7a1266f252fe96188efc69531 +Author: Garret Rieger +Date: Mon Nov 2 14:51:39 2020 -0800 + + Implement will_overflow (). + + src/hb-repacker.hh | 73 +++++++++++++++++++++++++++++++++++++++++++++++++--- + src/test-repacker.cc | 45 ++++++++++++++++++++++++++++++++ + 2 files changed, 114 insertions(+), 4 deletions(-) + +commit 6b1ea4cbe724af10309763b708abc36c968f14a7 +Author: Garret Rieger +Date: Fri Oct 30 12:16:26 2020 -0700 + + [subset] hook up the repacker to run if offset overflows are encountered during subsetting. + + src/hb-serialize.hh | 13 +++++++++++-- + src/hb-subset.cc | 30 +++++++++++++++++++++++++++++- + 2 files changed, 40 insertions(+), 3 deletions(-) + +commit f4c78cc7dd11c83aa3f3a3516e75f4fe689aff19 +Author: Garret Rieger +Date: Fri Oct 30 10:29:51 2020 -0700 + + [subset] Implement Kahn's algo for topological sorting instead of BFS. + + src/hb-repacker.hh | 88 +++++++++++++++++++++++++++++++++++----------------- + src/test-repacker.cc | 69 +++++++++++++++++++++++++++++++++++++--- + 2 files changed, 124 insertions(+), 33 deletions(-) + +commit 00f393dc3fdd40a761df4fe988745ecb0e62df4b +Author: Garret Rieger +Date: Thu Oct 29 14:58:34 2020 -0700 + + [subset] finish up BFS sort implementation. + + src/hb-repacker.hh | 93 +++++++++++++++++++++++++++++++++++++++----------- + src/test-repacker.cc | 95 ++++++++++++++++++++++++++++++++++++++++++---------- + 2 files changed, 151 insertions(+), 37 deletions(-) + +commit 1584d3cb8faf244ae439cd59eac5f3d006d7a106 +Author: Garret Rieger +Date: Wed Oct 28 17:49:09 2020 -0700 + + [subset] Start a proof of concept implementation of the GSUB/GPOS offset overflow resolver. + + src/Makefile.am | 6 +- + src/Makefile.sources | 1 + + src/hb-repacker.hh | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++ + src/hb-serialize.hh | 3 + + src/test-repacker.cc | 87 +++++++++++++++++++++++++ + 5 files changed, 276 insertions(+), 1 deletion(-) + +commit a7d120aeabbae6a08f3cdd39a5ef1d435c3a4854 +Merge: 69d772e52 56ca43578 +Author: Behdad Esfahbod +Date: Wed Mar 17 14:33:33 2021 -0700 + + Merge pull request #2835 from googlefonts/remove_redundant_sys + + [subset] Remove redundant LangSys + +commit 56ca435787c1686fcfe01bf4db822bb91d9ba769 +Author: Qunxin Liu +Date: Thu Jan 28 15:21:26 2021 -0800 + + [subset] fix for collect_features and remove_redundant_lamngsys + + previously remove_redundant_sys () is missing in harfbuzz, after + redundant langsys removal, some features are removed as well in + prune_features() in fonttools. This change is trying to get the same + result between harfbuzz and fonttools. + + src/hb-ot-layout-common.hh | 182 +++++++++++++++++++-- + src/hb-ot-layout-gpos-table.hh | 2 +- + src/hb-ot-layout-gsub-table.hh | 2 +- + src/hb-ot-layout-gsubgpos.hh | 75 ++++++++- + src/hb-subset-plan.cc | 43 ++++- + src/hb-subset-plan.hh | 6 +- + ...-retain-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 48640 -> 48596 bytes + ...lar.keep-layout-retain-gids.627,644,62D,628.ttf | Bin 42884 -> 42836 bytes + ...iri-Regular.keep-layout-retain-gids.627,644.ttf | Bin 36940 -> 36892 bytes + ...yout-retain-gids.633,645,627,621,20,644,627.ttf | Bin 46724 -> 46680 bytes + ...Regular.keep-layout-retain-gids.63A,64A,631.ttf | Bin 42896 -> 42896 bytes + ....keep-layout.627,644,623,62D,644,627,645,2E.ttf | Bin 13332 -> 13288 bytes + .../Amiri-Regular.keep-layout.627,644,62D,628.ttf | Bin 10232 -> 10188 bytes + .../Amiri-Regular.keep-layout.627,644.ttf | Bin 4412 -> 4364 bytes + ...ular.keep-layout.633,645,627,621,20,644,627.ttf | Bin 10372 -> 10324 bytes + .../Amiri-Regular.keep-layout.63A,64A,631.ttf | Bin 7824 -> 7824 bytes + test/subset/data/fonts/Amiri-Regular.ttf | Bin 562684 -> 562980 bytes + 17 files changed, 284 insertions(+), 26 deletions(-) + +commit 69d772e522c60aa9d73b6ccd550f4a834e7bd9b8 +Author: Garret Rieger +Date: Wed Mar 17 14:11:16 2021 -0700 + + [subset] Fixed test gsub5 test files. + + ...2.keep-layout-retain-gids.retain-all-codepoint.otf | Bin 3752 -> 3808 bytes + ...e_subrules_f2.keep-layout.retain-all-codepoint.otf | Bin 3752 -> 3808 bytes + ...2.keep-layout-retain-gids.retain-all-codepoint.otf | Bin 3768 -> 3824 bytes + ...e_subrules_f2.keep-layout.retain-all-codepoint.otf | Bin 3768 -> 3824 bytes + ...1.keep-layout-retain-gids.retain-all-codepoint.otf | Bin 3772 -> 3828 bytes + ...successive_f1.keep-layout.retain-all-codepoint.otf | Bin 3772 -> 3828 bytes + 6 files changed, 0 insertions(+), 0 deletions(-) + +commit 0e1c0fa404e2ad087265dc59130dbec1c4682258 +Author: Qunxin Liu +Date: Tue Jan 12 10:17:14 2021 -0800 + + [subset] optimize glyph closure method: step 5 + + add testcase and some fixes + + src/hb-ot-layout-common.hh | 35 ++++---- + src/hb-ot-layout-gsub-table.hh | 10 +-- + src/hb-ot-layout-gsubgpos.hh | 95 +++++++++++++++------ + src/hb-ot-layout.cc | 18 +++- + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + ...ubrules_f2.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2248 bytes + ...e_subrules_f2.keep-layout-retain-gids.41,42.otf | Bin 0 -> 2224 bytes + ...e_subrules_f2.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2060 bytes + ...iple_subrules_f2.keep-layout-retain-gids.41.otf | Bin 0 -> 1928 bytes + ...eep-layout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3752 bytes + ...1_multiple_subrules_f2.keep-layout.41,42,43.otf | Bin 0 -> 1460 bytes + ...ext1_multiple_subrules_f2.keep-layout.41,42.otf | Bin 0 -> 1420 bytes + ...ext1_multiple_subrules_f2.keep-layout.41,43.otf | Bin 0 -> 1344 bytes + ...ontext1_multiple_subrules_f2.keep-layout.41.otf | Bin 0 -> 1228 bytes + ...ubrules_f2.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3752 bytes + ...ubrules_f2.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2264 bytes + ...e_subrules_f2.keep-layout-retain-gids.41,42.otf | Bin 0 -> 2236 bytes + ...e_subrules_f2.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2060 bytes + ...iple_subrules_f2.keep-layout-retain-gids.41.otf | Bin 0 -> 1928 bytes + ...eep-layout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3768 bytes + ...2_multiple_subrules_f2.keep-layout.41,42,43.otf | Bin 0 -> 1476 bytes + ...ext2_multiple_subrules_f2.keep-layout.41,42.otf | Bin 0 -> 1432 bytes + ...ext2_multiple_subrules_f2.keep-layout.41,43.otf | Bin 0 -> 1344 bytes + ...ontext2_multiple_subrules_f2.keep-layout.41.otf | Bin 0 -> 1228 bytes + ...ubrules_f2.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3768 bytes + ...cessive_f1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2028 bytes + ...successive_f1.keep-layout-retain-gids.41,42.otf | Bin 0 -> 1932 bytes + ...successive_f1.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2048 bytes + ...t3_successive_f1.keep-layout-retain-gids.41.otf | Bin 0 -> 1916 bytes + ...eep-layout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3772 bytes + ...context3_successive_f1.keep-layout.41,42,43.otf | Bin 0 -> 1328 bytes + ...ub_context3_successive_f1.keep-layout.41,42.otf | Bin 0 -> 1228 bytes + ...ub_context3_successive_f1.keep-layout.41,43.otf | Bin 0 -> 1332 bytes + .../gsub_context3_successive_f1.keep-layout.41.otf | Bin 0 -> 1216 bytes + ...cessive_f1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3772 bytes + .../fonts/gsub_context1_multiple_subrules_f2.otf | Bin 0 -> 4776 bytes + .../fonts/gsub_context2_multiple_subrules_f2.otf | Bin 0 -> 4796 bytes + .../data/fonts/gsub_context3_successive_f1.otf | Bin 0 -> 4760 bytes + test/subset/data/tests/layout.gsub5.tests | 15 ++++ + test/subset/meson.build | 1 + + 41 files changed, 124 insertions(+), 52 deletions(-) + +commit b8a58a0c0b7d62c33b106ad119a567b6d86d1d36 +Author: Qunxin Liu +Date: Sun Jan 10 15:50:04 2021 -0800 + + [subset] optimize glyph closure method: step 4 + + optimize recurse_lookups in Context/ChainContext + glyph closure, only the glyphs that the parent lookup + can apply the recursion to can participate in recursing + the lookup. + + src/hb-ot-layout-gsub-table.hh | 84 ++++------------ + src/hb-ot-layout-gsubgpos.hh | 219 +++++++++++++++++++++++++++++++---------- + 2 files changed, 186 insertions(+), 117 deletions(-) + +commit 62423504ee6dcf282177ea0b91268df4e7a1e30b +Author: Qunxin Liu +Date: Tue Jan 5 14:54:40 2021 -0800 + + [subset] optimize glyph closure method: step 3 + + Add function intersects_coverage_glyphs that collects + set of matching glyphs in Coverage table + + src/hb-ot-layout-common.hh | 39 ++++++++++++++++++++++++++++++++++----- + 1 file changed, 34 insertions(+), 5 deletions(-) + +commit ef78d0f92345eb452e94c73301bc929822755b27 +Author: Qunxin Liu +Date: Tue Jan 5 10:16:50 2021 -0800 + + [subset] optimize glyph closure method: step 2 + Add function intersects_class_glyphs that collects + set of glyphs matching class in ClassDef table + + src/hb-ot-layout-common.hh | 75 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 75 insertions(+) + +commit b4fc593c3c34c45521c684cb6d0d24079d553e3a +Author: Qunxin Liu +Date: Wed Dec 9 10:44:18 2020 -0800 + + [subset] optimize glyph closure method: step1 + + Previous GSUB glyph closure is done by recursively visiting + all reachable lookup tables that apply to any glyphs in the + current/input glyph set, but actually only the glyphs that + the parent lookup can apply the recursion to can participate + in recursing the lookup. This is step 1 for glyph closure + optimization: + 1. Add stack of currently active glyph set pointers into hb_closure_context_t + 2. Update closure() method in simple GSUB tables to use + this stack in order not to change current glyph set at different stages + of recursion + 3. Add function may_have_non_1to1() to GSUB tables + + src/hb-ot-layout-gsub-table.hh | 100 ++++++++++++++++++++++++++++++++++++++--- + src/hb-ot-layout-gsubgpos.hh | 57 ++++++++++++++++++++++- + 2 files changed, 150 insertions(+), 7 deletions(-) + +commit 5f4c321d4aae659f83178143d5a4df0d2d6b4d02 +Merge: 03538e872 1b79b8cd2 +Author: Behdad Esfahbod +Date: Wed Mar 17 10:20:59 2021 -0700 + + Merge pull request #2894 from googlefonts/gpos_2 + + [subset] Update PairPosFormat2 subsetting to match fontTools + +commit 1b79b8cd2daebc99acd9310742755f02162e5ed0 +Author: Garret Rieger +Date: Tue Mar 16 15:23:11 2021 -0700 + + [subset] update gpos tests to reflect updated behaviour. + + test/api/fonts/AdobeVFPrototype.WA.gpos.otf | Bin 3948 -> 4148 bytes + test/api/fonts/Roboto-Regular-gpos-aw.ttf | Bin 2232 -> 2236 bytes + test/api/test-subset-gpos.c | 5 ----- + 3 files changed, 5 deletions(-) + +commit 2df39bcae7e34630361a49c44e9d295233367ce0 +Author: Garret Rieger +Date: Tue Mar 16 14:20:49 2021 -0700 + + [subset] don't allocate a set to use as a glyph filter for PairPosFormat2. + + src/hb-ot-layout-common.hh | 34 ++++++++++++++++++++++------------ + src/hb-ot-layout-gpos-table.hh | 7 +------ + 2 files changed, 23 insertions(+), 18 deletions(-) + +commit b1b1486d07f8fe3c7a1fb4bc87e6f037ff5b47d3 +Author: Garret Rieger +Date: Tue Mar 16 13:32:23 2021 -0700 + + [subset] update expected files to not include cmap12 pruning. + + .../Roboto-Regular.keep-gdef-gpos.1E00,303.ttf | Bin 2648 -> 2648 bytes + .../Roboto-Regular.keep-gdef-gpos.41,42,43.ttf | Bin 2736 -> 2728 bytes + ...os2_2_font5.keep-layout-retain-gids.21,23,25.otf | Bin 1824 -> 1816 bytes + .../gpos2_2_font5.keep-layout-retain-gids.21,23.otf | Bin 1692 -> 1684 bytes + .../gpos2_2_font5.keep-layout-retain-gids.2E,23.otf | Bin 2024 -> 1944 bytes + ...keep-layout-retain-gids.retain-all-codepoint.otf | Bin 3732 -> 3724 bytes + .../gpos2_2_font5.keep-layout.21,23,25.otf | Bin 1488 -> 1480 bytes + .../gpos2_2_font5.keep-layout.21,23.otf | Bin 1368 -> 1360 bytes + .../gpos2_2_font5.keep-layout.2E,23.otf | Bin 1588 -> 1508 bytes + ...os2_2_font5.keep-layout.retain-all-codepoint.otf | Bin 3732 -> 3724 bytes + ...t-retain-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 48640 -> 48640 bytes + ...r.keep-layout.627,644,623,62D,644,627,645,2E.ttf | Bin 13332 -> 13332 bytes + 12 files changed, 0 insertions(+), 0 deletions(-) + +commit bb54e1047d2d501459bb366e47f24f51824c8db7 +Author: Garret Rieger +Date: Tue Mar 16 13:19:26 2021 -0700 + + [subset] Also filter class1 by coverage when collecting variation indices for PairPosFormat2. + + src/hb-ot-layout-gpos-table.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 190b7a98f8af54cc42d3ccdb6979e432dfd41aa9 +Author: Garret Rieger +Date: Thu Oct 8 14:44:54 2020 -0700 + + [subset] Update PairPosFormat2 subsetting to match fontTools updated subsetting (https://github.com/fonttools/fonttools/pull/2221) + + - subset class def 1 against the coverage table. + - Don't re-use class 0 in class def 2. + - Ignore class 0 glyphs for the purposes of determing format 1 vs format 2 encoding for ClassDef. + + Add an additional test case which demonstrates these issues. + + src/hb-ot-layout-common.hh | 43 +++++++++++++-------- + src/hb-ot-layout-gpos-table.hh | 14 +++++-- + ...AdobeVFPrototype.keep-gdef-gpos.41,42,43,57.otf | Bin 5444 -> 5400 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41,42,43.otf | Bin 4916 -> 4872 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41,42.otf | Bin 4436 -> 4392 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41,56,57.otf | Bin 4556 -> 4540 bytes + .../AdobeVFPrototype.keep-gdef-gpos.41.otf | Bin 3692 -> 3688 bytes + .../AdobeVFPrototype.keep-gdef-gpos.42,57.otf | Bin 4556 -> 4524 bytes + ...gpos2_1_font7.keep-layout-retain-gids.2E,23.otf | Bin 0 -> 1944 bytes + .../gpos2_1_font7.keep-layout.2E,23.otf | Bin 0 -> 1508 bytes + ...s2_2_font5.keep-layout-retain-gids.21,23,25.otf | Bin 1776 -> 1824 bytes + ...gpos2_2_font5.keep-layout-retain-gids.21,23.otf | Bin 1644 -> 1692 bytes + ...gpos2_2_font5.keep-layout-retain-gids.2E,23.otf | Bin 0 -> 2024 bytes + ...s2_2_font5.keep-layout-retain-gids.41,42,43.otf | Bin 1988 -> 1988 bytes + ...eep-layout-retain-gids.retain-all-codepoint.otf | Bin 3684 -> 3732 bytes + .../gpos2_2_font5.keep-layout.21,23,25.otf | Bin 1440 -> 1488 bytes + .../gpos2_2_font5.keep-layout.21,23.otf | Bin 1320 -> 1368 bytes + .../gpos2_2_font5.keep-layout.2E,23.otf | Bin 0 -> 1588 bytes + .../gpos2_2_font5.keep-layout.41,42,43.otf | Bin 1288 -> 1288 bytes + ...s2_2_font5.keep-layout.retain-all-codepoint.otf | Bin 3684 -> 3732 bytes + test/subset/data/fonts/gpos2_2_font5.otf | Bin 4580 -> 4632 bytes + test/subset/data/tests/layout.gpos2.tests | 1 + + 22 files changed, 38 insertions(+), 20 deletions(-) + commit 03538e872a0610a65fad692b33d3646f387cf578 Author: Khaled Hosny Date: Tue Mar 16 19:28:35 2021 +0200 diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am index 9f34c5f1a4c..aee0f530c77 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am +++ b/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am @@ -20,7 +20,6 @@ EXTRA_DIST = \ meson.build \ meson_options.txt \ subprojects/expat.wrap \ - subprojects/fontconfig.wrap \ subprojects/freetype2.wrap \ subprojects/glib.wrap \ subprojects/libffi.wrap \ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS index 321c550188f..a05ff67cfee 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS +++ b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS @@ -1,3 +1,12 @@ +Overview of changes leading to 2.8.1 +Tuesday, May 4, 2021 +==================================== +- Subsetter now fully supports GSUB/GPOS/GDEF tables (including variations); as + such, layout tables are retained by subsetter by default. (Garret Rieger, Qunxin Liu) +- Build scripts no longer check for FontConfig as HarfBuzz does not use it. +- hb-view supports iTerm2 and kitty inline image protocols (Khaled Hosny), + it can also use Chafa for terminal graphics if available (Hans Petter Jansson). + Overview of changes leading to 2.8.0 Tuesday, March 16, 2021 ==================================== diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in index 8d49f028084..c3d447db23d 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in +++ b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in @@ -12,6 +12,9 @@ /* Have cairo-ft support in cairo graphics library */ #undef HAVE_CAIRO_FT +/* Have chafa terminal graphics library */ +#undef HAVE_CHAFA + /* Have Core Text backend */ #undef HAVE_CORETEXT @@ -27,9 +30,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_DWRITE_H -/* Have fontconfig library */ -#undef HAVE_FONTCONFIG - /* Have FreeType 2 library */ #undef HAVE_FREETYPE diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac index d7f1e2673e2..043f6ed61b5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac +++ b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([HarfBuzz], - [2.8.0], + [2.8.1], [https://github.com/harfbuzz/harfbuzz/issues/new], [harfbuzz], [http://harfbuzz.org/]) @@ -214,21 +214,21 @@ AM_CONDITIONAL(HAVE_CAIRO_FT, $have_cairo_ft) dnl ========================================================================== -AC_ARG_WITH(fontconfig, - [AS_HELP_STRING([--with-fontconfig=@<:@yes/no/auto@:>@], - [Use fontconfig @<:@default=auto@:>@])],, - [with_fontconfig=auto]) -have_fontconfig=false -if test "x$with_fontconfig" = "xyes" -o "x$with_fontconfig" = "xauto"; then - PKG_CHECK_MODULES(FONTCONFIG, fontconfig, have_fontconfig=true, :) +AC_ARG_WITH(chafa, + [AS_HELP_STRING([--with-chafa=@<:@yes/no/auto@:>@], + [Use chafa @<:@default=auto@:>@])],, + [with_chafa=auto]) +have_chafa=false +if test "x$with_chafa" = "xyes" -o "x$with_chafa" = "xauto"; then + PKG_CHECK_MODULES(CHAFA, chafa >= 1.6.0, have_chafa=true, :) fi -if test "x$with_fontconfig" = "xyes" -a "x$have_fontconfig" != "xtrue"; then - AC_MSG_ERROR([fontconfig support requested but not found]) +if test "x$with_chafa" = "xyes" -a "x$have_chafa" != "xtrue"; then + AC_MSG_ERROR([chafa support requested but not found]) fi -if $have_fontconfig; then - AC_DEFINE(HAVE_FONTCONFIG, 1, [Have fontconfig library]) +if $have_chafa; then + AC_DEFINE(HAVE_CHAFA, 1, [Have chafa terminal graphics library]) fi -AM_CONDITIONAL(HAVE_FONTCONFIG, $have_fontconfig) +AM_CONDITIONAL(HAVE_CHAFA, $have_chafa) dnl ========================================================================== @@ -432,6 +432,7 @@ test/shaping/data/in-house/Makefile test/shaping/data/text-rendering-tests/Makefile test/subset/Makefile test/subset/data/Makefile +test/subset/data/repack_tests/Makefile docs/Makefile docs/version.xml ]) @@ -465,7 +466,7 @@ Font callbacks (the more the merrier): Tools used for command-line utilities: Cairo: ${have_cairo} - Fontconfig: ${have_fontconfig} + Chafa: ${have_chafa} Additional shapers: Graphite2: ${have_graphite2} diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/meson.build b/Build/source/libs/harfbuzz/harfbuzz-src/meson.build index f08720f19e1..4d5cd0ca51d 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/meson.build +++ b/Build/source/libs/harfbuzz/harfbuzz-src/meson.build @@ -1,6 +1,6 @@ project('harfbuzz', 'c', 'cpp', meson_version: '>= 0.47.0', - version: '2.8.0', + version: '2.8.1', default_options: [ 'cpp_eh=none', # Just to support msvc, we are passing -fno-rtti also anyway 'cpp_rtti=false', # Just to support msvc, we are passing -fno-exceptions also anyway @@ -95,8 +95,6 @@ glib_dep = dependency('glib-2.0', required: get_option('glib'), fallback: ['glib', 'libglib_dep']) gobject_dep = dependency('gobject-2.0', required: get_option('gobject'), fallback: ['glib', 'libgobject_dep']) -fontconfig_dep = dependency('fontconfig', required: get_option('fontconfig'), - fallback: ['fontconfig', 'fontconfig_dep']) graphite2_dep = dependency('graphite2', required: get_option('graphite')) icu_dep = null_dep @@ -156,6 +154,8 @@ if not get_option('cairo').disabled() endif endif +chafa_dep = dependency('chafa', version: '>= 1.6.0', required: get_option('chafa')) + conf = configuration_data() incconfig = include_directories('.') @@ -183,6 +183,10 @@ if cairo_ft_dep.found() conf.set('HAVE_CAIRO_FT', 1) endif +if chafa_dep.found() + conf.set('HAVE_CHAFA', 1) +endif + if graphite2_dep.found() conf.set('HAVE_GRAPHITE2', 1) endif @@ -217,10 +221,6 @@ if freetype_dep.found() endif endif -if fontconfig_dep.found() - conf.set('HAVE_FONTCONFIG', 1) -endif - gdi_uniscribe_deps = [] # GDI (Uniscribe) (Windows) if host_machine.system() == 'windows' and not get_option('gdi').disabled() @@ -369,7 +369,7 @@ build_summary = { }, 'Dependencies used for command-line utilities': {'Cairo': conf.get('HAVE_CAIRO', 0) == 1, - 'Fontconfig': conf.get('HAVE_FONTCONFIG', 0) == 1, + 'Chafa': conf.get('HAVE_CHAFA', 0) == 1, }, 'Additional shapers': {'Graphite2': conf.get('HAVE_GRAPHITE2', 0) == 1, diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt b/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt index 980099f5111..602d053b77b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt +++ b/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt @@ -5,8 +5,8 @@ option('gobject', type: 'feature', value: 'auto', description: 'Enable GObject bindings') option('cairo', type: 'feature', value: 'auto', description: 'Use Cairo graphics library') -option('fontconfig', type: 'feature', value: 'auto', - description: 'Use fontconfig') +option('chafa', type: 'feature', value: 'auto', + description: 'Use Chafa terminal graphics library') option('icu', type: 'feature', value: 'auto', description: 'Enable ICU library unicode functions') option('graphite', type: 'feature', value: 'disabled', diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am index e10068e9487..7a0ca29851a 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am @@ -342,7 +342,7 @@ test_gsub_would_substitute_SOURCES = test-gsub-would-substitute.cc test_gsub_would_substitute_CPPFLAGS = $(HBCFLAGS) $(FREETYPE_CFLAGS) test_gsub_would_substitute_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS) -COMPILED_TESTS = test-algs test-array test-iter test-meta test-number test-ot-tag test-unicode-ranges test-bimap +COMPILED_TESTS = test-algs test-array test-iter test-meta test-number test-ot-tag test-priority-queue test-unicode-ranges test-bimap test-repacker COMPILED_TESTS_CPPFLAGS = $(HBCFLAGS) -DMAIN -UNDEBUG COMPILED_TESTS_LDADD = libharfbuzz.la $(HBLIBS) check_PROGRAMS += $(COMPILED_TESTS) @@ -356,6 +356,14 @@ test_array_SOURCES = test-array.cc test_array_CPPFLAGS = $(HBCFLAGS) test_array_LDADD = libharfbuzz.la $(HBLIBS) +test_priority_queue_SOURCES = test-priority-queue.cc hb-static.cc +test_priority_queue_CPPFLAGS = $(HBCFLAGS) +test_priority_queue_LDADD = libharfbuzz.la $(HBLIBS) + +test_repacker_SOURCES = test-repacker.cc hb-static.cc +test_repacker_CPPFLAGS = $(HBCFLAGS) +test_repacker_LDADD = libharfbuzz.la libharfbuzz-subset.la $(HBLIBS) + test_iter_SOURCES = test-iter.cc hb-static.cc test_iter_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_iter_LDADD = $(COMPILED_TESTS_LDADD) diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources index 6a6d3018bd4..14c97996b00 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources @@ -167,6 +167,7 @@ HB_BASE_sources = \ hb-unicode.hh \ hb-utf.hh \ hb-vector.hh \ + hb-priority-queue.hh \ hb.hh \ $(NULL) @@ -268,6 +269,7 @@ HB_SUBSET_sources = \ hb-subset-plan.hh \ hb-subset.cc \ hb-subset.hh \ + hb-repacker.hh \ $(NULL) HB_SUBSET_headers = \ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-tag-table.py b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-tag-table.py index 62d79c7ffc3..d1b5d4342ec 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-tag-table.py +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-tag-table.py @@ -25,10 +25,8 @@ Input files: """ import collections +import html from html.parser import HTMLParser -def write (s): - sys.stdout.flush () - sys.stdout.buffer.write (s.encode ('utf-8')) import itertools import re import sys @@ -37,16 +35,16 @@ import unicodedata if len (sys.argv) != 3: sys.exit (__doc__) -from html import unescape -def html_unescape (parser, entity): - return unescape (entity) - def expect (condition, message=None): if not condition: if message is None: raise AssertionError raise AssertionError (message) +def write (s): + sys.stdout.flush () + sys.stdout.buffer.write (s.encode ('utf-8')) + DEFAULT_LANGUAGE_SYSTEM = '' # from https://www-01.sil.org/iso639-3/iso-639-3.tab @@ -383,10 +381,10 @@ class OpenTypeRegistryParser (HTMLParser): self._current_tr[-1] += data def handle_charref (self, name): - self.handle_data (html_unescape (self, '&#%s;' % name)) + self.handle_data (html.unescape ('&#%s;' % name)) def handle_entityref (self, name): - self.handle_data (html_unescape (self, '&%s;' % name)) + self.handle_data (html.unescape ('&%s;' % name)) def parse (self, filename): """Parse the OpenType language system tag registry. diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh index f2785a6f588..63fac84524f 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh @@ -54,7 +54,7 @@ struct Anchor DEFINE_SIZE_STATIC (4); }; -typedef LArrayOf GlyphAnchors; +typedef Array32Of GlyphAnchors; struct ankr { @@ -64,7 +64,7 @@ struct ankr unsigned int i, unsigned int num_glyphs) const { - const NNOffsetTo *offset = (this+lookupTable).get_value (glyph_id, num_glyphs); + const NNOffset16To *offset = (this+lookupTable).get_value (glyph_id, num_glyphs); if (!offset) return Null (Anchor); const GlyphAnchors &anchors = &(this+anchorData) + *offset; @@ -83,9 +83,9 @@ struct ankr protected: HBUINT16 version; /* Version number (set to zero) */ HBUINT16 flags; /* Flags (currently unused; set to zero) */ - LOffsetTo>> + Offset32To>> lookupTable; /* Offset to the table's lookup table */ - LNNOffsetTo + NNOffset32To anchorData; /* Offset to the glyph data table */ public: diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh index 98ed20d8ebc..8e7b7b52909 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh @@ -164,7 +164,7 @@ struct LookupSegmentArray HBGlyphID last; /* Last GlyphID in this segment */ HBGlyphID first; /* First GlyphID in this segment */ - NNOffsetTo> + NNOffset16To> valuesZ; /* A 16-bit offset from the start of * the table to the data. */ public: @@ -659,7 +659,7 @@ struct ClassTable } protected: HBGlyphID firstGlyph; /* First glyph index included in the trimmed array. */ - ArrayOf classArray; /* The class codes (indexed by glyph index minus + Array16Of classArray; /* The class codes (indexed by glyph index minus * firstGlyph). */ public: DEFINE_SIZE_ARRAY (4, classArray); @@ -678,7 +678,8 @@ struct ObsoleteTypes const void *base, const T *array) { - return (offset - ((const char *) array - (const char *) base)) / T::static_size; + /* https://github.com/harfbuzz/harfbuzz/issues/2816 */ + return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size; } template static unsigned int byteOffsetToIndex (unsigned int offset, diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh index 359e859cfc6..573f0cf9f6b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh @@ -144,7 +144,7 @@ struct FeatureName protected: HBUINT16 feature; /* Feature type. */ HBUINT16 nSettings; /* The number of records in the setting name array. */ - LNNOffsetTo> + NNOffset32To> settingTableZ; /* Offset in bytes from the beginning of this table to * this feature's setting name array. The actual type of * record this offset refers to will depend on the diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh index 49506e9f5ab..556d4ad75b1 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh @@ -79,7 +79,7 @@ struct DecompositionAction * to decompose before more frequent ones. The ligatures * on the line of text will decompose in increasing * value of this field. */ - ArrayOf + Array16Of decomposedglyphs; /* Number of 16-bit glyph indexes that follow; * the ligature will be decomposed into these glyphs. @@ -310,7 +310,7 @@ struct WidthDeltaPair DEFINE_SIZE_STATIC (24); }; -typedef OT::LArrayOf WidthDeltaCluster; +typedef OT::Array32Of WidthDeltaCluster; struct JustificationCategory { @@ -358,20 +358,20 @@ struct JustificationHeader } protected: - OffsetTo + Offset16To justClassTable; /* Offset to the justification category state table. */ - OffsetTo + Offset16To wdcTable; /* Offset from start of justification table to start * of the subtable containing the width delta factors * for the glyphs in your font. * * The width delta clusters table. */ - OffsetTo + Offset16To pcTable; /* Offset from start of justification table to start * of postcompensation subtable (set to zero if none). * * The postcompensation subtable, if present in the font. */ - Lookup> + Lookup> lookupTable; /* Lookup table associating glyphs with width delta * clusters. See the description of Width Delta Clusters * table for details on how to interpret the lookup values. */ @@ -398,13 +398,13 @@ struct just FixedVersion<>version; /* Version of the justification table * (0x00010000u for version 1.0). */ HBUINT16 format; /* Format of the justification table (set to 0). */ - OffsetTo + Offset16To horizData; /* Byte offset from the start of the justification table * to the header for tables that contain justification * information for horizontal text. * If you are not including this information, * store 0. */ - OffsetTo + Offset16To vertData; /* ditto, vertical */ public: diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh index 1cd412164e7..d0eacf0e61c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh @@ -710,18 +710,18 @@ struct KerxSubTableFormat6 { struct Long { - LNNOffsetTo> rowIndexTable; - LNNOffsetTo> columnIndexTable; - LNNOffsetTo> array; + NNOffset32To> rowIndexTable; + NNOffset32To> columnIndexTable; + NNOffset32To> array; } l; struct Short { - LNNOffsetTo> rowIndexTable; - LNNOffsetTo> columnIndexTable; - LNNOffsetTo> array; + NNOffset32To> rowIndexTable; + NNOffset32To> columnIndexTable; + NNOffset32To> array; } s; } u; - LNNOffsetTo> vector; + NNOffset32To> vector; public: DEFINE_SIZE_STATIC (KernSubTableHeader::static_size + 24); }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh index e3bc268d26a..dea69c9ab87 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh @@ -304,7 +304,7 @@ struct ContextualSubtable bool mark_set; unsigned int mark; const ContextualSubtable *table; - const UnsizedOffsetListOf, HBUINT, false> &subs; + const UnsizedListOfOffset16To, HBUINT, false> &subs; }; bool apply (hb_aat_apply_context_t *c) const @@ -348,7 +348,7 @@ struct ContextualSubtable protected: StateTable machine; - NNOffsetTo, HBUINT, false>, HBUINT> + NNOffsetTo, HBUINT, false>, HBUINT> substitutionTables; public: DEFINE_SIZE_STATIC (20); diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-opbd-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-opbd-table.hh index 8c04a6482ff..b1a1512821d 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-opbd-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-opbd-table.hh @@ -58,7 +58,7 @@ struct opbdFormat0 bool get_bounds (hb_font_t *font, hb_codepoint_t glyph_id, hb_glyph_extents_t *extents, const void *base) const { - const OffsetTo *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); + const Offset16To *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); if (!bounds_offset) return false; const OpticalBounds &bounds = base+*bounds_offset; @@ -79,7 +79,7 @@ struct opbdFormat0 } protected: - Lookup> + Lookup> lookupTable; /* Lookup table associating glyphs with the four * int16 values for the left-side, top-side, * right-side, and bottom-side optical bounds. */ @@ -92,7 +92,7 @@ struct opbdFormat1 bool get_bounds (hb_font_t *font, hb_codepoint_t glyph_id, hb_glyph_extents_t *extents, const void *base) const { - const OffsetTo *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); + const Offset16To *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); if (!bounds_offset) return false; const OpticalBounds &bounds = base+*bounds_offset; @@ -116,7 +116,7 @@ struct opbdFormat1 } protected: - Lookup> + Lookup> lookupTable; /* Lookup table associating glyphs with the four * int16 values for the left-side, top-side, * right-side, and bottom-side optical bounds. */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh index baa1c72020f..68bcb2396f5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh @@ -66,7 +66,7 @@ struct TrackTableEntry NameID trackNameID; /* The 'name' table index for this track. * (a short word or phrase like "loose" * or "very tight") */ - NNOffsetTo> + NNOffset16To> valuesZ; /* Offset from start of tracking table to * per-size tracking values for this track. */ @@ -141,7 +141,7 @@ struct TrackData protected: HBUINT16 nTracks; /* Number of separate tracks included in this table. */ HBUINT16 nSizes; /* Number of point sizes included in this table. */ - LNNOffsetTo> + NNOffset32To> sizeTable; /* Offset from start of the tracking table to * Array[nSizes] of size values.. */ UnsizedArrayOf @@ -212,10 +212,10 @@ struct trak FixedVersion<>version; /* Version of the tracking table * (0x00010000u for version 1.0). */ HBUINT16 format; /* Format of the tracking table (set to 0). */ - OffsetTo + Offset16To horizData; /* Offset from start of tracking table to TrackData * for horizontal text (or 0 if none). */ - OffsetTo + Offset16To vertData; /* Offset from start of tracking table to TrackData * for vertical text (or 0 if none). */ HBUINT16 reserved; /* Reserved. Set to 0. */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh index 711f9aa6c18..6d771e1513e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh @@ -50,7 +50,7 @@ struct FTStringRange } protected: - NNOffsetTo> + NNOffset16To> tag; /* Offset from the start of the table to * the beginning of the string */ HBUINT16 length; /* String length (in bytes) */ @@ -80,7 +80,7 @@ struct ltag protected: HBUINT32 version; /* Table version; currently 1 */ HBUINT32 flags; /* Table flags; currently none defined */ - LArrayOf + Array32Of tagRanges; /* Range for each tag's string */ public: DEFINE_SIZE_ARRAY (12, tagRanges); diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh index 02bd8d81c2f..9af98b103c0 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh @@ -219,7 +219,7 @@ struct hb_array_t : hb_iter_with_fallback_t, Type&> unsigned P = sizeof (Type), hb_enable_if (P == 1)> const T *as () const - { return length < hb_null_size (T) ? &Null (T) : reinterpret_cast (arrayZ); } + { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast (arrayZ); } template T *ip = c->allocate_size (T::static_size); if (unlikely (!ip)) return_trace (false); - return_trace (c->check_assign (*ip, value)); + return_trace (c->check_assign (*ip, value, HB_SERIALIZE_ERROR_INT_OVERFLOW)); } template diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh index fc8d424bfb0..111058c8e6e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh @@ -86,6 +86,9 @@ #define HB_NO_LEGACY #endif +#ifdef HAVE_CONFIG_OVERRIDE_H +#include "config-override.h" +#endif /* Closure of options. */ @@ -155,9 +158,5 @@ #endif #endif -#ifdef HAVE_CONFIG_OVERRIDE_H -#include "config-override.h" -#endif - #endif /* HB_CONFIG_HH */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh index ec3a1ff2111..a92614d01d4 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh @@ -438,6 +438,10 @@ struct hb_no_trace_t { #define TRACE_SUBSET(this) hb_no_trace_t trace #endif +#ifndef HB_DEBUG_SUBSET_REPACK +#define HB_DEBUG_SUBSET_REPACK (HB_DEBUG+0) +#endif + #ifndef HB_DEBUG_DISPATCH #define HB_DEBUG_DISPATCH ( \ HB_DEBUG_APPLY + \ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc index a07302159ce..aebe9e05419 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc @@ -623,7 +623,7 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan, * but we never attempt to shape a word longer than 64K characters * in a single gfxShapedWord, so we cannot exceed that limit. */ - uint32_t textLength = buffer->len; + uint32_t textLength = chars_len; TextAnalysis analysis (textString, textLength, nullptr, readingDirection); TextAnalysis::Run *runHead; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh index 84fe1d549bd..ab9c17eb1c7 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh @@ -140,9 +140,9 @@ struct hb_hashmap_t return true; } - void set (K key, V value) + bool set (K key, V value) { - set_with_hash (key, hb_hash (key), value); + return set_with_hash (key, hb_hash (key), value); } V get (K key) const @@ -211,15 +211,15 @@ struct hb_hashmap_t protected: - void set_with_hash (K key, uint32_t hash, V value) + bool set_with_hash (K key, uint32_t hash, V value) { - if (unlikely (!successful)) return; - if (unlikely (key == kINVALID)) return; - if ((occupancy + occupancy / 2) >= mask && !resize ()) return; + if (unlikely (!successful)) return false; + if (unlikely (key == kINVALID)) return true; + if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false; unsigned int i = bucket_for_hash (key, hash); if (value == vINVALID && items[i].key != key) - return; /* Trying to delete non-existent key. */ + return true; /* Trying to delete non-existent key. */ if (!items[i].is_unused ()) { @@ -235,6 +235,8 @@ struct hb_hashmap_t occupancy++; if (!items[i].is_tombstone ()) population++; + + return true; } unsigned int bucket_for (K key) const diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh index d09f858cde3..db38a4dfd24 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh @@ -39,8 +39,11 @@ #define HB_NULL_POOL_SIZE 384 -/* Use SFINAE to sniff whether T has min_size; in which case return T::null_size, - * otherwise return sizeof(T). */ +/* Use SFINAE to sniff whether T has min_size; in which case return the larger + * of sizeof(T) and T::null_size, otherwise return sizeof(T). + * + * The main purpose of this is to let structs communicate that they are not nullable, + * by defining min_size but *not* null_size. */ /* The hard way... * https://stackoverflow.com/questions/7776448/sfinae-tried-with-bool-gives-compiler-error-template-argument-tvalue-invol @@ -49,8 +52,9 @@ template struct _hb_null_size : hb_integral_constant {}; template -struct _hb_null_size> : hb_integral_constant {}; - +struct _hb_null_size> + : hb_integral_constant T::null_size ? sizeof (T) : T::null_size)> {}; template using hb_null_size = _hb_null_size; #define hb_null_size(T) hb_null_size::value @@ -68,6 +72,14 @@ template using hb_static_size = _hb_static_size; #define hb_static_size(T) hb_static_size::value +template +struct _hb_min_size : hb_integral_constant {}; +template +struct _hb_min_size> : hb_integral_constant {}; +template +using hb_min_size = _hb_min_size; +#define hb_min_size(T) hb_min_size::value + /* * Null() diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh index 54c07ff13cb..66ca03076ba 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh @@ -218,7 +218,7 @@ struct TTCHeaderVersion1 Tag ttcTag; /* TrueType Collection ID string: 'ttcf' */ FixedVersion<>version; /* Version of the TTC Header (1.0), * 0x00010000u */ - LArrayOf> + Array32Of> table; /* Array of offsets to the OffsetTable for each font * from the beginning of the file */ public: @@ -295,7 +295,7 @@ struct ResourceRecord HBINT16 nameOffset; /* Offset from beginning of resource name list * to resource name, -1 means there is none. */ HBUINT8 attrs; /* Resource attributes */ - NNOffsetTo, HBUINT24> + NNOffset24To> offset; /* Offset from beginning of data block to * data for this resource */ HBUINT32 reserved; /* Reserved for handle to resource */ @@ -330,7 +330,7 @@ struct ResourceTypeRecord protected: Tag tag; /* Resource type. */ HBUINT16 resCountM1; /* Number of resources minus 1. */ - NNOffsetTo> + NNOffset16To> resourcesZ; /* Offset from beginning of resource type list * to reference item list for this type. */ public: @@ -386,7 +386,7 @@ struct ResourceMap HBUINT32 reserved1; /* Reserved for handle to next resource map */ HBUINT16 resreved2; /* Reserved for file reference number */ HBUINT16 attrs; /* Resource fork attribute */ - NNOffsetTo> + NNOffset16To> typeList; /* Offset from beginning of map to * resource type list */ Offset16 nameList; /* Offset from beginning of map to @@ -418,10 +418,10 @@ struct ResourceForkHeader } protected: - LNNOffsetTo> + NNOffset32To> data; /* Offset from beginning of resource fork * to resource data */ - LNNOffsetTo + NNOffset32To map; /* Offset from beginning of resource fork * to resource map */ HBUINT32 dataLen; /* Length of resource data */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh index dc0ae1d9899..42eb8af05a9 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh @@ -196,6 +196,12 @@ DECLARE_NULL_NAMESPACE_BYTES (OT, Index); typedef Index NameID; +struct VarIdx : HBUINT32 { + static constexpr unsigned NO_VARIATION = 0xFFFFFFFFu; + VarIdx& operator = (uint32_t i) { HBUINT32::operator= (i); return *this; } +}; +DECLARE_NULL_NAMESPACE_BYTES (OT, VarIdx); + /* Offset, Null offset = 0 */ template struct Offset : Type @@ -209,7 +215,9 @@ struct Offset : Type void *serialize (hb_serialize_context_t *c, const void *base) { void *t = c->start_embed (); - c->check_assign (*this, (unsigned) ((char *) t - (char *) base)); + c->check_assign (*this, + (unsigned) ((char *) t - (char *) base), + HB_SERIALIZE_ERROR_OFFSET_OVERFLOW); return t; } @@ -218,6 +226,7 @@ struct Offset : Type }; typedef Offset Offset16; +typedef Offset Offset24; typedef Offset Offset32; @@ -287,7 +296,7 @@ struct _hb_has_null static Type *get_crap () { return &Crap (Type); } }; -template +template struct OffsetTo : Offset { HB_DELETE_COPY_ASSIGN (OffsetTo); @@ -378,7 +387,7 @@ struct OffsetTo : Offset TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); if (unlikely (this->is_null ())) return_trace (true); - if (unlikely (!c->check_range (base, *this))) return_trace (false); + if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false); return_trace (true); } @@ -401,12 +410,14 @@ struct OffsetTo : Offset DEFINE_SIZE_STATIC (sizeof (OffsetType)); }; /* Partial specializations. */ -template -using LOffsetTo = OffsetTo; -template -using NNOffsetTo = OffsetTo; -template -using LNNOffsetTo = LOffsetTo; +template using Offset16To = OffsetTo; +template using Offset24To = OffsetTo; +template using Offset32To = OffsetTo; + +template using NNOffsetTo = OffsetTo; +template using NNOffset16To = Offset16To; +template using NNOffset24To = Offset24To; +template using NNOffset32To = Offset32To; /* @@ -513,11 +524,11 @@ struct UnsizedArrayOf /* Unsized array of offset's */ template -using UnsizedOffsetArrayOf = UnsizedArrayOf>; +using UnsizedArray16OfOffsetTo = UnsizedArrayOf>; /* Unsized array of offsets relative to the beginning of the array itself. */ template -struct UnsizedOffsetListOf : UnsizedOffsetArrayOf +struct UnsizedListOfOffset16To : UnsizedArray16OfOffsetTo { const Type& operator [] (int i_) const { @@ -538,7 +549,7 @@ struct UnsizedOffsetListOf : UnsizedOffsetArrayOf bool sanitize (hb_sanitize_context_t *c, unsigned int count, Ts&&... ds) const { TRACE_SANITIZE (this); - return_trace ((UnsizedOffsetArrayOf + return_trace ((UnsizedArray16OfOffsetTo ::sanitize (c, count, this, hb_forward (ds)...))); } }; @@ -569,7 +580,7 @@ struct SortedUnsizedArrayOf : UnsizedArrayOf /* An array with a number of elements. */ -template +template struct ArrayOf { typedef Type item_t; @@ -617,17 +628,30 @@ struct ArrayOf hb_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) { return as_array ().sub_array (start_offset, count); } - hb_success_t serialize (hb_serialize_context_t *c, unsigned items_len) + template + Type &lsearch (const T &x, Type ¬_found = Crap (Type)) + { return *as_array ().lsearch (x, ¬_found); } + template + const Type &lsearch (const T &x, const Type ¬_found = Null (Type)) const + { return *as_array ().lsearch (x, ¬_found); } + template + bool lfind (const T &x, unsigned *pos = nullptr) const + { return as_array ().lfind (x, pos); } + + void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1) + { as_array ().qsort (start, end); } + + HB_NODISCARD bool serialize (hb_serialize_context_t *c, unsigned items_len) { TRACE_SERIALIZE (this); if (unlikely (!c->extend_min (*this))) return_trace (false); - c->check_assign (len, items_len); + c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW); if (unlikely (!c->extend (*this))) return_trace (false); return_trace (true); } template - hb_success_t serialize (hb_serialize_context_t *c, Iterator items) + HB_NODISCARD bool serialize (hb_serialize_context_t *c, Iterator items) { TRACE_SERIALIZE (this); unsigned count = items.len (); @@ -656,7 +680,7 @@ struct ArrayOf TRACE_SERIALIZE (this); auto *out = c->start_embed (this); if (unlikely (!c->extend_min (out))) return_trace (nullptr); - c->check_assign (out->len, len); + c->check_assign (out->len, len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW); if (unlikely (!as_array ().copy (c))) return_trace (nullptr); return_trace (out); } @@ -674,19 +698,6 @@ struct ArrayOf return_trace (true); } - template - Type &lsearch (const T &x, Type ¬_found = Crap (Type)) - { return *as_array ().lsearch (x, ¬_found); } - template - const Type &lsearch (const T &x, const Type ¬_found = Null (Type)) const - { return *as_array ().lsearch (x, ¬_found); } - template - bool lfind (const T &x, unsigned *pos = nullptr) const - { return as_array ().lfind (x, pos); } - - void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1) - { as_array ().qsort (start, end); } - bool sanitize_shallow (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); @@ -699,21 +710,18 @@ struct ArrayOf public: DEFINE_SIZE_ARRAY (sizeof (LenType), arrayZ); }; -template -using LArrayOf = ArrayOf; +template using Array16Of = ArrayOf; +template using Array32Of = ArrayOf; using PString = ArrayOf; /* Array of Offset's */ -template -using OffsetArrayOf = ArrayOf>; -template -using LOffsetArrayOf = ArrayOf>; -template -using LOffsetLArrayOf = ArrayOf, HBUINT32>; +template using Array16OfOffset16To = ArrayOf, HBUINT16>; +template using Array16OfOffset32To = ArrayOf, HBUINT16>; +template using Array32OfOffset32To = ArrayOf, HBUINT32>; /* Array of offsets relative to the beginning of the array itself. */ template -struct OffsetListOf : OffsetArrayOf +struct List16OfOffset16To : Array16OfOffset16To { const Type& operator [] (int i_) const { @@ -731,7 +739,7 @@ struct OffsetListOf : OffsetArrayOf bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); - struct OffsetListOf *out = c->serializer->embed (*this); + struct List16OfOffset16To *out = c->serializer->embed (*this); if (unlikely (!out)) return_trace (false); unsigned int count = this->len; for (unsigned int i = 0; i < count; i++) @@ -743,7 +751,7 @@ struct OffsetListOf : OffsetArrayOf bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const { TRACE_SANITIZE (this); - return_trace (OffsetArrayOf::sanitize (c, this, hb_forward (ds)...)); + return_trace (Array16OfOffset16To::sanitize (c, this, hb_forward (ds)...)); } }; @@ -787,7 +795,7 @@ struct HeadlessArrayOf { TRACE_SERIALIZE (this); if (unlikely (!c->extend_min (*this))) return_trace (false); - c->check_assign (lenP1, items_len + 1); + c->check_assign (lenP1, items_len + 1, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW); if (unlikely (!c->extend (*this))) return_trace (false); return_trace (true); } @@ -859,6 +867,7 @@ struct ArrayOfM1 { TRACE_SANITIZE (this); if (unlikely (!sanitize_shallow (c))) return_trace (false); + if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true); unsigned int count = lenM1 + 1; for (unsigned int i = 0; i < count; i++) if (unlikely (!c->dispatch (arrayZ[i], hb_forward (ds)...))) @@ -882,7 +891,7 @@ struct ArrayOfM1 }; /* An array with sorted elements. Supports binary searching. */ -template +template struct SortedArrayOf : ArrayOf { hb_sorted_array_t< Type> as_array () { return hb_sorted_array (this->arrayZ, this->len); } @@ -933,6 +942,9 @@ struct SortedArrayOf : ArrayOf { return as_array ().bfind (x, i, not_found, to_store); } }; +template using SortedArray16Of = SortedArrayOf; +template using SortedArray32Of = SortedArrayOf; + /* * Binary-search arrays */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh index 7228f777272..157483b7f65 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh @@ -1390,7 +1390,7 @@ struct cff1 public: FixedVersion version; /* Version of CFF table. set to 0x0100u */ - OffsetTo nameIndex; /* headerSize = Offset to Name INDEX. */ + NNOffsetTo nameIndex; /* headerSize = Offset to Name INDEX. */ HBUINT8 offSize; /* offset size (unused?) */ public: diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh index 878e02ff177..add21f11550 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh @@ -276,7 +276,9 @@ struct CmapSubtableFormat4 HBUINT16 *idRangeOffset = serialize_rangeoffset_glyid (c, format4_iter, endCode, startCode, idDelta, segcount); if (unlikely (!c->check_success (idRangeOffset))) return; - if (unlikely (!c->check_assign(this->length, c->length () - table_initpos))) return; + if (unlikely (!c->check_assign(this->length, + c->length () - table_initpos, + HB_SERIALIZE_ERROR_INT_OVERFLOW))) return; this->segCountX2 = segcount * 2; this->entrySelector = hb_max (1u, hb_bit_storage (segcount)) - 1; this->searchRange = 2 * (1u << this->entrySelector); @@ -670,7 +672,7 @@ struct CmapSubtableLongSegmented HBUINT16 reserved; /* Reserved; set to 0. */ HBUINT32 length; /* Byte length of this subtable. */ HBUINT32 language; /* Ignore. */ - SortedArrayOf + SortedArray32Of groups; /* Groupings. */ public: DEFINE_SIZE_ARRAY (16, groups); @@ -784,7 +786,7 @@ struct UnicodeValueRange DEFINE_SIZE_STATIC (4); }; -struct DefaultUVS : SortedArrayOf +struct DefaultUVS : SortedArray32Of { void collect_unicodes (hb_set_t *out) const { @@ -850,7 +852,9 @@ struct DefaultUVS : SortedArrayOf } else { - if (unlikely (!c->check_assign (out->len, (c->length () - init_len) / UnicodeValueRange::static_size))) return nullptr; + if (unlikely (!c->check_assign (out->len, + (c->length () - init_len) / UnicodeValueRange::static_size, + HB_SERIALIZE_ERROR_INT_OVERFLOW))) return nullptr; return out; } } @@ -876,23 +880,21 @@ struct UVSMapping DEFINE_SIZE_STATIC (5); }; -struct NonDefaultUVS : SortedArrayOf +struct NonDefaultUVS : SortedArray32Of { void collect_unicodes (hb_set_t *out) const { - unsigned int count = len; - for (unsigned int i = 0; i < count; i++) - out->add (arrayZ[i].unicodeValue); + for (const auto& a : as_array ()) + out->add (a.unicodeValue); } void collect_mapping (hb_set_t *unicodes, /* OUT */ hb_map_t *mapping /* OUT */) const { - unsigned count = len; - for (unsigned i = 0; i < count; i++) + for (const auto& a : as_array ()) { - hb_codepoint_t unicode = arrayZ[i].unicodeValue; - hb_codepoint_t glyphid = arrayZ[i].glyphID; + hb_codepoint_t unicode = a.unicodeValue; + hb_codepoint_t glyphid = a.glyphID; unicodes->add (unicode); mapping->set (unicode, glyphid); } @@ -1041,9 +1043,9 @@ struct VariationSelectorRecord } HBUINT24 varSelector; /* Variation selector. */ - LOffsetTo + Offset32To defaultUVS; /* Offset to Default UVS Table. May be 0. */ - LOffsetTo + Offset32To nonDefaultUVS; /* Offset to Non-Default UVS Table. May be 0. */ public: DEFINE_SIZE_STATIC (11); @@ -1058,9 +1060,8 @@ struct CmapSubtableFormat14 void collect_variation_selectors (hb_set_t *out) const { - unsigned int count = record.len; - for (unsigned int i = 0; i < count; i++) - out->add (record.arrayZ[i].varSelector); + for (const auto& a : record.as_array ()) + out->add (a.varSelector); } void collect_variation_unicodes (hb_codepoint_t variation_selector, hb_set_t *out) const @@ -1112,10 +1113,12 @@ struct CmapSubtableFormat14 return; int tail_len = init_tail - c->tail; - c->check_assign (this->length, c->length () - table_initpos + tail_len); + c->check_assign (this->length, c->length () - table_initpos + tail_len, + HB_SERIALIZE_ERROR_INT_OVERFLOW); c->check_assign (this->record.len, (c->length () - table_initpos - CmapSubtableFormat14::min_size) / - VariationSelectorRecord::static_size); + VariationSelectorRecord::static_size, + HB_SERIALIZE_ERROR_INT_OVERFLOW); /* Correct the incorrect write order by reversing the order of the variation records array. */ @@ -1180,7 +1183,7 @@ struct CmapSubtableFormat14 protected: HBUINT16 format; /* Format number is set to 14. */ HBUINT32 length; /* Byte length of this subtable. */ - SortedArrayOf + SortedArray32Of record; /* Variation selector records; sorted * in increasing order of `varSelector'. */ public: @@ -1338,7 +1341,7 @@ struct EncodingRecord HBUINT16 platformID; /* Platform ID. */ HBUINT16 encodingID; /* Platform-specific encoding ID. */ - LOffsetTo + Offset32To subtable; /* Byte offset from beginning of table to the subtable for this encoding. */ public: DEFINE_SIZE_STATIC (8); @@ -1401,7 +1404,9 @@ struct cmap } } - c->check_assign(this->encodingRecord.len, (c->length () - cmap::min_size)/EncodingRecord::static_size); + c->check_assign(this->encodingRecord.len, + (c->length () - cmap::min_size)/EncodingRecord::static_size, + HB_SERIALIZE_ERROR_INT_OVERFLOW); } void closure_glyphs (const hb_set_t *unicodes, @@ -1697,7 +1702,7 @@ struct cmap protected: HBUINT16 version; /* Table version number (0). */ - SortedArrayOf + SortedArray16Of encodingRecord; /* Encoding tables. */ public: DEFINE_SIZE_ARRAY (4, encodingRecord); diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh index e285acec3d5..265d8309daa 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh @@ -510,7 +510,7 @@ struct IndexSubtableRecord HBGlyphID firstGlyphIndex; HBGlyphID lastGlyphIndex; - LOffsetTo offsetToSubtable; + Offset32To offsetToSubtable; public: DEFINE_SIZE_STATIC (8); }; @@ -672,7 +672,7 @@ struct BitmapSizeTable } protected: - LNNOffsetTo + NNOffset32To indexSubtableArrayOffset; HBUINT32 indexTablesSize; HBUINT32 numberOfIndexSubtables; @@ -697,7 +697,7 @@ struct BitmapSizeTable struct GlyphBitmapDataFormat17 { SmallGlyphMetrics glyphMetrics; - LArrayOf data; + Array32Of data; public: DEFINE_SIZE_ARRAY (9, data); }; @@ -705,14 +705,14 @@ struct GlyphBitmapDataFormat17 struct GlyphBitmapDataFormat18 { BigGlyphMetrics glyphMetrics; - LArrayOf data; + Array32Of data; public: DEFINE_SIZE_ARRAY (12, data); }; struct GlyphBitmapDataFormat19 { - LArrayOf data; + Array32Of data; public: DEFINE_SIZE_ARRAY (4, data); }; @@ -798,7 +798,7 @@ struct CBLC protected: FixedVersion<> version; - LArrayOf sizeTables; + Array32Of sizeTables; public: DEFINE_SIZE_ARRAY (8, sizeTables); }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh index e2a1ff46624..c792147095a 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh @@ -29,6 +29,7 @@ #define HB_OT_COLOR_COLR_TABLE_HH #include "hb-open-type.hh" +#include "hb-ot-layout-common.hh" /* * COLR -- Color @@ -39,7 +40,6 @@ namespace OT { - struct LayerRecord { operator hb_ot_color_layer_t () const { return {glyphId, colorIdx}; } @@ -90,6 +90,467 @@ struct BaseGlyphRecord DEFINE_SIZE_STATIC (6); }; +template +struct Variable +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + protected: + T value; + VarIdx varIdx; + public: + DEFINE_SIZE_STATIC (4 + T::static_size); +}; + +template +struct NoVariable +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + T value; + public: + DEFINE_SIZE_STATIC (T::static_size); +}; + +// Color structures + +template class Var> +struct ColorIndex +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT16 paletteIndex; + Var alpha; + public: + DEFINE_SIZE_STATIC (2 + Var::static_size); +}; + +template class Var> +struct ColorStop +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + Var stopOffset; + ColorIndex color; + public: + DEFINE_SIZE_STATIC (Var::static_size + ColorIndex::static_size); +}; + +struct Extend : HBUINT8 +{ + enum { + EXTEND_PAD = 0, + EXTEND_REPEAT = 1, + EXTEND_REFLECT = 2, + }; + public: + DEFINE_SIZE_STATIC (1); +}; + +template class Var> +struct ColorLine +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && + stops.sanitize (c)); + } + + Extend extend; + Array16Of> stops; + public: + DEFINE_SIZE_ARRAY_SIZED (3, stops); +}; + +// Composition modes + +// Compositing modes are taken from https://www.w3.org/TR/compositing-1/ +// NOTE: a brief audit of major implementations suggests most support most +// or all of the specified modes. +struct CompositeMode : HBUINT8 +{ + enum { + // Porter-Duff modes + // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators + COMPOSITE_CLEAR = 0, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_clear + COMPOSITE_SRC = 1, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_src + COMPOSITE_DEST = 2, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dst + COMPOSITE_SRC_OVER = 3, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcover + COMPOSITE_DEST_OVER = 4, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstover + COMPOSITE_SRC_IN = 5, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcin + COMPOSITE_DEST_IN = 6, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstin + COMPOSITE_SRC_OUT = 7, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcout + COMPOSITE_DEST_OUT = 8, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstout + COMPOSITE_SRC_ATOP = 9, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcatop + COMPOSITE_DEST_ATOP = 10, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstatop + COMPOSITE_XOR = 11, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_xor + COMPOSITE_PLUS = 12, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_plus + + // Blend modes + // https://www.w3.org/TR/compositing-1/#blending + COMPOSITE_SCREEN = 13, // https://www.w3.org/TR/compositing-1/#blendingscreen + COMPOSITE_OVERLAY = 14, // https://www.w3.org/TR/compositing-1/#blendingoverlay + COMPOSITE_DARKEN = 15, // https://www.w3.org/TR/compositing-1/#blendingdarken + COMPOSITE_LIGHTEN = 16, // https://www.w3.org/TR/compositing-1/#blendinglighten + COMPOSITE_COLOR_DODGE = 17, // https://www.w3.org/TR/compositing-1/#blendingcolordodge + COMPOSITE_COLOR_BURN = 18, // https://www.w3.org/TR/compositing-1/#blendingcolorburn + COMPOSITE_HARD_LIGHT = 19, // https://www.w3.org/TR/compositing-1/#blendinghardlight + COMPOSITE_SOFT_LIGHT = 20, // https://www.w3.org/TR/compositing-1/#blendingsoftlight + COMPOSITE_DIFFERENCE = 21, // https://www.w3.org/TR/compositing-1/#blendingdifference + COMPOSITE_EXCLUSION = 22, // https://www.w3.org/TR/compositing-1/#blendingexclusion + COMPOSITE_MULTIPLY = 23, // https://www.w3.org/TR/compositing-1/#blendingmultiply + + // Modes that, uniquely, do not operate on components + // https://www.w3.org/TR/compositing-1/#blendingnonseparable + COMPOSITE_HSL_HUE = 24, // https://www.w3.org/TR/compositing-1/#blendinghue + COMPOSITE_HSL_SATURATION = 25, // https://www.w3.org/TR/compositing-1/#blendingsaturation + COMPOSITE_HSL_COLOR = 26, // https://www.w3.org/TR/compositing-1/#blendingcolor + COMPOSITE_HSL_LUMINOSITY = 27, // https://www.w3.org/TR/compositing-1/#blendingluminosity + }; + public: + DEFINE_SIZE_STATIC (1); +}; + +template class Var> +struct Affine2x3 +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + Var xx; + Var yx; + Var xy; + Var yy; + Var dx; + Var dy; + public: + DEFINE_SIZE_STATIC (6 * Var::static_size); +}; + +struct PaintColrLayers +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT8 format; /* format = 1 */ + HBUINT8 numLayers; + HBUINT32 firstLayerIndex; /* index into COLRv1::layersV1 */ + public: + DEFINE_SIZE_STATIC (6); +}; + +template class Var> +struct PaintSolid +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT8 format; /* format = 2(noVar) or 3(Var)*/ + ColorIndex color; + public: + DEFINE_SIZE_STATIC (1 + ColorIndex::static_size); +}; + +template class Var> +struct PaintLinearGradient +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && colorLine.sanitize (c, this)); + } + + HBUINT8 format; /* format = 4(noVar) or 5 (Var) */ + Offset24To> colorLine; /* Offset (from beginning of PaintLinearGradient + * table) to ColorLine subtable. */ + Var x0; + Var y0; + Var x1; + Var y1; + Var x2; + Var y2; + public: + DEFINE_SIZE_STATIC (4 + 6 * Var::static_size); +}; + +template class Var> +struct PaintRadialGradient +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && colorLine.sanitize (c, this)); + } + + HBUINT8 format; /* format = 6(noVar) or 7 (Var) */ + Offset24To> colorLine; /* Offset (from beginning of PaintRadialGradient + * table) to ColorLine subtable. */ + Var x0; + Var y0; + Var radius0; + Var x1; + Var y1; + Var radius1; + public: + DEFINE_SIZE_STATIC (4 + 6 * Var::static_size); +}; + +template class Var> +struct PaintSweepGradient +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && colorLine.sanitize (c, this)); + } + + HBUINT8 format; /* format = 8(noVar) or 9 (Var) */ + Offset24To> colorLine; /* Offset (from beginning of PaintSweepGradient + * table) to ColorLine subtable. */ + Var centerX; + Var centerY; + Var startAngle; + Var endAngle; + public: + DEFINE_SIZE_STATIC (2 * Var::static_size + 2 * Var::static_size); +}; + +struct Paint; +// Paint a non-COLR glyph, filled as indicated by paint. +struct PaintGlyph +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && paint.sanitize (c, this)); + } + + HBUINT8 format; /* format = 10 */ + Offset24To paint; /* Offset (from beginning of PaintGlyph table) to Paint subtable. */ + HBUINT16 gid; + public: + DEFINE_SIZE_STATIC (6); +}; + +struct PaintColrGlyph +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT8 format; /* format = 11 */ + HBUINT16 gid; + public: + DEFINE_SIZE_STATIC (3); +}; + +template class Var> +struct PaintTransform +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 12(noVar) or 13 (Var) */ + Offset24To src; /* Offset (from beginning of PaintTransform table) to Paint subtable. */ + Affine2x3 transform; + public: + DEFINE_SIZE_STATIC (4 + Affine2x3::static_size); +}; + +template class Var> +struct PaintTranslate +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 14(noVar) or 15 (Var) */ + Offset24To src; /* Offset (from beginning of PaintTranslate table) to Paint subtable. */ + Var dx; + Var dy; + public: + DEFINE_SIZE_STATIC (4 + Var::static_size); +}; + +template class Var> +struct PaintRotate +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 16 (noVar) or 17(Var) */ + Offset24To src; /* Offset (from beginning of PaintRotate table) to Paint subtable. */ + Var angle; + Var centerX; + Var centerY; + public: + DEFINE_SIZE_STATIC (4 + 3 * Var::static_size); +}; + +template class Var> +struct PaintSkew +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 18(noVar) or 19 (Var) */ + Offset24To src; /* Offset (from beginning of PaintSkew table) to Paint subtable. */ + Var xSkewAngle; + Var ySkewAngle; + Var centerX; + Var centerY; + public: + DEFINE_SIZE_STATIC (4 + 4 * Var::static_size); +}; + +struct PaintComposite +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && + src.sanitize (c, this) && + backdrop.sanitize (c, this)); + } + + HBUINT8 format; /* format = 20 */ + Offset24To src; /* Offset (from beginning of PaintComposite table) to source Paint subtable. */ + CompositeMode mode; /* If mode is unrecognized use COMPOSITE_CLEAR */ + Offset24To backdrop; /* Offset (from beginning of PaintComposite table) to backdrop Paint subtable. */ + public: + DEFINE_SIZE_STATIC (8); +}; + +struct Paint +{ + template + typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const + { + TRACE_DISPATCH (this, u.format); + if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ()); + switch (u.format) { + case 1: return_trace (c->dispatch (u.paintformat1, hb_forward (ds)...)); + case 2: return_trace (c->dispatch (u.paintformat2, hb_forward (ds)...)); + case 3: return_trace (c->dispatch (u.paintformat3, hb_forward (ds)...)); + case 4: return_trace (c->dispatch (u.paintformat4, hb_forward (ds)...)); + case 5: return_trace (c->dispatch (u.paintformat5, hb_forward (ds)...)); + case 6: return_trace (c->dispatch (u.paintformat6, hb_forward (ds)...)); + case 7: return_trace (c->dispatch (u.paintformat7, hb_forward (ds)...)); + case 8: return_trace (c->dispatch (u.paintformat8, hb_forward (ds)...)); + case 9: return_trace (c->dispatch (u.paintformat9, hb_forward (ds)...)); + case 10: return_trace (c->dispatch (u.paintformat10, hb_forward (ds)...)); + case 11: return_trace (c->dispatch (u.paintformat11, hb_forward (ds)...)); + case 12: return_trace (c->dispatch (u.paintformat12, hb_forward (ds)...)); + case 13: return_trace (c->dispatch (u.paintformat13, hb_forward (ds)...)); + case 14: return_trace (c->dispatch (u.paintformat14, hb_forward (ds)...)); + case 15: return_trace (c->dispatch (u.paintformat15, hb_forward (ds)...)); + case 16: return_trace (c->dispatch (u.paintformat16, hb_forward (ds)...)); + case 17: return_trace (c->dispatch (u.paintformat17, hb_forward (ds)...)); + case 18: return_trace (c->dispatch (u.paintformat18, hb_forward (ds)...)); + case 19: return_trace (c->dispatch (u.paintformat19, hb_forward (ds)...)); + case 20: return_trace (c->dispatch (u.paintformat20, hb_forward (ds)...)); + default:return_trace (c->default_return_value ()); + } + } + + protected: + union { + HBUINT8 format; + PaintColrLayers paintformat1; + PaintSolid paintformat2; + PaintSolid paintformat3; + PaintLinearGradient paintformat4; + PaintLinearGradient paintformat5; + PaintRadialGradient paintformat6; + PaintRadialGradient paintformat7; + PaintSweepGradient paintformat8; + PaintSweepGradient paintformat9; + PaintGlyph paintformat10; + PaintColrGlyph paintformat11; + PaintTransform paintformat12; + PaintTransform paintformat13; + PaintTranslate paintformat14; + PaintTranslate paintformat15; + PaintRotate paintformat16; + PaintRotate paintformat17; + PaintSkew paintformat18; + PaintSkew paintformat19; + PaintComposite paintformat20; + } u; +}; + +struct BaseGlyphV1Record +{ + int cmp (hb_codepoint_t g) const + { return g < glyphId ? -1 : g > glyphId ? 1 : 0; } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (likely (c->check_struct (this) && paint.sanitize (c, this))); + } + + public: + HBGlyphID glyphId; /* Glyph ID of reference glyph */ + Offset32To paint; /* Offset (from beginning of BaseGlyphV1Record) to Paint, + * Typically PaintColrLayers */ + public: + DEFINE_SIZE_STATIC (6); +}; + +typedef SortedArray32Of BaseGlyphV1List; + +struct LayerV1List : Array32OfOffset32To +{ + const Paint& get_paint (unsigned i) const + { return this+(*this)[i]; } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (Array32OfOffset32To::sanitize (c, this)); + } +}; + struct COLR { static constexpr hb_tag_t tableTag = HB_OT_TAG_COLR; @@ -150,9 +611,13 @@ struct COLR bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (likely (c->check_struct (this) && - (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) && - (this+layersZ).sanitize (c, numLayers))); + return_trace (c->check_struct (this) && + (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) && + (this+layersZ).sanitize (c, numLayers) && + (version == 0 || (version == 1 && + baseGlyphsV1List.sanitize (c, this) && + layersV1.sanitize (c, this) && + varStore.sanitize (c, this)))); } template> + NNOffset32To> baseGlyphsZ; /* Offset to Base Glyph records. */ - LNNOffsetTo> + NNOffset32To> layersZ; /* Offset to Layer Records. */ HBUINT16 numLayers; /* Number of Layer Records. */ + // Version-1 additions + Offset32To baseGlyphsV1List; + Offset32To layersV1; + Offset32To varStore; public: - DEFINE_SIZE_STATIC (14); + DEFINE_SIZE_MIN (14); }; } /* namespace OT */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh index fa7d3207be6..2fa99dead74 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh @@ -87,15 +87,15 @@ struct CPALV1Tail } protected: - LNNOffsetTo> + NNOffset32To> paletteFlagsZ; /* Offset from the beginning of CPAL table to * the Palette Type Array. Set to 0 if no array * is provided. */ - LNNOffsetTo> + NNOffset32To> paletteLabelsZ; /* Offset from the beginning of CPAL table to * the palette labels array. Set to 0 if no * array is provided. */ - LNNOffsetTo> + NNOffset32To> colorLabelsZ; /* Offset from the beginning of CPAL table to * the color labels array. Set to 0 * if no array is provided. */ @@ -173,7 +173,7 @@ struct CPAL HBUINT16 numPalettes; /* Number of palettes in the table. */ HBUINT16 numColorRecords; /* Total number of color records, combined for * all palettes. */ - LNNOffsetTo> + NNOffset32To> colorRecordsZ; /* Offset from the beginning of CPAL table to * the first ColorRecord. */ UnsizedArrayOf diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh index 09da11597da..af1e4a5dbeb 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh @@ -185,7 +185,7 @@ struct SBIXStrike HBUINT16 resolution; /* The device pixel density (in PPI) for which this * strike was designed. (E.g., 96 PPI, 192 PPI.) */ protected: - UnsizedArrayOf> + UnsizedArrayOf> imageOffsetsZ; /* Offset from the beginning of the strike data header * to bitmap data for an individual glyph ID. */ public: @@ -352,11 +352,11 @@ struct sbix { TRACE_SERIALIZE (this); - auto *out = c->serializer->start_embed> (); + auto *out = c->serializer->start_embed> (); if (unlikely (!out)) return_trace (false); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); - hb_vector_t*> new_strikes; + hb_vector_t*> new_strikes; hb_vector_t objidxs; for (int i = strikes.len - 1; i >= 0; --i) { @@ -400,7 +400,7 @@ struct sbix HBUINT16 version; /* Table version number — set to 1 */ HBUINT16 flags; /* Bit 0: Set to 1. Bit 1: Draw outlines. * Bits 2 to 15: reserved (set to 0). */ - LOffsetLArrayOf + Array32OfOffset32To strikes; /* Offsets from the beginning of the 'sbix' * table to data for each individual bitmap strike. */ public: diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh index 1cc40ae53fa..e022ef43b79 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh @@ -62,7 +62,7 @@ struct SVGDocumentIndexEntry * this index entry. */ HBUINT16 endGlyphID; /* The last glyph ID in the range described by * this index entry. Must be >= startGlyphID. */ - LNNOffsetTo> + NNOffset32To> svgDoc; /* Offset from the beginning of the SVG Document Index * to an SVG document. Must be non-zero. */ HBUINT32 svgDocLength; /* Length of the SVG document. @@ -107,7 +107,7 @@ struct SVG protected: HBUINT16 version; /* Table version (starting at 0). */ - LOffsetTo> + Offset32To> svgDocEntries; /* Offset (relative to the start of the SVG table) to the * SVG Documents Index. Must be non-zero. */ /* Array of SVG Document Index Entries. */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh index 4f291924afd..f2a9cad464b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh @@ -71,7 +71,7 @@ struct gasp protected: HBUINT16 version; /* Version number (set to 1) */ - ArrayOf + Array16Of gaspRanges; /* Number of records to follow * Sorted by ppem */ public: diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh index c9c391bad5f..590fa154ba1 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh @@ -110,7 +110,7 @@ struct hdmx for (const hb_item_type& _ : +it) c->start_embed ()->serialize (c, _.first, _.second); - return_trace (c->successful); + return_trace (c->successful ()); } diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh index d06c0fa4a46..40383299382 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh @@ -146,7 +146,7 @@ struct hmtxvmtx _mtx.fini (); - if (unlikely (c->serializer->ran_out_of_room || c->serializer->in_error ())) + if (unlikely (c->serializer->in_error ())) return_trace (false); // Amend header num hmetrics diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh index 4df0d942ceb..492947751e6 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh @@ -103,7 +103,7 @@ struct BaseCoordFormat3 protected: HBUINT16 format; /* Format identifier--format = 3 */ FWORD coordinate; /* X or Y value, in design units */ - OffsetTo + Offset16To deviceTable; /* Offset to Device table for X or * Y value, from beginning of * BaseCoord table (may be NULL). */ @@ -173,11 +173,11 @@ struct FeatMinMaxRecord protected: Tag tag; /* 4-byte feature identification tag--must * match feature tag in FeatureList */ - OffsetTo + Offset16To minCoord; /* Offset to BaseCoord table that defines * the minimum extent value, from beginning * of MinMax table (may be NULL) */ - OffsetTo + Offset16To maxCoord; /* Offset to BaseCoord table that defines * the maximum extent value, from beginning * of MinMax table (may be NULL) */ @@ -212,15 +212,15 @@ struct MinMax } protected: - OffsetTo + Offset16To minCoord; /* Offset to BaseCoord table that defines * minimum extent value, from the beginning * of MinMax table (may be NULL) */ - OffsetTo + Offset16To maxCoord; /* Offset to BaseCoord table that defines * maximum extent value, from the beginning * of MinMax table (may be NULL) */ - SortedArrayOf + SortedArray16Of featMinMaxRecords; /* Array of FeatMinMaxRecords, in alphabetical * order by featureTableTag */ @@ -247,7 +247,7 @@ struct BaseValues Index defaultIndex; /* Index number of default baseline for this * script — equals index position of baseline tag * in baselineTags array of the BaseTagList */ - OffsetArrayOf + Array16OfOffset16To baseCoords; /* Number of BaseCoord tables defined — should equal * baseTagCount in the BaseTagList * @@ -275,7 +275,7 @@ struct BaseLangSysRecord protected: Tag baseLangSysTag; /* 4-byte language system identification tag */ - OffsetTo + Offset16To minMax; /* Offset to MinMax table, from beginning * of BaseScript table */ public: @@ -305,13 +305,13 @@ struct BaseScript } protected: - OffsetTo + Offset16To baseValues; /* Offset to BaseValues table, from beginning * of BaseScript table (may be NULL) */ - OffsetTo + Offset16To defaultMinMax; /* Offset to MinMax table, from beginning of * BaseScript table (may be NULL) */ - SortedArrayOf + SortedArray16Of baseLangSysRecords; /* Number of BaseLangSysRecords * defined — may be zero (0) */ @@ -339,7 +339,7 @@ struct BaseScriptRecord protected: Tag baseScriptTag; /* 4-byte script identification tag */ - OffsetTo + Offset16To baseScript; /* Offset to BaseScript table, from beginning * of BaseScriptList */ @@ -364,7 +364,7 @@ struct BaseScriptList } protected: - SortedArrayOf + SortedArray16Of baseScriptRecords; public: @@ -426,12 +426,12 @@ struct Axis } protected: - OffsetTo> + Offset16To> baseTagList; /* Offset to BaseTagList table, from beginning * of Axis table (may be NULL) * Array of 4-byte baseline identification tags — must * be in alphabetical order */ - OffsetTo + Offset16To baseScriptList; /* Offset to BaseScriptList table, from beginning * of Axis table * Array of BaseScriptRecords, in alphabetical order @@ -501,11 +501,11 @@ struct BASE protected: FixedVersion<>version; /* Version of the BASE table */ - OffsetTohAxis; /* Offset to horizontal Axis table, from beginning + Offset16TohAxis; /* Offset to horizontal Axis table, from beginning * of BASE table (may be NULL) */ - OffsetTovAxis; /* Offset to vertical Axis table, from beginning + Offset16TovAxis; /* Offset to vertical Axis table, from beginning * of BASE table (may be NULL) */ - LOffsetTo + Offset32To varStore; /* Offset to the table of Item Variation * Store--from beginning of BASE * header (may be NULL). Introduced diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh index 0ba7e3c0618..0fc66d2cbd1 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh @@ -88,12 +88,66 @@ static inline void ClassDef_serialize (hb_serialize_context_t *c, Iterator it); static void ClassDef_remap_and_serialize (hb_serialize_context_t *c, - const hb_set_t &glyphset, const hb_map_t &gid_klass_map, hb_sorted_vector_t &glyphs, const hb_set_t &klasses, + bool use_class_zero, hb_map_t *klass_map /*INOUT*/); + +struct hb_prune_langsys_context_t +{ + hb_prune_langsys_context_t (const void *table_, + hb_hashmap_t *script_langsys_map_, + const hb_map_t *duplicate_feature_map_, + hb_set_t *new_collected_feature_indexes_) + :table (table_), + script_langsys_map (script_langsys_map_), + duplicate_feature_map (duplicate_feature_map_), + new_feature_indexes (new_collected_feature_indexes_), + script_count (0),langsys_count (0) {} + + bool visitedScript (const void *s) + { + if (script_count++ > HB_MAX_SCRIPTS) + return true; + + return visited (s, visited_script); + } + + bool visitedLangsys (const void *l) + { + if (langsys_count++ > HB_MAX_LANGSYS) + return true; + + return visited (l, visited_langsys); + } + + private: + template + bool visited (const T *p, hb_set_t &visited_set) + { + hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) p - (uintptr_t) table); + if (visited_set.has (delta)) + return true; + + visited_set.add (delta); + return false; + } + + public: + const void *table; + hb_hashmap_t *script_langsys_map; + const hb_map_t *duplicate_feature_map; + hb_set_t *new_feature_indexes; + + private: + hb_set_t visited_script; + hb_set_t visited_langsys; + unsigned script_count; + unsigned langsys_count; +}; + struct hb_subset_layout_context_t : hb_dispatch_context_t { @@ -125,16 +179,21 @@ struct hb_subset_layout_context_t : hb_subset_context_t *subset_context; const hb_tag_t table_tag; const hb_map_t *lookup_index_map; + const hb_hashmap_t *script_langsys_map; const hb_map_t *feature_index_map; + unsigned cur_script_index; hb_subset_layout_context_t (hb_subset_context_t *c_, hb_tag_t tag_, hb_map_t *lookup_map_, - hb_map_t *feature_map_) : + hb_hashmap_t *script_langsys_map_, + hb_map_t *feature_index_map_) : subset_context (c_), table_tag (tag_), lookup_index_map (lookup_map_), - feature_index_map (feature_map_), + script_langsys_map (script_langsys_map_), + feature_index_map (feature_index_map_), + cur_script_index (0xFFFFu), script_count (0), langsys_count (0), feature_index_count (0), @@ -325,7 +384,7 @@ struct Record } Tag tag; /* 4-byte Tag identifier */ - OffsetTo + Offset16To offset; /* Offset from beginning of object holding * the Record */ public: @@ -333,11 +392,11 @@ struct Record }; template -struct RecordArrayOf : SortedArrayOf> +struct RecordArrayOf : SortedArray16Of> { - const OffsetTo& get_offset (unsigned int i) const + const Offset16To& get_offset (unsigned int i) const { return (*this)[i].offset; } - OffsetTo& get_offset (unsigned int i) + Offset16To& get_offset (unsigned int i) { return (*this)[i].offset; } const Tag& get_tag (unsigned int i) const { return (*this)[i].tag; } @@ -407,6 +466,30 @@ struct RecordListOfFeature : RecordListOf } }; +struct Script; +struct RecordListOfScript : RecordListOf