summaryrefslogtreecommitdiff
path: root/Build/source
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2024-03-29 23:16:35 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2024-03-29 23:16:35 +0000
commit42ab7dd4e0294970e0e7290feb4970755b551f98 (patch)
treedc4de409ea5f1e4bcdf4e9be64f8d1a9eaacf504 /Build/source
parentc36b8c45bd0796b271babc4cccf149dc52564b7d (diff)
harfbuzz 8.4.0
git-svn-id: svn://tug.org/texlive/trunk@70812 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source')
-rw-r--r--Build/source/libs/README2
-rw-r--r--Build/source/libs/harfbuzz/ChangeLog5
-rw-r--r--Build/source/libs/harfbuzz/TLpatches/ChangeLog5
-rw-r--r--Build/source/libs/harfbuzz/TLpatches/TL-Changes4
-rwxr-xr-xBuild/source/libs/harfbuzz/configure26
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog514
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/NEWS13
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/README6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/README.md6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/configure.ac8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/meson.build40
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh50
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc44
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh1
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h7
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh5
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc9
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh60
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc112
-rw-r--r--Build/source/libs/harfbuzz/version.ac2
23 files changed, 847 insertions, 92 deletions
diff --git a/Build/source/libs/README b/Build/source/libs/README
index cd9a3ab30de..70735c67fef 100644
--- a/Build/source/libs/README
+++ b/Build/source/libs/README
@@ -28,7 +28,7 @@ graphite2 1.3.14 - checked 10apr20
https://sourceforge.net/projects/silgraphite/files/graphite2/
(requires C++11)
-harfbuzz 8.3.1 - checked 18mar24
+harfbuzz 8.4.0 - checked 30mar24
https://github.com/harfbuzz/harfbuzz/releases/latest
icu 74.2 - checked 22dec23
diff --git a/Build/source/libs/harfbuzz/ChangeLog b/Build/source/libs/harfbuzz/ChangeLog
index 054c71e44f8..acce9fbc15d 100644
--- a/Build/source/libs/harfbuzz/ChangeLog
+++ b/Build/source/libs/harfbuzz/ChangeLog
@@ -1,3 +1,8 @@
+2024-03-30 Akira Kakuto <kakuto@jcom.zaq.ne.jp>
+
+ Import harfbuzz-8.4.0.
+ * version.ac: Adjusted.
+
2024-03-18 Akira Kakuto <kakuto@jcom.zaq.ne.jp>
Import harfbuzz-8.3.1.
diff --git a/Build/source/libs/harfbuzz/TLpatches/ChangeLog b/Build/source/libs/harfbuzz/TLpatches/ChangeLog
index e181179fa54..a27c8a168a2 100644
--- a/Build/source/libs/harfbuzz/TLpatches/ChangeLog
+++ b/Build/source/libs/harfbuzz/TLpatches/ChangeLog
@@ -1,3 +1,8 @@
+2024-03-30 Akira Kakuto <kakuto@jcom.zaq.ne.jp>
+
+ Imported harfbuzz-8.4.0 source tree from:
+ https://github.com/harfbuzz/harfbuzz/releases/download/8.4.0/
+
2024-03-18 Akira Kakuto <kakuto@jcom.zaq.ne.jp>
Imported harfbuzz-8.3.1 source tree from:
diff --git a/Build/source/libs/harfbuzz/TLpatches/TL-Changes b/Build/source/libs/harfbuzz/TLpatches/TL-Changes
index c5b69c6c3a1..91070d39a51 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-8.3.1/ tree as obtained from:
- https://github.com/harfbuzz/harfbuzz/releases/download/8.3.1/
+Changes applied to the harfbuzz-8.4.0/ tree as obtained from:
+ https://github.com/harfbuzz/harfbuzz/releases/download/8.4.0/
Removed:
COPYING
diff --git a/Build/source/libs/harfbuzz/configure b/Build/source/libs/harfbuzz/configure
index a980c2901f7..fb021dff2c5 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.72 for harfbuzz (TeX Live) 8.3.1.
+# Generated by GNU Autoconf 2.72 for harfbuzz (TeX Live) 8.4.0.
#
# Report bugs to <tex-k@tug.org>.
#
@@ -604,8 +604,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='harfbuzz (TeX Live)'
PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='8.3.1'
-PACKAGE_STRING='harfbuzz (TeX Live) 8.3.1'
+PACKAGE_VERSION='8.4.0'
+PACKAGE_STRING='harfbuzz (TeX Live) 8.4.0'
PACKAGE_BUGREPORT='tex-k@tug.org'
PACKAGE_URL=''
@@ -1339,7 +1339,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) 8.3.1 to adapt to many kinds of systems.
+'configure' configures harfbuzz (TeX Live) 8.4.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1411,7 +1411,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of harfbuzz (TeX Live) 8.3.1:";;
+ short | recursive ) echo "Configuration of harfbuzz (TeX Live) 8.4.0:";;
esac
cat <<\_ACEOF
@@ -1516,7 +1516,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-harfbuzz (TeX Live) configure 8.3.1
+harfbuzz (TeX Live) configure 8.4.0
generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2073,7 +2073,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 8.3.1, which was
+It was created by harfbuzz (TeX Live) $as_me 8.4.0, which was
generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4888,7 +4888,7 @@ fi
# Define the identity of the package.
PACKAGE='harfbuzz--tex-live-'
- VERSION='8.3.1'
+ VERSION='8.4.0'
# Some tools Automake needs.
@@ -5103,9 +5103,9 @@ WARNING_CFLAGS=$kpse_cv_warning_cflags
HB_VERSION_MAJOR=8
-HB_VERSION_MINOR=3
-HB_VERSION_MICRO=1
-HB_VERSION=8.3.1
+HB_VERSION_MINOR=4
+HB_VERSION_MICRO=0
+HB_VERSION=8.4.0
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -8949,7 +8949,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 8.3.1, which was
+This file was extended by harfbuzz (TeX Live) $as_me 8.4.0, which was
generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9017,7 +9017,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-harfbuzz (TeX Live) config.status 8.3.1
+harfbuzz (TeX Live) config.status 8.4.0
configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
index 6f0cfdb3d93..9b87eec6ea4 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
@@ -1,3 +1,517 @@
+commit 63973005bc07aba599b47fdd4cf788647b601ccd
+Author: Khaled Hosny <khaled@aliftype.com>
+Date: Fri Mar 29 16:26:17 2024 +0200
+
+ 8.4.0
+
+ NEWS | 13 +++++++++++++
+ configure.ac | 2 +-
+ docs/harfbuzz-docs.xml | 1 +
+ meson.build | 2 +-
+ src/hb-buffer.cc | 4 ++--
+ src/hb-version.h | 6 +++---
+ 6 files changed, 21 insertions(+), 7 deletions(-)
+
+commit 5b34058d35eea1b93a77ead5d0a1a8e9b33c2d6a
+Merge: 990fb14d7 69f9c29ec
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Mar 28 18:56:29 2024 -0600
+
+ Merge pull request #4640 from googlefonts/gdef
+
+ [subset] When serializing GDEF ensure that varstore is packed last.
+
+commit 69f9c29ec1bff4411f46be63f1b887f42cc74d24
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Mar 29 00:19:16 2024 +0000
+
+ [repacker] add tests of serializer repack_last().
+
+ src/test-repacker.cc | 112 ++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 101 insertions(+), 11 deletions(-)
+
+commit 992953fd3e9b721e8ef5ebf3cb0044b92833e510
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Mar 28 23:12:21 2024 +0000
+
+ [subset] updated comment.
+
+ src/OT/Layout/GDEF/GDEF.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 96f0038e3969d175e131daee6f47e77876f3837d
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Mar 28 23:11:16 2024 +0000
+
+ [subset] cast.
+
+ src/OT/Layout/GDEF/GDEF.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6e87481731e0945f71e8cb9556f30ffcd2388fcf
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Mar 27 17:47:57 2024 +0000
+
+ [subset] add virtual links to keep the gdef varstore last.
+
+ src/OT/Layout/GDEF/GDEF.hh | 19 +++++--
+ src/hb-serialize.hh | 60 ++++++++++++++++++---
+ ...r-new.default.retain-all-codepoint.wght=300.ttf | Bin 131708 -> 131708 bytes
+ ...aa-Regular-new.default.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 191560 -> 191560 bytes
+ ...Regular-new.drop-hints.retain-all-codepoint.ttf | Bin 191512 -> 191512 bytes
+ ...ortaa-Regular-new.gids.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...egular-new.glyph-names.retain-all-codepoint.ttf | Bin 229676 -> 229676 bytes
+ ...ep-all-layout-features.retain-all-codepoint.ttf | Bin 223380 -> 223380 bytes
+ ...ar-new.layout-features.retain-all-codepoint.ttf | Bin 220876 -> 220876 bytes
+ ...a-Regular-new.name-ids.retain-all-codepoint.ttf | Bin 222424 -> 222424 bytes
+ ...lar-new.name-languages.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...egular-new.name-legacy.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...o-prune-unicode-ranges.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...lar-new.notdef-outline.retain-all-codepoint.ttf | Bin 223280 -> 223280 bytes
+ ...egular-new.retain-gids.retain-all-codepoint.ttf | Bin 222732 -> 222732 bytes
+ ...codepoint.wght=200-300,opsz=14.iup_optimize.ttf | Bin 9988 -> 9988 bytes
+ ...t.retain-all-codepoint.wght=200-300,opsz=14.ttf | Bin 10136 -> 10136 bytes
+ ...ifVariable-Roman.default.1FC,21,41,20,62,63.ttf | Bin 3888 -> 3888 bytes
+ ...an.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 9704 -> 9704 bytes
+ .../SourceSerifVariable-Roman.default.61,62,63.ttf | Bin 3784 -> 3784 bytes
+ ...eSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf | Bin 4324 -> 4324 bytes
+ ...ariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf | Bin 3864 -> 3864 bytes
+ ...drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 9704 -> 9704 bytes
+ ...urceSerifVariable-Roman.drop-hints.61,62,63.ttf | Bin 3784 -> 3784 bytes
+ ...rifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf | Bin 4324 -> 4324 bytes
+ ...ble-Roman.filter-scripts.1FC,21,41,20,62,63.ttf | Bin 3856 -> 3856 bytes
+ ...er-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 9548 -> 9548 bytes
+ ...SerifVariable-Roman.filter-scripts.61,62,63.ttf | Bin 3752 -> 3752 bytes
+ ...ariable-Roman.filter-scripts.D7,D8,D9,DA,DE.ttf | Bin 4292 -> 4292 bytes
+ ....retain-all-codepoint.wght=300.iup_optimize.ttf | Bin 3276 -> 3228 bytes
+ ...ubset.default.retain-all-codepoint.wght=300.ttf | Bin 3300 -> 3252 bytes
+ ...nt.wght=200-300-500,wdth=80-90.iup_optimize.ttf | Bin 8684 -> 8684 bytes
+ ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8708 -> 8708 bytes
+ ...codepoint.wght=300-600,wdth=85.iup_optimize.ttf | Bin 7592 -> 7592 bytes
+ ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7592 -> 7592 bytes
+ ...ain-all-codepoint.wght=300-600.iup_optimize.ttf | Bin 303960 -> 303960 bytes
+ ...n.default.retain-all-codepoint.wght=300-600.ttf | Bin 305092 -> 305092 bytes
+ ...ain-all-codepoint.wght=500-800.iup_optimize.ttf | Bin 249808 -> 249808 bytes
+ ...n.default.retain-all-codepoint.wght=500-800.ttf | Bin 250164 -> 250164 bytes
+ test/subset/data/fonts/AnekBangla-subset.ttf | Bin 5456 -> 5276 bytes
+ 41 files changed, 66 insertions(+), 13 deletions(-)
+
+commit 7145607149be79a548d5a2e25ccbeb1fc6dc3492
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Mar 25 21:41:16 2024 +0000
+
+ [subset] place the gdef var store at the end of the GDEF table.
+
+ It appears that some font processors assume it is the last sub table.
+
+ src/OT/Layout/GDEF/GDEF.hh | 38 +++++++++++++--------
+ ...r-new.default.retain-all-codepoint.wght=700.ttf | Bin 131584 -> 131584 bytes
+ .../Foldit.default.retain-all-codepoint.ttf | Bin 44324 -> 44324 bytes
+ ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 44288 -> 44288 bytes
+ .../Foldit.drop-hints.retain-all-codepoint.ttf | Bin 44288 -> 44288 bytes
+ .../Foldit.retain-gids.retain-all-codepoint.ttf | Bin 44324 -> 44324 bytes
+ ...fault.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...fault.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114296 -> 114296 bytes
+ ...anges.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...anges.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114296 -> 114296 bytes
+ ...ayout-test-retain-gids.retain-all-codepoint.ttf | Bin 142456 -> 142456 bytes
+ ...wa-Regular.layout-test.retain-all-codepoint.ttf | Bin 142456 -> 142456 bytes
+ ...traLightItalic.default.retain-all-codepoint.ttf | Bin 134344 -> 134344 bytes
+ ...ightItalic.glyph-names.retain-all-codepoint.ttf | Bin 145620 -> 145620 bytes
+ ...tItalic.notdef-outline.retain-all-codepoint.ttf | Bin 134472 -> 134472 bytes
+ ...a-latin-subset.default.retain-all-codepoint.ttf | Bin 40128 -> 40128 bytes
+ .../Roboto-Regular.default.1E00,303.ttf | Bin 2464 -> 2464 bytes
+ .../layout.gdef/Roboto-Regular.default.303.ttf | Bin 2068 -> 2068 bytes
+ .../Roboto-Regular.default.309,20,30F.ttf | Bin 2140 -> 2140 bytes
+ .../layout.gdef/Roboto-Regular.default.323.ttf | Bin 1960 -> 1960 bytes
+ .../Roboto-Regular.drop-hints.1E00,303.ttf | Bin 1320 -> 1320 bytes
+ .../layout.gdef/Roboto-Regular.drop-hints.303.ttf | Bin 1064 -> 1064 bytes
+ .../Roboto-Regular.drop-hints.309,20,30F.ttf | Bin 1100 -> 1100 bytes
+ .../layout.gdef/Roboto-Regular.drop-hints.323.ttf | Bin 1008 -> 1008 bytes
+ .../Roboto-Regular.keep-gdef-gpos.1E00,303.ttf | Bin 2464 -> 2464 bytes
+ .../Roboto-Regular.keep-gdef-gpos.303.ttf | Bin 2068 -> 2068 bytes
+ .../Roboto-Regular.keep-gdef-gpos.309,20,30F.ttf | Bin 2140 -> 2140 bytes
+ .../Roboto-Regular.keep-gdef-gpos.323.ttf | Bin 1960 -> 1960 bytes
+ ...ular.default.627,644,623,62D,644,627,645,2E.ttf | Bin 17552 -> 17552 bytes
+ ...astaliqUrdu-Regular.default.627,644,62D,628.ttf | Bin 24520 -> 24520 bytes
+ .../NotoNastaliqUrdu-Regular.default.633,6D2.ttf | Bin 14280 -> 14280 bytes
+ ...otoNastaliqUrdu-Regular.default.63A,64A,631.ttf | Bin 26116 -> 26116 bytes
+ ...iqUrdu-Regular.default.retain-all-codepoint.ttf | Bin 542328 -> 542328 bytes
+ ....retain-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 24212 -> 24212 bytes
+ ...liqUrdu-Regular.retain-gids.627,644,62D,628.ttf | Bin 30420 -> 30420 bytes
+ ...otoNastaliqUrdu-Regular.retain-gids.633,6D2.ttf | Bin 20120 -> 20120 bytes
+ ...astaliqUrdu-Regular.retain-gids.63A,64A,631.ttf | Bin 31976 -> 31976 bytes
+ ...du-Regular.retain-gids.retain-all-codepoint.ttf | Bin 542360 -> 542360 bytes
+ 38 files changed, 23 insertions(+), 15 deletions(-)
+
+commit 990fb14d7883354db5e5fb1048019829cb2a7eb4
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Mar 28 22:32:55 2024 +0000
+
+ [subset] Disable fonttools comparison in a few tests where rounding diffs show up.
+
+ Context: https://github.com/harfbuzz/harfbuzz/issues/4642
+
+ ...codepoint.wght=200-300,opsz=14.iup_optimize.ttf | Bin 9984 -> 9988 bytes
+ ...t.retain-all-codepoint.wght=200-300,opsz=14.ttf | Bin 10136 -> 10136 bytes
+ ...oint.wght=400,wdth=100,opsz=14.iup_optimize.ttf | Bin 6292 -> 6292 bytes
+ ...ain-all-codepoint.wght=400,wdth=100,opsz=14.ttf | Bin 6404 -> 6404 bytes
+ ...nt.wght=200-300-500,wdth=80-90.iup_optimize.ttf | Bin 8684 -> 8684 bytes
+ ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8708 -> 8708 bytes
+ ...codepoint.wght=300-600,wdth=85.iup_optimize.ttf | Bin 7592 -> 7592 bytes
+ ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7592 -> 7592 bytes
+ ...nt.wght=200-300-500,wdth=80-90.iup_optimize.ttf | Bin 7516 -> 7516 bytes
+ ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7568 -> 7568 bytes
+ ...codepoint.wght=300-600,wdth=85.iup_optimize.ttf | Bin 6928 -> 6928 bytes
+ ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6932 -> 6932 bytes
+ ...=200-600,wdth=80-90,CTGR=20-60.iup_optimize.ttf | Bin 4164 -> 4164 bytes
+ ...odepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 4300 -> 4300 bytes
+ ...,YEXT=520,wght=100-400,slnt=18.iup_optimize.ttf | Bin 2184 -> 2184 bytes
+ ...point.SPED=25,YEXT=520,wght=100-400,slnt=18.ttf | Bin 2184 -> 2184 bytes
+ ...ain-all-codepoint.wght=300-600.iup_optimize.ttf | Bin 303960 -> 303960 bytes
+ ...n.default.retain-all-codepoint.wght=300-600.ttf | Bin 305092 -> 305092 bytes
+ ...ain-all-codepoint.wght=500-800.iup_optimize.ttf | Bin 249808 -> 249808 bytes
+ ...n.default.retain-all-codepoint.wght=500-800.ttf | Bin 250164 -> 250164 bytes
+ test/subset/data/fonts/RobotoFlex-Variable.ABC.ttf | Bin 27440 -> 27620 bytes
+ test/subset/data/tests/empty_region_vardata.tests | 4 ++++
+ .../data/tests/glyf_partial_instancing.tests | 4 ++++
+ test/subset/data/tests/mvar_partial_instance.tests | 4 ++++
+ test/subset/data/tests/update_def_wght.tests | 4 ++++
+ 25 files changed, 16 insertions(+)
+
+commit 11f5dec75f8e24ed995fbbabdf4c2a6a0d9e592d
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Mar 27 19:34:51 2024 +0000
+
+ [subset] Move post apply mvar test intance position to avoid rounding diff.
+
+ ...ll-codepoint.wght=500,CASL=0,CRSV=0,MONO=0,slnt=0.ttf | Bin 0 -> 1892 bytes
+ test/subset/data/tests/post_apply_mvar_delta.tests | 2 +-
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 975bd39b158e454a84b7b947d156561a21aaf24f
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Mar 27 19:28:53 2024 +0000
+
+ [subset] Match hb rounding to fonttools for avg char width.
+
+ Update Muli and Roboto input test fonts to recalc class values. FontTools recalcs class values during instancing while harfbuzz does not (like the ft subsetter).
+
+ src/hb-ot-os2-table.hh | 2 +-
+ ...r-new.default.retain-all-codepoint.wght=300.ttf | Bin 131708 -> 131708 bytes
+ ...i-ABC.default.retain-all-codepoint.wght=300.ttf | Bin 5788 -> 5788 bytes
+ ...i-ABC.default.retain-all-codepoint.wght=700.ttf | Bin 5784 -> 5784 bytes
+ ...fault.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...anges.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...fault.retain-all-codepoint.wght=200,wdth=90.ttf | Bin 6736 -> 6736 bytes
+ ...fault.retain-all-codepoint.wght=650,wdth=85.ttf | Bin 6688 -> 6688 bytes
+ ...etain-all-codepoint.wght=150,wdth=80,CTGR=0.ttf | Bin 1396 -> 1396 bytes
+ ...etain-all-codepoint.wght=300,wdth=90,CTGR=0.ttf | Bin 1432 -> 1432 bytes
+ ...lt.retain-all-codepoint.wght=400,wdth=100.0.ttf | Bin 6780 -> 6780 bytes
+ ...ult.retain-all-codepoint.wght=drop,wdth=100.ttf | Bin 6780 -> 6780 bytes
+ test/subset/data/fonts/Muli-ABC.ttf | Bin 6996 -> 6988 bytes
+ test/subset/data/fonts/Roboto-Variable.ABC.ttf | Bin 13480 -> 13448 bytes
+ 14 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 15a05b24325bc0c07700268e90693cada3cff871
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Mar 27 18:26:09 2024 +0000
+
+ [subset] Update generate-expected-outputs to drop BASE.
+
+ This matches the behaviour of the test runner.
+
+ test/subset/generate-expected-outputs.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit ec46c4c2e6a1ee55ddbf2ad8a1241be6903890f9
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Mar 27 18:11:26 2024 +0000
+
+ [subset] Update subset test suite to match some changes made to fonttools.
+
+ FontTools has added pruning functionality for code pages which we don't yet have in harfbuzz. Update our test runner to disable that for now. Also match fonttools and always recalc usFirst/LastCharIndex even if no prune unicode ranges is set.
+
+ src/hb-ot-os2-table.hh | 6 +++---
+ ...a-Regular-new.no-prune-unicode-ranges.61,62,63.ttf | Bin 7036 -> 7036 bytes
+ ...rtaa-Regular-new.no-prune-unicode-ranges.61,63.ttf | Bin 6668 -> 6668 bytes
+ ...mfortaa-Regular-new.no-prune-unicode-ranges.61.ttf | Bin 6300 -> 6300 bytes
+ ...mfortaa-Regular-new.no-prune-unicode-ranges.62.ttf | Bin 6172 -> 6172 bytes
+ ...mfortaa-Regular-new.no-prune-unicode-ranges.63.ttf | Bin 6228 -> 6228 bytes
+ ...egular-subset.no-prune-unicode-ranges.61,62,63.ttf | Bin 4128 -> 4128 bytes
+ ...o-Regular-subset.no-prune-unicode-ranges.61,63.ttf | Bin 3580 -> 3580 bytes
+ ...ngjo-Regular-subset.no-prune-unicode-ranges.61.ttf | Bin 3156 -> 3156 bytes
+ ...ngjo-Regular-subset.no-prune-unicode-ranges.62.ttf | Bin 3180 -> 3180 bytes
+ ...ngjo-Regular-subset.no-prune-unicode-ranges.63.ttf | Bin 3048 -> 3048 bytes
+ .../Roboto-Regular.abc.no-prune-unicode-ranges.61.ttf | Bin 1988 -> 1988 bytes
+ .../Roboto-Regular.abc.no-prune-unicode-ranges.62.ttf | Bin 1856 -> 1856 bytes
+ .../Roboto-Regular.abc.no-prune-unicode-ranges.63.ttf | Bin 1912 -> 1912 bytes
+ test/subset/generate-expected-outputs.py | 2 ++
+ 15 files changed, 5 insertions(+), 3 deletions(-)
+
+commit c3fed775d7dbb7e5fdda7da915c8c51d7d21db75
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Mar 28 12:25:03 2024 -0600
+
+ Update README.md
+
+ README.md | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 31e2d12d438d584ed64128208e50a35b47484a02
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date: Mon Mar 25 10:40:36 2024 +0000
+
+ Bump github/codeql-action from 3.24.7 to 3.24.9
+
+ Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.7 to 3.24.9.
+ - [Release notes](https://github.com/github/codeql-action/releases)
+ - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
+ - [Commits](https://github.com/github/codeql-action/compare/3ab4101902695724f9365a384f86c1074d94e18c...1b1aada464948af03b950897e5eb522f92603cc2)
+
+ ---
+ updated-dependencies:
+ - dependency-name: github/codeql-action
+ dependency-type: direct:production
+ update-type: version-update:semver-patch
+ ...
+
+ Signed-off-by: dependabot[bot] <support@github.com>
+
+ .github/workflows/scorecard.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit cc67579c8ed2fe3305117d15d101682ffe0a84b7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Mar 22 12:35:29 2024 -0600
+
+ [wasm] Update to latest wasm-micro-runtime API
+
+ src/hb-wasm-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 3d86b360549745113e5b76daae119b3ba2ce36e0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Mar 22 10:37:39 2024 -0600
+
+ [shape] Fix syntax error under some configs
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/4635
+
+ src/hb-ot-shape.cc | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit 3c8d448fa1174b743963fbc5061a585a255e880b
+Author: Khaled Hosny <khaled@aliftype.com>
+Date: Sun Mar 17 12:32:14 2024 +0200
+
+ [meson] Check minimum dependency versions like with autotools
+
+ meson.build | 37 ++++++++++++++++++++++++-------------
+ 1 file changed, 24 insertions(+), 13 deletions(-)
+
+commit 1e5597bf853aba69c87c7486d74fcfe3fc6b61cc
+Author: Khaled Hosny <khaled@aliftype.com>
+Date: Sun Mar 17 12:14:56 2024 +0200
+
+ [autotools] Check for minimum ICU version as well
+
+ We use unorm2_* APIs introduced in 49.0.
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 957049066e81a46b5c6fc99544b7f4f11550ea48
+Author: Ozkan Sezer <sezeroz@gmail.com>
+Date: Sun Mar 17 11:50:04 2024 +0300
+
+ configure.ac: bump minimum required versions for glib and cairo.
+
+ glib2 >= 2.30 is needed for g_unicode_script_from_iso15924() and
+ g_unicode_script_to_iso15924()
+
+ cairo >= 1.10 is needed for the new cairo_operator_t members like
+ CAIRO_OPERATOR_SCREEN
+
+ Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4577
+ Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4624
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit dbecddb41c8d5780089bd683e9c7556717737976
+Author: Ozkan Sezer <sezeroz@gmail.com>
+Date: Sun Mar 17 11:50:04 2024 +0300
+
+ tests, hb-test.h: define g_assert_false && g_assert_nonnull for old glib
+
+ Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4577
+ Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4624
+
+ test/api/hb-test.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 98747fdec86b58cf3ee508947744ff129d2d62e6
+Author: Ozkan Sezer <sezeroz@gmail.com>
+Date: Thu Mar 21 08:51:02 2024 +0300
+
+ hb-common.h: restore including stdint.h for VS2010/2012.
+
+ src/hb-common.h | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit f1ac867deec0500fed94f965b6da25f9fcd434de
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Mar 14 13:30:21 2024 -0600
+
+ [buffer] Add API for random state
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/4620
+
+ New API:
+ +hb_buffer_set_random_state()
+ +hb_buffer_get_random_state()
+
+ docs/harfbuzz-sections.txt | 2 ++
+ src/hb-buffer.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h | 6 ++++++
+ src/hb-buffer.hh | 1 +
+ src/hb-ot-layout-gsubgpos.hh | 5 ++---
+ 5 files changed, 55 insertions(+), 3 deletions(-)
+
+commit 3d455998bf2d48b333522e3f2bd72e720b5d7d5c
+Author: 璀境石 <Kuanlan@outlook.com>
+Date: Tue Mar 19 09:17:42 2024 +0800
+
+ fixed: hb-subset.cc -- compile error C1128: number of sections exceeded object file format limit
+
+ meson.build | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 51b775d38d5ca4c46bf6672ed10b623b6e7ac2e1
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date: Mon Mar 18 10:47:18 2024 +0000
+
+ Bump github/codeql-action from 3.24.6 to 3.24.7
+
+ Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.6 to 3.24.7.
+ - [Release notes](https://github.com/github/codeql-action/releases)
+ - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
+ - [Commits](https://github.com/github/codeql-action/compare/8a470fddafa5cbb6266ee11b37ef4d8aae19c571...3ab4101902695724f9365a384f86c1074d94e18c)
+
+ ---
+ updated-dependencies:
+ - dependency-name: github/codeql-action
+ dependency-type: direct:production
+ update-type: version-update:semver-patch
+ ...
+
+ Signed-off-by: dependabot[bot] <support@github.com>
+
+ .github/workflows/scorecard.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 80208d3a2b604ab2fdb7119fd7bbeeb198842aa6
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date: Mon Mar 18 10:47:28 2024 +0000
+
+ Bump actions/checkout from 4.1.1 to 4.1.2
+
+ Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2.
+ - [Release notes](https://github.com/actions/checkout/releases)
+ - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
+ - [Commits](https://github.com/actions/checkout/compare/b4ffde65f46336ab88eb53be808477a3936bae11...9bb56186c3b09b4f86b1c65136769dd318469633)
+
+ ---
+ updated-dependencies:
+ - dependency-name: actions/checkout
+ dependency-type: direct:production
+ update-type: version-update:semver-patch
+ ...
+
+ Signed-off-by: dependabot[bot] <support@github.com>
+
+ .github/workflows/arm-ci.yml | 2 +-
+ .github/workflows/configs-build.yml | 2 +-
+ .github/workflows/coverity-scan.yml | 2 +-
+ .github/workflows/linux-ci.yml | 2 +-
+ .github/workflows/macos-ci.yml | 2 +-
+ .github/workflows/msvc-ci.yml | 2 +-
+ .github/workflows/msys2-ci.yml | 2 +-
+ .github/workflows/scorecard.yml | 2 +-
+ 8 files changed, 8 insertions(+), 8 deletions(-)
+
+commit a0154418eb13118dc6ee97055e5c3138ed7a73ee
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date: Mon Mar 18 10:47:32 2024 +0000
+
+ Bump meson from 1.3.2 to 1.4.0 in /.ci
+
+ Bumps [meson](https://github.com/mesonbuild/meson) from 1.3.2 to 1.4.0.
+ - [Release notes](https://github.com/mesonbuild/meson/releases)
+ - [Commits](https://github.com/mesonbuild/meson/compare/1.3.2...1.4.0)
+
+ ---
+ updated-dependencies:
+ - dependency-name: meson
+ dependency-type: direct:production
+ update-type: version-update:semver-minor
+ ...
+
+ Signed-off-by: dependabot[bot] <support@github.com>
+
+ .ci/requirements.in | 2 +-
+ .ci/requirements.txt | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit a91d2edc7a4346e914d09ed183ea303edcff26ea
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date: Mon Mar 18 10:47:45 2024 +0000
+
+ Bump setuptools from 69.1.1 to 69.2.0 in /.ci
+
+ Bumps [setuptools](https://github.com/pypa/setuptools) from 69.1.1 to 69.2.0.
+ - [Release notes](https://github.com/pypa/setuptools/releases)
+ - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
+ - [Commits](https://github.com/pypa/setuptools/compare/v69.1.1...v69.2.0)
+
+ ---
+ updated-dependencies:
+ - dependency-name: setuptools
+ dependency-type: direct:production
+ update-type: version-update:semver-minor
+ ...
+
+ Signed-off-by: dependabot[bot] <support@github.com>
+
+ .ci/requirements.txt | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit ddc9b42684305287e20c644b40fa478abd077ef8
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date: Mon Mar 18 10:48:00 2024 +0000
+
+ Bump fonttools from 4.49.0 to 4.50.0 in /.ci
+
+ Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.49.0 to 4.50.0.
+ - [Release notes](https://github.com/fonttools/fonttools/releases)
+ - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst)
+ - [Commits](https://github.com/fonttools/fonttools/compare/4.49.0...4.50.0)
+
+ ---
+ updated-dependencies:
+ - dependency-name: fonttools
+ dependency-type: direct:production
+ update-type: version-update:semver-minor
+ ...
+
+ Signed-off-by: dependabot[bot] <support@github.com>
+
+ .ci/requirements-fonttools.txt | 86 +++++++++++++++++++++---------------------
+ .ci/requirements.txt | 86 +++++++++++++++++++++---------------------
+ 2 files changed, 86 insertions(+), 86 deletions(-)
+
commit 2b3631a866b3077d9d675caa4ec9010b342b5a7c
Author: Khaled Hosny <khaled@aliftype.com>
Date: Sun Mar 17 07:44:19 2024 +0200
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
index 2d6a4a7d6bf..e94c6a89379 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
@@ -1,3 +1,16 @@
+Overview of changes leading to 8.4.0
+Saturday, March 29, 2024
+====================================
+- Add /bigobj to MSVC compiler flags in meson build, to fix building hb-subset.cc
+- Specify minimum versions of various dependencies in meson and autotools build.
+- When subsetting, place variation store at the end of “GDEF” table to fix
+ shaping issues with some versions of Adobe InDesign.
+- Various build fixes.
+
+- New API:
++hb_buffer_set_random_state()
++hb_buffer_get_random_state()
+
Overview of changes leading to 8.3.1
Saturday, March 16, 2024
====================================
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/README b/Build/source/libs/harfbuzz/harfbuzz-src/README
index d11c489f100..da4de65cf09 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/README
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/README
@@ -72,9 +72,9 @@ For a comparison of old vs new HarfBuzz memory consumption see [this][10].
## Name
-HarfBuzz (حرف‌باز) is my Persian translation of “[OpenType][1]”,
-transliterated using the Latin script. It sports a second meaning, but that
-ain’t translatable.
+HarfBuzz (حرف‌باز) is the literal Persian translation of “[OpenType][1]”,
+transliterated using the Latin script. It also means "talkative" or
+"glib" (also a nod to the GNOME project where HarfBuzz originates from).
> Background: Originally there was this font format called TrueType. People and
> companies started calling their type engines all things ending in Type:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/README.md b/Build/source/libs/harfbuzz/harfbuzz-src/README.md
index d11c489f100..da4de65cf09 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/README.md
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/README.md
@@ -72,9 +72,9 @@ For a comparison of old vs new HarfBuzz memory consumption see [this][10].
## Name
-HarfBuzz (حرف‌باز) is my Persian translation of “[OpenType][1]”,
-transliterated using the Latin script. It sports a second meaning, but that
-ain’t translatable.
+HarfBuzz (حرف‌باز) is the literal Persian translation of “[OpenType][1]”,
+transliterated using the Latin script. It also means "talkative" or
+"glib" (also a nod to the GNOME project where HarfBuzz originates from).
> Background: Originally there was this font format called TrueType. People and
> companies started calling their type engines all things ending in Type:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
index d7ac9333e26..40f5994e858 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],
- [8.3.1],
+ [8.4.0],
[https://github.com/harfbuzz/harfbuzz/issues/new],
[harfbuzz],
[http://harfbuzz.org/])
@@ -132,7 +132,7 @@ AC_ARG_WITH(glib,
[Use glib @<:@default=auto@:>@])],,
[with_glib=auto])
have_glib=false
-GLIB_DEPS="glib-2.0 >= 2.19.1"
+GLIB_DEPS="glib-2.0 >= 2.30"
AC_SUBST(GLIB_DEPS)
if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
PKG_CHECK_MODULES(GLIB, $GLIB_DEPS, have_glib=true, :)
@@ -193,7 +193,7 @@ AC_ARG_WITH(cairo,
[with_cairo=auto])
have_cairo=false
if test "x$with_cairo" = "xyes" -o "x$with_cairo" = "xauto"; then
- PKG_CHECK_MODULES(CAIRO, cairo >= 1.8.0, have_cairo=true, :)
+ PKG_CHECK_MODULES(CAIRO, cairo >= 1.10, have_cairo=true, :)
save_libs=$LIBS
LIBS="$LIBS $CAIRO_LIBS"
AC_CHECK_FUNCS(cairo_user_font_face_set_render_color_glyph_func)
@@ -242,7 +242,7 @@ AC_ARG_WITH(icu,
[with_icu=auto])
have_icu=false
if test "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" -o "x$with_icu" = "xauto"; then
- PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, :)
+ PKG_CHECK_MODULES(ICU, icu-uc >= 49.0, have_icu=true, :)
fi
if test \( "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" \) -a "x$have_icu" != "xtrue"; then
AC_MSG_ERROR([icu support requested but icu-uc not found])
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/meson.build b/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
index a5af3b8bdc9..fed3dc05549 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.55.0',
- version: '8.3.1',
+ version: '8.4.0',
default_options: [
'cpp_eh=none', # Just to support msvc, we are passing -fno-exceptions also anyway
# 'cpp_rtti=false', # Do NOT enable, wraps inherit it and ICU needs RTTI
@@ -9,6 +9,13 @@ project('harfbuzz', 'c', 'cpp',
],
)
+glib_min_version = '>= 2.30.0'
+cairo_min_version = '>= 1.10.0'
+chafa_min_version = '>= 1.6.0'
+icu_min_version = '>= 49.0'
+graphite2_min_version = '>= 1.2.0'
+freetype_min_version = '>= 12.0.6'
+
hb_version_arr = meson.project_version().split('.')
hb_version_major = hb_version_arr[0].to_int()
hb_version_minor = hb_version_arr[1].to_int()
@@ -41,6 +48,7 @@ if cpp.get_argument_syntax() == 'msvc'
# NOTE: Only add warnings here if you are sure they're spurious
msvc_args = [
'/wd4244', # lossy type conversion (e.g. double -> int)
+ '/bigobj', # hb-subset.cc -- compile error C1128: number of sections exceeded object file format limit
cpp.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
]
add_project_arguments(msvc_args, language: ['c', 'cpp'])
@@ -95,6 +103,7 @@ m_dep = cpp.find_library('m', required: false)
if meson.version().version_compare('>=0.60.0')
# pkg-config: freetype2, cmake: Freetype
freetype_dep = dependency('freetype2', 'Freetype',
+ version: freetype_min_version,
required: get_option('freetype'),
default_options: ['harfbuzz=disabled'],
allow_fallback: true)
@@ -106,15 +115,16 @@ else
freetype_opt = false
endif
# try pkg-config name
- freetype_dep = dependency('freetype2', method: 'pkg-config', required: freetype_opt)
+ freetype_dep = dependency('freetype2', version: freetype_min_version, method: 'pkg-config', required: freetype_opt)
# when disabled, leave it not-found
if not freetype_dep.found() and not get_option('freetype').disabled()
# Try cmake name
- freetype_dep = dependency('Freetype', method: 'cmake', required: false)
+ freetype_dep = dependency('Freetype', version: freetype_min_version, method: 'cmake', required: false)
# Subproject fallback, `allow_fallback: true` means the fallback will be
# tried even if the freetype option is set to `auto`.
if not freetype_dep.found()
freetype_dep = dependency('freetype2',
+ version: freetype_min_version,
method: 'pkg-config',
required: get_option('freetype'),
default_options: ['harfbuzz=disabled'],
@@ -123,10 +133,10 @@ else
endif
endif
-glib_dep = dependency('glib-2.0', required: get_option('glib'))
-gobject_dep = dependency('gobject-2.0', required: get_option('gobject'))
-graphite2_dep = dependency('graphite2', required: get_option('graphite2'))
-graphite_dep = dependency('graphite2', required: get_option('graphite'))
+glib_dep = dependency('glib-2.0', version: glib_min_version, required: get_option('glib'))
+gobject_dep = dependency('gobject-2.0', version: glib_min_version, required: get_option('gobject'))
+graphite2_dep = dependency('graphite2', version: graphite2_min_version, required: get_option('graphite2'))
+graphite_dep = dependency('graphite2', version: graphite2_min_version, required: get_option('graphite'))
wasm_dep = cpp.find_library('iwasm', required: get_option('wasm'))
# How to check whether iwasm was built, and hence requires, LLVM?
#llvm_dep = cpp.find_library('LLVM-15', required: get_option('wasm'))
@@ -134,6 +144,7 @@ wasm_dep = cpp.find_library('iwasm', required: get_option('wasm'))
if meson.version().version_compare('>=0.60.0')
# pkg-config: icu-uc, cmake: ICU but with components
icu_dep = dependency('icu-uc', 'ICU',
+ version: icu_min_version,
components: 'uc',
required: get_option('icu'),
allow_fallback: true)
@@ -145,17 +156,18 @@ else
icu_opt = false
endif
# try pkg-config name
- icu_dep = dependency('icu-uc', method: 'pkg-config', required: icu_opt)
+ icu_dep = dependency('icu-uc', version: icu_min_version, method: 'pkg-config', required: icu_opt)
# when disabled, leave it not-found
if not icu_dep.found() and not get_option('icu').disabled()
# Try cmake name
- icu_dep = dependency('ICU', method: 'cmake', components: 'uc', required: false)
+ icu_dep = dependency('ICU', version: icu_min_version, method: 'cmake', components: 'uc', required: false)
# Try again with subproject fallback. `allow_fallback: true` means the
# fallback will be tried even if the icu option is set to `auto`, but
# we cannot pass this option until Meson 0.59.0, because no wrap file
# is checked into git.
if not icu_dep.found()
icu_dep = dependency('icu-uc',
+ version: icu_min_version,
method: 'pkg-config',
required: get_option('icu'))
endif
@@ -172,8 +184,8 @@ endif
cairo_dep = null_dep
cairo_ft_dep = null_dep
if not get_option('cairo').disabled()
- cairo_dep = dependency('cairo', required: false)
- cairo_ft_dep = dependency('cairo-ft', required: false)
+ cairo_dep = dependency('cairo', version: cairo_min_version, required: false)
+ cairo_ft_dep = dependency('cairo-ft', version: cairo_min_version, required: false)
if (not cairo_dep.found() and
cpp.get_argument_syntax() == 'msvc' and
@@ -191,13 +203,13 @@ if not get_option('cairo').disabled()
# dependency cycle here because we have configured freetype2 above with
# harfbuzz support disabled, so when cairo will lookup freetype2 dependency
# it will be forced to use that one.
- cairo_dep = dependency('cairo', required: get_option('cairo'))
+ cairo_dep = dependency('cairo', version: cairo_min_version, required: get_option('cairo'))
cairo_ft_required = get_option('cairo').enabled() and get_option('freetype').enabled()
- cairo_ft_dep = dependency('cairo-ft', required: cairo_ft_required)
+ cairo_ft_dep = dependency('cairo-ft', version: cairo_min_version, required: cairo_ft_required)
endif
endif
-chafa_dep = dependency('chafa', version: '>= 1.6.0', required: get_option('chafa'))
+chafa_dep = dependency('chafa', version: chafa_min_version, required: get_option('chafa'))
conf = configuration_data()
incconfig = include_directories('.')
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh
index 475e6d74d1e..317b96c714b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh
@@ -663,21 +663,16 @@ struct GDEFVersion1_2
auto *out = c->serializer->start_embed (*this);
if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
- out->version.major = version.major;
- out->version.minor = version.minor;
- bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true);
- bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this);
- bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true);
-
- bool subset_markglyphsetsdef = false;
+ // Push var store first (if it's needed) so that it's last in the
+ // serialization order. Some font consumers assume that varstore runs to
+ // the end of the GDEF table.
+ // See: https://github.com/harfbuzz/harfbuzz/issues/4636
auto snapshot_version0 = c->serializer->snapshot ();
- if (version.to_int () >= 0x00010002u)
- {
- if (unlikely (!c->serializer->embed (markGlyphSetsDef))) return_trace (false);
- subset_markglyphsetsdef = out->markGlyphSetsDef.serialize_subset (c, markGlyphSetsDef, this);
- }
+ if (unlikely (version.to_int () >= 0x00010002u && !c->serializer->embed (markGlyphSetsDef)))
+ return_trace (false);
bool subset_varstore = false;
+ unsigned varstore_index = (unsigned) -1;
auto snapshot_version2 = c->serializer->snapshot ();
if (version.to_int () >= 0x00010003u)
{
@@ -690,35 +685,58 @@ struct GDEFVersion1_2
{
item_variations_t item_vars;
if (item_vars.instantiate (this+varStore, c->plan, true, true,
- c->plan->gdef_varstore_inner_maps.as_array ()))
+ c->plan->gdef_varstore_inner_maps.as_array ())) {
subset_varstore = out->varStore.serialize_serialize (c->serializer,
item_vars.has_long_word (),
c->plan->axis_tags,
item_vars.get_region_list (),
item_vars.get_vardata_encodings ());
+ varstore_index = c->serializer->last_added_child_index();
+ }
remap_varidx_after_instantiation (item_vars.get_varidx_map (),
c->plan->layout_variation_idx_delta_map);
}
}
else
+ {
subset_varstore = out->varStore.serialize_subset (c, varStore, this, c->plan->gdef_varstore_inner_maps.as_array ());
+ varstore_index = c->serializer->last_added_child_index();
+ }
+ }
+
+ out->version.major = version.major;
+ out->version.minor = version.minor;
+
+ if (!subset_varstore && version.to_int () >= 0x00010002u) {
+ c->serializer->revert (snapshot_version2);
}
+ bool subset_markglyphsetsdef = false;
+ if (version.to_int () >= 0x00010002u)
+ {
+ subset_markglyphsetsdef = out->markGlyphSetsDef.serialize_subset (c, markGlyphSetsDef, this);
+ }
if (subset_varstore)
{
out->version.minor = 3;
c->plan->has_gdef_varstore = true;
} else if (subset_markglyphsetsdef) {
- out->version.minor = 2;
- c->serializer->revert (snapshot_version2);
+ out->version.minor = 2;
} else {
out->version.minor = 0;
c->serializer->revert (snapshot_version0);
}
+ bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true);
+ bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this);
+ bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true);
bool subset_ligcaretlist = out->ligCaretList.serialize_subset (c, ligCaretList, this);
+ if (subset_varstore && varstore_index != (unsigned) -1) {
+ c->serializer->repack_last(varstore_index);
+ }
+
return_trace (subset_glyphclassdef || subset_attachlist ||
subset_ligcaretlist || subset_markattachclassdef ||
(out->version.to_int () >= 0x00010002u && subset_markglyphsetsdef) ||
@@ -1013,7 +1031,7 @@ struct GDEF
if (!has_var_store ()) return;
const ItemVariationStore &var_store = get_var_store ();
float *store_cache = var_store.create_cache ();
-
+
unsigned new_major = 0, new_minor = 0;
unsigned last_major = (layout_variation_indices->get_min ()) >> 16;
for (unsigned idx : layout_variation_indices->iter ())
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
index 934c6c21294..d621a7cc55d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
@@ -309,6 +309,7 @@ hb_buffer_t::clear ()
deallocate_var_all ();
serial = 0;
+ random_state = 1;
scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
}
@@ -1359,6 +1360,49 @@ hb_buffer_get_not_found_glyph (const hb_buffer_t *buffer)
return buffer->not_found;
}
+/**
+ * hb_buffer_set_random_state:
+ * @buffer: An #hb_buffer_t
+ * @state: the new random state
+ *
+ * Sets the random state of the buffer. The state changes
+ * every time a glyph uses randomness (eg. the `rand`
+ * OpenType feature). This function together with
+ * hb_buffer_get_random_state() allow for transferring
+ * the current random state to a subsequent buffer, to
+ * get better randomness distribution.
+ *
+ * Defaults to 1 and when buffer contents are cleared.
+ * A value of 0 disables randomness during shaping.
+ *
+ * Since: 8.4.0
+ **/
+void
+hb_buffer_set_random_state (hb_buffer_t *buffer,
+ unsigned state)
+{
+ if (unlikely (hb_object_is_immutable (buffer)))
+ return;
+
+ buffer->random_state = state;
+}
+
+/**
+ * hb_buffer_get_random_state:
+ * @buffer: An #hb_buffer_t
+ *
+ * See hb_buffer_set_random_state().
+ *
+ * Return value:
+ * The @buffer random state
+ *
+ * Since: 8.4.0
+ **/
+unsigned
+hb_buffer_get_random_state (const hb_buffer_t *buffer)
+{
+ return buffer->random_state;
+}
/**
* hb_buffer_clear_contents:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
index 3573127ff00..f75fe96b214 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
@@ -487,6 +487,12 @@ hb_buffer_set_not_found_glyph (hb_buffer_t *buffer,
HB_EXTERN hb_codepoint_t
hb_buffer_get_not_found_glyph (const hb_buffer_t *buffer);
+HB_EXTERN void
+hb_buffer_set_random_state (hb_buffer_t *buffer,
+ unsigned state);
+
+HB_EXTERN unsigned
+hb_buffer_get_random_state (const hb_buffer_t *buffer);
/*
* Content API.
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
index f04ad58f116..0a198722d62 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
@@ -116,6 +116,7 @@ struct hb_buffer_t
uint8_t allocated_var_bits;
uint8_t serial;
+ uint32_t random_state;
hb_buffer_scratch_flags_t scratch_flags; /* Have space-fallback, etc. */
unsigned int max_len; /* Maximum allowed len. */
int max_ops; /* Maximum allowed operations. */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
index dfdefc627e9..533de915627 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
@@ -49,8 +49,8 @@
#if defined (_AIX)
# include <sys/inttypes.h>
-#elif defined (_MSC_VER) && _MSC_VER < 1800
-/* VS 2013 (_MSC_VER 1800) has inttypes.h */
+#elif defined (_MSC_VER) && _MSC_VER < 1600
+/* VS 2010 (_MSC_VER 1600) has stdint.h */
typedef __int8 int8_t;
typedef unsigned __int8 uint8_t;
typedef __int16 int16_t;
@@ -59,6 +59,9 @@ typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
+#elif defined (_MSC_VER) && _MSC_VER < 1800
+/* VS 2013 (_MSC_VER 1800) has inttypes.h */
+# include <stdint.h>
#else
# include <inttypes.h>
#endif
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
index 162179d08a7..c65ea32b8a0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
@@ -723,7 +723,6 @@ struct hb_ot_apply_context_t :
bool auto_zwj = true;
bool per_syllable = false;
bool random = false;
- uint32_t random_state = 1;
unsigned new_syllables = (unsigned) -1;
signed last_base = -1; // GPOS uses
@@ -788,8 +787,8 @@ struct hb_ot_apply_context_t :
uint32_t random_number ()
{
/* http://www.cplusplus.com/reference/random/minstd_rand/ */
- random_state = random_state * 48271 % 2147483647;
- return random_state;
+ buffer->random_state = buffer->random_state * 48271 % 2147483647;
+ return buffer->random_state;
}
bool match_properties_mark (hb_codepoint_t glyph,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
index 8c2e696f56c..43b58d9bbf9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
@@ -223,7 +223,7 @@ struct OS2
}
}
- return num ? (unsigned) roundf (total_width / num) : 0;
+ return num ? (unsigned) roundf ((double) total_width / (double) num) : 0;
}
bool subset (hb_subset_context_t *c) const
@@ -284,12 +284,12 @@ struct OS2
os2_prime->usWidthClass = width_class;
}
- if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
- return_trace (true);
-
os2_prime->usFirstCharIndex = hb_min (0xFFFFu, c->plan->unicodes.get_min ());
os2_prime->usLastCharIndex = hb_min (0xFFFFu, c->plan->unicodes.get_max ());
+ if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
+ return_trace (true);
+
_update_unicode_ranges (&c->plan->unicodes, os2_prime->ulUnicodeRange);
return_trace (true);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
index 90f596ae79d..148830022ef 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
@@ -155,7 +155,7 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
#endif
bool has_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
if (false)
- ;
+ {}
#ifndef HB_NO_AAT_SHAPE
/* Prefer GPOS over kerx if GSUB is present;
* https://github.com/harfbuzz/harfbuzz/issues/3008 */
@@ -167,15 +167,16 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
if (!plan.apply_kerx && (!has_gpos_kern || !plan.apply_gpos))
{
+ if (false) {}
#ifndef HB_NO_AAT_SHAPE
- if (has_kerx)
+ else if (has_kerx)
plan.apply_kerx = true;
- else
#endif
#ifndef HB_NO_OT_KERN
- if (hb_ot_layout_has_kerning (face))
+ else if (hb_ot_layout_has_kerning (face))
plan.apply_kern = true;
#endif
+ else {}
}
plan.apply_fallback_kern = !(plan.apply_gpos || plan.apply_kerx || plan.apply_kern);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh
index 73634e6b933..e988451eb36 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh
@@ -91,6 +91,26 @@ struct hb_serialize_context_t
}
#endif
+ bool add_virtual_link (objidx_t objidx)
+ {
+ if (!objidx)
+ return false;
+
+ auto& link = *virtual_links.push ();
+ if (virtual_links.in_error ())
+ return false;
+
+ link.objidx = objidx;
+ // Remaining fields were previously zero'd by push():
+ // link.width = 0;
+ // link.is_signed = 0;
+ // link.whence = 0;
+ // link.position = 0;
+ // link.bias = 0;
+
+ return true;
+ }
+
friend void swap (object_t& a, object_t& b) noexcept
{
hb_swap (a.head, b.head);
@@ -469,16 +489,40 @@ struct hb_serialize_context_t
assert (current);
- auto& link = *current->virtual_links.push ();
- if (current->virtual_links.in_error ())
+ if (!current->add_virtual_link(objidx))
err (HB_SERIALIZE_ERROR_OTHER);
+ }
- link.width = 0;
- link.objidx = objidx;
- link.is_signed = 0;
- link.whence = 0;
- link.position = 0;
- link.bias = 0;
+ objidx_t last_added_child_index() const {
+ if (unlikely (in_error ())) return (objidx_t) -1;
+
+ assert (current);
+ if (!bool(current->real_links)) {
+ return (objidx_t) -1;
+ }
+
+ return current->real_links[current->real_links.length - 1].objidx;
+ }
+
+ // For the current object ensure that the sub-table bytes for child objidx are always placed
+ // after the subtable bytes for any other existing children. This only ensures that the
+ // repacker will not move the target subtable before the other children
+ // (by adding virtual links). It is up to the caller to ensure the initial serialization
+ // order is correct.
+ void repack_last(objidx_t objidx) {
+ if (unlikely (in_error ())) return;
+
+ if (!objidx)
+ return;
+
+ assert (current);
+ for (auto& l : current->real_links) {
+ if (l.objidx == objidx) {
+ continue;
+ }
+
+ packed[l.objidx]->add_virtual_link(objidx);
+ }
}
template <typename T>
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc
index a70b7666465..a8b91879a43 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc
@@ -240,7 +240,7 @@ acquire_shape_plan (hb_face_t *face,
goto fail;
}
- func = wasm_runtime_lookup_function (module_inst, "shape_plan_create", nullptr);
+ func = wasm_runtime_lookup_function (module_inst, "shape_plan_create");
if (func)
{
wasm_val_t results[1];
@@ -297,7 +297,7 @@ release_shape_plan (const hb_wasm_face_data_t *face_data,
if (plan->wasm_shape_planptr)
{
- auto *func = wasm_runtime_lookup_function (module_inst, "shape_plan_destroy", nullptr);
+ auto *func = wasm_runtime_lookup_function (module_inst, "shape_plan_destroy");
if (func)
{
wasm_val_t arguments[1];
@@ -395,7 +395,7 @@ retry:
goto fail;
}
- func = wasm_runtime_lookup_function (module_inst, "shape", nullptr);
+ func = wasm_runtime_lookup_function (module_inst, "shape");
if (unlikely (!func))
{
DEBUG_MSG (WASM, module_inst, "Shape function not found.");
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc
index 7f57d8eac1d..7f89fbfa32a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc
@@ -433,16 +433,13 @@ struct MarkBasePosBuffers
}
};
-
-
-
-
static void run_resolve_overflow_test (const char* name,
hb_serialize_context_t& overflowing,
hb_serialize_context_t& expected,
unsigned num_iterations = 0,
bool recalculate_extensions = false,
- hb_tag_t tag = HB_TAG ('G', 'S', 'U', 'B'))
+ hb_tag_t tag = HB_TAG ('G', 'S', 'U', 'B'),
+ bool check_binary_equivalence = false)
{
printf (">>> Testing overflowing resolution for %s\n",
name);
@@ -452,6 +449,10 @@ static void run_resolve_overflow_test (const char* name,
graph_t expected_graph (expected.object_graph ());
if (graph::will_overflow (expected_graph))
{
+ if (check_binary_equivalence) {
+ printf("when binary equivalence checking is enabled, the expected graph cannot overflow.");
+ assert(!check_binary_equivalence);
+ }
expected_graph.assign_spaces ();
expected_graph.sort_shortest_distance ();
}
@@ -464,12 +465,27 @@ static void run_resolve_overflow_test (const char* name,
graph));
// Check the graphs can be serialized.
- hb_blob_t* out = graph::serialize (graph);
- assert (out);
- hb_blob_destroy (out);
- out = graph::serialize (expected_graph);
- assert (out);
- hb_blob_destroy (out);
+ hb_blob_t* out1 = graph::serialize (graph);
+ assert (out1);
+ hb_blob_t* out2 = graph::serialize (expected_graph);
+ assert (out2);
+ if (check_binary_equivalence) {
+ unsigned l1, l2;
+ const char* d1 = hb_blob_get_data(out1, &l1);
+ const char* d2 = hb_blob_get_data(out2, &l2);
+
+ bool match = (l1 == l2) && (memcmp(d1, d2, l1) == 0);
+ if (!match) {
+ printf("## Result:\n");
+ graph.print();
+ printf("## Expected:\n");
+ expected_graph.print();
+ assert(match);
+ }
+ }
+
+ hb_blob_destroy (out1);
+ hb_blob_destroy (out2);
// Check the graphs are equivalent
graph.normalize ();
@@ -780,6 +796,54 @@ populate_serializer_with_isolation_overflow_spaces (hb_serialize_context_t* c)
}
static void
+populate_serializer_with_repack_last (hb_serialize_context_t* c, bool with_overflow)
+{
+ std::string large_string(70000, 'c');
+ c->start_serialize<char> ();
+ c->push();
+
+ // Obj E
+ unsigned obj_e_1, obj_e_2;
+ if (with_overflow) {
+ obj_e_1 = add_object("a", 1, c);
+ obj_e_2 = obj_e_1;
+ } else {
+ obj_e_2 = add_object("a", 1, c);
+ }
+
+ // Obj D
+ c->push();
+ add_offset(obj_e_2, c);
+ extend(large_string.c_str(), 30000, c);
+ unsigned obj_d = c->pop_pack(false);
+
+ add_offset(obj_d, c);
+ assert(c->last_added_child_index() == obj_d);
+
+ if (!with_overflow) {
+ obj_e_1 = add_object("a", 1, c);
+ }
+
+ // Obj C
+ c->push();
+ add_offset(obj_e_1, c);
+ extend(large_string.c_str(), 40000, c);
+ unsigned obj_c = c->pop_pack(false);
+
+ add_offset(obj_c, c);
+
+ // Obj B
+ unsigned obj_b = add_object("b", 1, c);
+ add_offset(obj_b, c);
+
+ // Obj A
+ c->repack_last(obj_d);
+ c->pop_pack(false);
+
+ c->end_serialize();
+}
+
+static void
populate_serializer_spaces (hb_serialize_context_t* c, bool with_overflow)
{
std::string large_string(70000, 'a');
@@ -2167,6 +2231,31 @@ test_shared_node_with_virtual_links ()
free(buffer);
}
+static void
+test_repack_last ()
+{
+ size_t buffer_size = 200000;
+ void* buffer = malloc (buffer_size);
+ assert (buffer);
+ hb_serialize_context_t c (buffer, buffer_size);
+ populate_serializer_with_repack_last (&c, true);
+
+ void* expected_buffer = malloc (buffer_size);
+ assert (expected_buffer);
+ hb_serialize_context_t e (expected_buffer, buffer_size);
+ populate_serializer_with_repack_last (&e, false);
+
+ run_resolve_overflow_test ("test_repack_last",
+ c,
+ e,
+ 20,
+ false,
+ HB_TAG('a', 'b', 'c', 'd'),
+ true);
+
+ free (buffer);
+ free (expected_buffer);
+}
// TODO(garretrieger): update will_overflow tests to check the overflows array.
// TODO(garretrieger): add tests for priority raising.
@@ -2195,6 +2284,7 @@ main (int argc, char **argv)
test_duplicate_leaf ();
test_duplicate_interior ();
test_virtual_link ();
+ test_repack_last();
test_shared_node_with_virtual_links ();
test_resolve_with_extension_promotion ();
test_resolve_with_shared_extension_promotion ();
diff --git a/Build/source/libs/harfbuzz/version.ac b/Build/source/libs/harfbuzz/version.ac
index 07ae79954c3..9193d66817b 100644
--- a/Build/source/libs/harfbuzz/version.ac
+++ b/Build/source/libs/harfbuzz/version.ac
@@ -8,4 +8,4 @@ dnl
dnl --------------------------------------------------------
dnl
dnl m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [8.3.1])
+m4_define([harfbuzz_version], [8.4.0])