texlive[76191] Build/source/libs: harfbuzz 11.4.5
commits+kakuto at tug.org
commits+kakuto at tug.org
Sun Aug 31 00:43:21 CEST 2025
Revision: 76191
https://tug.org/svn/texlive?view=revision&revision=76191
Author: kakuto
Date: 2025-08-31 00:43:20 +0200 (Sun, 31 Aug 2025)
Log Message:
-----------
harfbuzz 11.4.5
Modified Paths:
--------------
trunk/Build/source/libs/README
trunk/Build/source/libs/harfbuzz/ChangeLog
trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
trunk/Build/source/libs/harfbuzz/configure
trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GPOS/GPOS.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh
trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/rust/Cargo.toml
trunk/Build/source/libs/harfbuzz/version.ac
Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/README 2025-08-30 22:43:20 UTC (rev 76191)
@@ -28,7 +28,7 @@
https://sourceforge.net/projects/silgraphite/files/graphite2/
(requires C++11)
-harfbuzz 11.4.4 - checked 26aug25
+harfbuzz 11.4.5 - checked 31aug25
https://github.com/harfbuzz/harfbuzz/releases/latest
icu 76.1 - checked 27oct24 (requires C++17, e.g., g++13)
Modified: trunk/Build/source/libs/harfbuzz/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/ChangeLog 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/ChangeLog 2025-08-30 22:43:20 UTC (rev 76191)
@@ -1,3 +1,8 @@
+2025-08-31 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
+
+ Import harfbuzz-11.4.5.
+ * version.ac: Adjusted.
+
2025-08-26 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
Import harfbuzz-11.4.4.
Modified: trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog 2025-08-30 22:43:20 UTC (rev 76191)
@@ -1,3 +1,8 @@
+2025-08-31 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
+
+ Imported harfbuzz-11.4.5 source tree from:
+ https://github.com/harfbuzz/harfbuzz/releases/download/11.4.5/
+
2025-08-26 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
Imported harfbuzz-11.4.4 source tree from:
Modified: trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes 2025-08-30 22:43:20 UTC (rev 76191)
@@ -1,5 +1,5 @@
-Changes applied to the harfbuzz-11.4.4/ tree as obtained from:
- https://github.com/harfbuzz/harfbuzz/releases/download/11.4.4/
+Changes applied to the harfbuzz-11.4.5/ tree as obtained from:
+ https://github.com/harfbuzz/harfbuzz/releases/download/11.4.5/
Removed:
.clang-format
Modified: trunk/Build/source/libs/harfbuzz/configure
===================================================================
--- trunk/Build/source/libs/harfbuzz/configure 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/configure 2025-08-30 22:43:20 UTC (rev 76191)
@@ -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) 11.4.4.
+# Generated by GNU Autoconf 2.72 for harfbuzz (TeX Live) 11.4.5.
#
# Report bugs to <tex-k at tug.org>.
#
@@ -604,8 +604,8 @@
# Identity of this package.
PACKAGE_NAME='harfbuzz (TeX Live)'
PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='11.4.4'
-PACKAGE_STRING='harfbuzz (TeX Live) 11.4.4'
+PACKAGE_VERSION='11.4.5'
+PACKAGE_STRING='harfbuzz (TeX Live) 11.4.5'
PACKAGE_BUGREPORT='tex-k at tug.org'
PACKAGE_URL=''
@@ -1341,7 +1341,7 @@
# 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) 11.4.4 to adapt to many kinds of systems.
+'configure' configures harfbuzz (TeX Live) 11.4.5 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1413,7 +1413,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of harfbuzz (TeX Live) 11.4.4:";;
+ short | recursive ) echo "Configuration of harfbuzz (TeX Live) 11.4.5:";;
esac
cat <<\_ACEOF
@@ -1518,7 +1518,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-harfbuzz (TeX Live) configure 11.4.4
+harfbuzz (TeX Live) configure 11.4.5
generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2075,7 +2075,7 @@
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 11.4.4, which was
+It was created by harfbuzz (TeX Live) $as_me 11.4.5, which was
generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -5259,7 +5259,7 @@
# Define the identity of the package.
PACKAGE='harfbuzz--tex-live-'
- VERSION='11.4.4'
+ VERSION='11.4.5'
# Some tools Automake needs.
@@ -5573,8 +5573,8 @@
HB_VERSION_MAJOR=11
HB_VERSION_MINOR=4
-HB_VERSION_MICRO=4
-HB_VERSION=11.4.4
+HB_VERSION_MICRO=5
+HB_VERSION=11.4.5
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -9426,7 +9426,7 @@
# 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 11.4.4, which was
+This file was extended by harfbuzz (TeX Live) $as_me 11.4.5, which was
generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9494,7 +9494,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-harfbuzz (TeX Live) config.status 11.4.4
+harfbuzz (TeX Live) config.status 11.4.5
configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\"
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS 2025-08-30 22:43:20 UTC (rev 76191)
@@ -1,3 +1,9 @@
+Overview of changes leading to 11.4.5
+Saturday, August 30, 2025
+=====================================
+* Bug fixes for “AAT” shaping, and other shaping micro optimizations.
+
+
Overview of changes leading to 11.4.4
Tuesday, August 26, 2025
=====================================
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build 2025-08-30 22:43:20 UTC (rev 76191)
@@ -1,6 +1,6 @@
project('harfbuzz', ['c', 'cpp'],
meson_version: '>= 0.60.0',
- version: '11.4.4',
+ version: '11.4.5',
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
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GPOS/GPOS.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GPOS/GPOS.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GPOS/GPOS.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -80,9 +80,8 @@
{
/* Adjusts offsets of attached glyphs (both cursive and mark) to accumulate
* offset of glyph they are attached to. */
- int chain = pos[i].attach_chain(), type = pos[i].attach_type();
- if (likely (!chain))
- return;
+ int chain = pos[i].attach_chain();
+ int type = pos[i].attach_type();
pos[i].attach_chain() = 0;
@@ -94,7 +93,8 @@
if (unlikely (!nesting_level))
return;
- propagate_attachment_offsets (pos, len, j, direction, nesting_level - 1);
+ if (pos[j].attach_chain())
+ propagate_attachment_offsets (pos, len, j, direction, nesting_level - 1);
assert (!!(type & GPOS_impl::ATTACH_TYPE_MARK) ^ !!(type & GPOS_impl::ATTACH_TYPE_CURSIVE));
@@ -149,8 +149,20 @@
/* Handle attachments */
if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
- for (unsigned i = 0; i < len; i++)
- propagate_attachment_offsets (pos, len, i, direction);
+ {
+ auto *pos = buffer->pos;
+ // https://github.com/harfbuzz/harfbuzz/issues/5514
+ if (HB_DIRECTION_IS_FORWARD (direction))
+ {
+ for (unsigned i = 0; i < len; i++)
+ if (pos[i].attach_chain())
+ propagate_attachment_offsets (pos, len, i, direction);
+ } else {
+ for (unsigned i = len; i-- > 0; )
+ if (pos[i].attach_chain())
+ propagate_attachment_offsets (pos, len, i, direction);
+ }
+ }
if (unlikely (font->slant_xy) &&
HB_DIRECTION_IS_HORIZONTAL (direction))
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -78,7 +78,10 @@
{
hb_bit_set_t *s = buffer_glyph_set.get_acquire ();
if (s && buffer_glyph_set.cmpexch (s, nullptr))
+ {
+ s->clear ();
return s;
+ }
s = (hb_bit_set_t *) hb_calloc (1, sizeof (hb_bit_set_t));
if (unlikely (!s))
@@ -125,9 +128,8 @@
const hb_sorted_vector_t<hb_aat_map_t::range_flags_t> *range_flags = nullptr;
bool using_buffer_glyph_set = false;
hb_bit_set_t *buffer_glyph_set = nullptr;
- const hb_bit_set_t *left_set = nullptr;
- const hb_bit_set_t *right_set = nullptr;
- const hb_bit_set_t *machine_glyph_set = nullptr;
+ const hb_bit_set_t *first_set = nullptr;
+ const hb_bit_set_t *second_set = nullptr;
hb_aat_class_cache_t *machine_class_cache = nullptr;
hb_mask_t subtable_flags = 0;
@@ -155,11 +157,11 @@
bool buffer_intersects_machine () const
{
if (likely (using_buffer_glyph_set))
- return buffer_glyph_set->intersects (*machine_glyph_set);
+ return buffer_glyph_set->intersects (*first_set);
// Faster for shorter buffers.
for (unsigned i = 0; i < buffer->len; i++)
- if (machine_glyph_set->has (buffer->info[i].codepoint))
+ if (first_set->has (buffer->info[i].codepoint))
return true;
return false;
}
@@ -638,6 +640,23 @@
glyphs.add_range (firstGlyph, firstGlyph + glyphCount - 1);
}
+ template <typename set_t, typename filter_t>
+ void collect_glyphs_filtered (set_t &glyphs, const filter_t &filter) const
+ {
+ if (unlikely (!glyphCount)) return;
+ if (firstGlyph == DELETED_GLYPH) return;
+ const HBUINT8 *p = valueArrayZ.arrayZ;
+ for (unsigned i = 0; i < glyphCount; i++)
+ {
+ unsigned int v = 0;
+ unsigned int count = valueSize;
+ for (unsigned int j = 0; j < count; j++)
+ v = (v << 8) | *p++;
+ if (filter (v))
+ glyphs.add (firstGlyph + i);
+ }
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -708,6 +727,7 @@
case 4: hb_barrier (); u.format4.collect_glyphs_filtered (glyphs, filter); return;
case 6: hb_barrier (); u.format6.collect_glyphs_filtered (glyphs, filter); return;
case 8: hb_barrier (); u.format8.collect_glyphs_filtered (glyphs, filter); return;
+ case 10: hb_barrier (); u.format10.collect_glyphs_filtered (glyphs, filter); return;
default:return;
}
}
@@ -837,11 +857,6 @@
STATE_START_OF_LINE = 1,
};
- template <typename set_t>
- void collect_glyphs (set_t &glyphs, unsigned num_glyphs) const
- {
- (this+classTable).collect_glyphs (glyphs, num_glyphs);
- }
template <typename set_t, typename table_t>
void collect_initial_glyphs (set_t &glyphs, unsigned num_glyphs, const table_t &table) const
{
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -120,12 +120,12 @@
}
template <typename set_t>
- void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ void collect_glyphs (set_t &first_set, set_t &second_set, unsigned num_glyphs) const
{
for (const KernPair& pair : pairs)
{
- left_set.add (pair.left);
- right_set.add (pair.right);
+ first_set.add (pair.left);
+ second_set.add (pair.right);
}
}
@@ -140,7 +140,7 @@
int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{
- if (!(*c->left_set)[left] || !(*c->right_set)[right]) return 0;
+ if (!(*c->first_set)[left] || !(*c->second_set)[right]) return 0;
return table.get_kerning (left, right, c);
}
};
@@ -396,10 +396,10 @@
}
template <typename set_t>
- void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ void collect_glyphs (set_t &first_set, set_t &second_set, unsigned num_glyphs) const
{
- machine.collect_initial_glyphs (left_set, num_glyphs, *this);
- //machine.collect_glyphs (right_set, num_glyphs); // right_set is unused for machine kerning
+ machine.collect_initial_glyphs (first_set, num_glyphs, *this);
+ //machine.collect_glyphs (second_set, num_glyphs); // second_set is unused for machine kerning
}
protected:
@@ -451,10 +451,10 @@
}
template <typename set_t>
- void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ void collect_glyphs (set_t &first_set, set_t &second_set, unsigned num_glyphs) const
{
- (this+leftClassTable).collect_glyphs (left_set, num_glyphs);
- (this+rightClassTable).collect_glyphs (right_set, num_glyphs);
+ (this+leftClassTable).collect_glyphs (first_set, num_glyphs);
+ (this+rightClassTable).collect_glyphs (second_set, num_glyphs);
}
struct accelerator_t
@@ -468,7 +468,7 @@
int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{
- if (!(*c->left_set)[left] || !(*c->right_set)[right]) return 0;
+ if (!(*c->first_set)[left] || !(*c->second_set)[right]) return 0;
return table.get_kerning (left, right, c);
}
};
@@ -671,10 +671,10 @@
}
template <typename set_t>
- void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ void collect_glyphs (set_t &first_set, set_t &second_set, unsigned num_glyphs) const
{
- machine.collect_initial_glyphs (left_set, num_glyphs, *this);
- //machine.collect_glyphs (right_set, num_glyphs); // right_set is unused for machine kerning
+ machine.collect_initial_glyphs (first_set, num_glyphs, *this);
+ //machine.collect_glyphs (second_set, num_glyphs); // second_set is unused for machine kerning
}
protected:
@@ -762,19 +762,19 @@
}
template <typename set_t>
- void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ void collect_glyphs (set_t &first_set, set_t &second_set, unsigned num_glyphs) const
{
if (is_long ())
{
const auto &t = u.l;
- (this+t.rowIndexTable).collect_glyphs (left_set, num_glyphs);
- (this+t.columnIndexTable).collect_glyphs (right_set, num_glyphs);
+ (this+t.rowIndexTable).collect_glyphs (first_set, num_glyphs);
+ (this+t.columnIndexTable).collect_glyphs (second_set, num_glyphs);
}
else
{
const auto &t = u.s;
- (this+t.rowIndexTable).collect_glyphs (left_set, num_glyphs);
- (this+t.columnIndexTable).collect_glyphs (right_set, num_glyphs);
+ (this+t.rowIndexTable).collect_glyphs (first_set, num_glyphs);
+ (this+t.columnIndexTable).collect_glyphs (second_set, num_glyphs);
}
}
@@ -789,7 +789,7 @@
int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{
- if (!(*c->left_set)[left] || !(*c->right_set)[right]) return 0;
+ if (!(*c->first_set)[left] || !(*c->second_set)[right]) return 0;
return table.get_kerning (left, right, c);
}
};
@@ -878,15 +878,15 @@
}
template <typename set_t>
- void collect_glyphs (set_t &left_set, set_t &right_set, unsigned num_glyphs) const
+ void collect_glyphs (set_t &first_set, set_t &second_set, unsigned num_glyphs) const
{
unsigned int subtable_type = get_type ();
switch (subtable_type) {
- case 0: u.format0.collect_glyphs (left_set, right_set, num_glyphs); return;
- case 1: u.format1.collect_glyphs (left_set, right_set, num_glyphs); return;
- case 2: u.format2.collect_glyphs (left_set, right_set, num_glyphs); return;
- case 4: u.format4.collect_glyphs (left_set, right_set, num_glyphs); return;
- case 6: u.format6.collect_glyphs (left_set, right_set, num_glyphs); return;
+ case 0: u.format0.collect_glyphs (first_set, second_set, num_glyphs); return;
+ case 1: u.format1.collect_glyphs (first_set, second_set, num_glyphs); return;
+ case 2: u.format2.collect_glyphs (first_set, second_set, num_glyphs); return;
+ case 4: u.format4.collect_glyphs (first_set, second_set, num_glyphs); return;
+ case 6: u.format6.collect_glyphs (first_set, second_set, num_glyphs); return;
default: return;
}
}
@@ -923,8 +923,8 @@
struct kern_subtable_accelerator_data_t
{
- hb_bit_set_t left_set;
- hb_bit_set_t right_set;
+ hb_bit_set_t first_set;
+ hb_bit_set_t second_set;
mutable hb_aat_class_cache_t class_cache;
};
@@ -1000,6 +1000,7 @@
typedef typename T::SubTable SubTable;
+ bool buffer_is_reversed = false;
bool ret = false;
bool seenCrossStream = false;
c->set_lookup_index (0);
@@ -1017,9 +1018,8 @@
if (HB_DIRECTION_IS_HORIZONTAL (c->buffer->props.direction) != st->u.header.is_horizontal ())
goto skip;
- c->left_set = &subtable_accel.left_set;
- c->right_set = &subtable_accel.right_set;
- c->machine_glyph_set = &subtable_accel.left_set;
+ c->first_set = &subtable_accel.first_set;
+ c->second_set = &subtable_accel.second_set;
c->machine_class_cache = &subtable_accel.class_cache;
if (!c->buffer_intersects_machine ())
@@ -1051,8 +1051,11 @@
}
}
- if (reverse)
+ if (reverse != buffer_is_reversed)
+ {
c->buffer->reverse ();
+ buffer_is_reversed = reverse;
+ }
{
/* See comment in sanitize() for conditional here. */
@@ -1060,9 +1063,6 @@
ret |= st->dispatch (c);
}
- if (reverse)
- c->buffer->reverse ();
-
(void) c->buffer->message (c->font, "end subtable %u", c->lookup_index);
skip:
@@ -1069,6 +1069,8 @@
st = &StructAfter<SubTable> (*st);
c->set_lookup_index (c->lookup_index + 1);
}
+ if (buffer_is_reversed)
+ c->buffer->reverse ();
return ret;
}
@@ -1133,7 +1135,7 @@
if (unlikely (accel_data.subtable_accels.in_error ()))
return accel_data;
- st->collect_glyphs (subtable_accel.left_set, subtable_accel.right_set, num_glyphs);
+ st->collect_glyphs (subtable_accel.first_set, subtable_accel.second_set, num_glyphs);
subtable_accel.class_cache.clear ();
st = &StructAfter<SubTable> (*st);
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -1156,6 +1156,7 @@
void apply (hb_aat_apply_context_t *c,
const hb_aat_layout_chain_accelerator_t *accel) const
{
+ bool buffer_is_reversed = false;
const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
unsigned int count = subtableCount;
for (unsigned int i = 0; i < count; i++)
@@ -1169,15 +1170,15 @@
hb_map ([subtable_flags] (const hb_aat_map_t::range_flags_t _) -> bool { return subtable_flags & (_.flags); })))
goto skip;
- c->subtable_flags = subtable_flags;
- c->machine_glyph_set = accel ? &accel->subtables[i].glyph_set : &Null(hb_bit_set_t);
- c->machine_class_cache = accel ? &accel->subtables[i].class_cache : nullptr;
-
if (!(coverage & ChainSubtable<Types>::AllDirections) &&
HB_DIRECTION_IS_VERTICAL (c->buffer->props.direction) !=
bool (coverage & ChainSubtable<Types>::Vertical))
goto skip;
+ c->subtable_flags = subtable_flags;
+ c->first_set = accel ? &accel->subtables[i].glyph_set : &Null(hb_bit_set_t);
+ c->machine_class_cache = accel ? &accel->subtables[i].class_cache : nullptr;
+
if (!c->buffer_intersects_machine ())
{
(void) c->buffer->message (c->font, "skipped chainsubtable %u because no glyph matches", c->lookup_index);
@@ -1219,22 +1220,24 @@
if (!c->buffer->message (c->font, "start chainsubtable %u", c->lookup_index))
goto skip;
- if (reverse)
+ if (reverse != buffer_is_reversed)
+ {
c->buffer->reverse ();
+ buffer_is_reversed = reverse;
+ }
subtable->apply (c);
- if (reverse)
- c->buffer->reverse ();
-
(void) c->buffer->message (c->font, "end chainsubtable %u", c->lookup_index);
- if (unlikely (!c->buffer->successful)) return;
+ if (unlikely (!c->buffer->successful)) break;
skip:
subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
c->set_lookup_index (c->lookup_index + 1);
}
+ if (buffer_is_reversed)
+ c->buffer->reverse ();
}
unsigned int get_size () const { return length; }
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -403,20 +403,12 @@
/* Adds glyph flags in mask to infos with clusters between start and end.
* The start index will be from out-buffer if from_out_buffer is true.
* If interior is true, then the cluster having the minimum value is skipped. */
- void _set_glyph_flags (hb_mask_t mask,
- unsigned start = 0,
- unsigned end = (unsigned) -1,
- bool interior = false,
- bool from_out_buffer = false)
+ void _set_glyph_flags_impl (hb_mask_t mask,
+ unsigned start,
+ unsigned end,
+ bool interior,
+ bool from_out_buffer)
{
- if (unlikely (end != (unsigned) -1 && end - start > 255))
- return;
-
- end = hb_min (end, len);
-
- if (interior && !from_out_buffer && end - start < 2)
- return;
-
scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
if (!from_out_buffer || !have_output)
@@ -455,6 +447,25 @@
}
}
+ HB_ALWAYS_INLINE
+ void _set_glyph_flags (hb_mask_t mask,
+ unsigned start = 0,
+ unsigned end = (unsigned) -1,
+ bool interior = false,
+ bool from_out_buffer = false)
+ {
+ if (unlikely (end != (unsigned) -1 && end - start > 255))
+ return;
+
+ end = hb_min (end, len);
+
+ if (interior && !from_out_buffer && end - start < 2)
+ return;
+
+ _set_glyph_flags_impl (mask, start, end, interior, from_out_buffer);
+ }
+
+
void unsafe_to_break (unsigned int start = 0, unsigned int end = -1)
{
_set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -70,7 +70,7 @@
continue;
}
- skippy_iter.reset (idx);
+ skippy_iter.reset_fast (idx);
unsigned unsafe_to;
if (!skippy_iter.next (&unsafe_to))
{
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -92,9 +92,10 @@
{
set_t set;
if (likely (glyphCount))
- set.add_range (0, glyphCount - 1);
- left_set.union_ (set);
- right_set.union_ (set);
+ {
+ left_set.add_range (0, num_glyphs - 1);
+ right_set.add_range (0, num_glyphs - 1);
+ }
}
protected:
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -410,18 +410,6 @@
return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & UPROPS_MASK_Cf_ZWJ);
}
static inline bool
-_hb_glyph_info_is_joiner (const hb_glyph_info_t *info)
-{
- return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & (UPROPS_MASK_Cf_ZWNJ|UPROPS_MASK_Cf_ZWJ));
-}
-static inline void
-_hb_glyph_info_flip_joiners (hb_glyph_info_t *info)
-{
- if (!_hb_glyph_info_is_unicode_format (info))
- return;
- info->unicode_props() ^= UPROPS_MASK_Cf_ZWNJ | UPROPS_MASK_Cf_ZWJ;
-}
-static inline bool
_hb_glyph_info_is_aat_deleted (const hb_glyph_info_t *info)
{
return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & UPROPS_MASK_Cf_AAT_DELETED);
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc 2025-08-30 22:43:20 UTC (rev 76191)
@@ -409,16 +409,13 @@
}
static inline void
-position_cluster (const hb_ot_shape_plan_t *plan,
- hb_font_t *font,
- hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- bool adjust_offsets_when_zeroing)
+position_cluster_impl (const hb_ot_shape_plan_t *plan,
+ hb_font_t *font,
+ hb_buffer_t *buffer,
+ unsigned int start,
+ unsigned int end,
+ bool adjust_offsets_when_zeroing)
{
- if (end - start < 2)
- return;
-
/* Find the base glyph */
hb_glyph_info_t *info = buffer->info;
for (unsigned int i = start; i < end; i++)
@@ -441,6 +438,20 @@
}
}
+static HB_ALWAYS_INLINE void
+position_cluster (const hb_ot_shape_plan_t *plan,
+ hb_font_t *font,
+ hb_buffer_t *buffer,
+ unsigned int start,
+ unsigned int end,
+ bool adjust_offsets_when_zeroing)
+{
+ if (end - start < 2)
+ return;
+
+ position_cluster_impl (plan, font, buffer, start, end, adjust_offsets_when_zeroing);
+}
+
void
_hb_ot_shape_fallback_mark_position (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc 2025-08-30 22:43:20 UTC (rev 76191)
@@ -788,7 +788,13 @@
unsigned int i = 0;
for (i = 0; i < count; i++)
if (unlikely (_hb_glyph_info_is_default_ignorable (&info[i])))
- pos[i].x_advance = pos[i].y_advance = pos[i].x_offset = pos[i].y_offset = 0;
+ {
+ pos[i].x_advance = pos[i].y_advance = 0;
+ if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
+ pos[i].x_offset = 0;
+ else
+ pos[i].y_offset = 0;
+ }
}
static void
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh 2025-08-30 22:43:20 UTC (rev 76191)
@@ -37,7 +37,7 @@
typedef uint8_t codepoint_t;
static constexpr unsigned max_len = 4;
- static const codepoint_t *
+ static inline const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end,
hb_codepoint_t *unicode,
@@ -106,7 +106,7 @@
return text;
}
- static const codepoint_t *
+ static inline const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start,
hb_codepoint_t *unicode,
@@ -185,7 +185,7 @@
typedef TCodepoint codepoint_t;
static constexpr unsigned max_len = 2;
- static const codepoint_t *
+ static inline const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end,
hb_codepoint_t *unicode,
@@ -217,7 +217,7 @@
return text;
}
- static const codepoint_t *
+ static inline const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start,
hb_codepoint_t *unicode,
@@ -294,7 +294,7 @@
typedef TCodepoint codepoint_t;
static constexpr unsigned max_len = 1;
- static const TCodepoint *
+ static inline const TCodepoint *
next (const TCodepoint *text,
const TCodepoint *end HB_UNUSED,
hb_codepoint_t *unicode,
@@ -306,7 +306,7 @@
return text;
}
- static const TCodepoint *
+ static inline const TCodepoint *
prev (const TCodepoint *text,
const TCodepoint *start HB_UNUSED,
hb_codepoint_t *unicode,
@@ -353,7 +353,7 @@
typedef uint8_t codepoint_t;
static constexpr unsigned max_len = 1;
- static const codepoint_t *
+ static inline const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end HB_UNUSED,
hb_codepoint_t *unicode,
@@ -363,7 +363,7 @@
return text;
}
- static const codepoint_t *
+ static inline const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start HB_UNUSED,
hb_codepoint_t *unicode,
@@ -405,7 +405,7 @@
typedef uint8_t codepoint_t;
static constexpr unsigned max_len = 1;
- static const codepoint_t *
+ static inline const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end HB_UNUSED,
hb_codepoint_t *unicode,
@@ -417,7 +417,7 @@
return text;
}
- static const codepoint_t *
+ static inline const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start HB_UNUSED,
hb_codepoint_t *unicode,
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/rust/Cargo.toml
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/rust/Cargo.toml 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/rust/Cargo.toml 2025-08-30 22:43:20 UTC (rev 76191)
@@ -5,7 +5,7 @@
[dependencies]
skrifa = { version = "0.*", optional = true }
-harfrust = { version = "0.1.2", optional = true }
+harfrust = { version = "0.2.0", optional = true }
# harfrust = { git = "https://github.com/harfbuzz/harfrust", optional = true }
[lib]
Modified: trunk/Build/source/libs/harfbuzz/version.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/version.ac 2025-08-30 21:18:29 UTC (rev 76190)
+++ trunk/Build/source/libs/harfbuzz/version.ac 2025-08-30 22:43:20 UTC (rev 76191)
@@ -8,4 +8,4 @@
dnl --------------------------------------------------------
dnl
dnl m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [11.4.4])
+m4_define([harfbuzz_version], [11.4.5])
More information about the tex-live-commits
mailing list.