mirror of https://github.com/qt/qtbase.git
Compare commits
13 Commits
d857cc6f21
...
524f8d69b4
Author | SHA1 | Date |
---|---|---|
|
524f8d69b4 | |
|
e6f8cc8598 | |
|
a22cbf33a0 | |
|
bff3127750 | |
|
676e3745f5 | |
|
2f91d024a7 | |
|
8cf3690ed0 | |
|
8825bcdbda | |
|
31a1276103 | |
|
5db6667780 | |
|
f773dd0bf4 | |
|
ac677df5df | |
|
dd0251190d |
|
@ -50,10 +50,10 @@ exists($$QMAKE_QT_CONFIG) {
|
|||
}
|
||||
EMCC_LFLAGS += -s INITIAL_MEMORY=$$INITIAL_MEMORY
|
||||
isEmpty(QT_WASM_MAXIMUM_MEMORY) {
|
||||
qtConfig(wasm-jspi) {
|
||||
MAXIMUM_MEMORY = 2GB # Avoid triggering Emscripten bug #23834
|
||||
contains(QMAKE_CFLAGS, -s MEMORY64=1) {
|
||||
MAXIMUM_MEMORY = 16GB
|
||||
} else {
|
||||
MAXIMUM_MEMORY = 4GB # 32-bit max
|
||||
MAXIMUM_MEMORY = 4GB
|
||||
}
|
||||
} else {
|
||||
MAXIMUM_MEMORY = $$QT_WASM_MAXIMUM_MEMORY
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
FreeType 2.14.0
|
||||
FreeType 2.14.1
|
||||
===============
|
||||
|
||||
Homepage: https://freetype.org
|
||||
|
@ -32,9 +32,9 @@ sites. Go to
|
|||
|
||||
and download one of the following files.
|
||||
|
||||
freetype-doc-2.14.0.tar.xz
|
||||
freetype-doc-2.14.0.tar.gz
|
||||
ftdoc2140.zip
|
||||
freetype-doc-2.14.1.tar.xz
|
||||
freetype-doc-2.14.1.tar.gz
|
||||
ftdoc2141.zip
|
||||
|
||||
To view the documentation online, go to
|
||||
|
||||
|
|
|
@ -1,3 +1,17 @@
|
|||
CHANGES BETWEEN 2.14.0 and 2.14.1 (2025-Sep-11)
|
||||
|
||||
I. IMPORTANT BUG FIXES
|
||||
|
||||
- This is an emergency release that fixes a couple of severe bugs
|
||||
introduced in version 2.14.0 and discovered right after the
|
||||
release; see issues #1349, #1353, #1354, #1355, and #1356 in our
|
||||
bug tracker at
|
||||
|
||||
https://gitlab.freedesktop.org/freetype/freetype/-/issues
|
||||
|
||||
|
||||
======================================================================
|
||||
|
||||
CHANGES BETWEEN 2.13.3 and 2.14.0 (2025-Sep-06)
|
||||
|
||||
I. IMPORTANT CHANGES
|
||||
|
|
|
@ -5178,7 +5178,7 @@ FT_BEGIN_HEADER
|
|||
*/
|
||||
#define FREETYPE_MAJOR 2
|
||||
#define FREETYPE_MINOR 14
|
||||
#define FREETYPE_PATCH 0
|
||||
#define FREETYPE_PATCH 1
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
|
||||
"Description": "FreeType is a freely available software library to render fonts.",
|
||||
"Homepage": "http://www.freetype.org",
|
||||
"Version": "2.14.0",
|
||||
"DownloadLocation": "https://download.savannah.gnu.org/releases/freetype/freetype-2.14.0.tar.gz",
|
||||
"Version": "2.14.1",
|
||||
"DownloadLocation": "https://download.savannah.gnu.org/releases/freetype/freetype-2.14.1.tar.gz",
|
||||
"PURL": [
|
||||
"pkg:github/freetype/freetype@VER-$<VERSION_DASHED>"
|
||||
],
|
||||
|
|
|
@ -1355,6 +1355,7 @@
|
|||
|
||||
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
|
||||
|
||||
if ( ft_hb_enabled( globals ) )
|
||||
{
|
||||
hb_font_t *hb_font;
|
||||
hb_face_t *hb_face;
|
||||
|
|
|
@ -649,6 +649,8 @@
|
|||
{
|
||||
FT_Error error;
|
||||
|
||||
FT_UInt real_lookupType = lookupType;
|
||||
|
||||
FT_Byte* subtable = table + FT_NEXT_USHORT( p );
|
||||
|
||||
|
||||
|
@ -657,11 +659,11 @@
|
|||
FT_Byte* q = subtable + 2;
|
||||
|
||||
|
||||
lookupType = FT_NEXT_USHORT( q );
|
||||
subtable += FT_PEEK_ULONG( q );
|
||||
real_lookupType = FT_NEXT_USHORT( q );
|
||||
subtable += FT_PEEK_ULONG( q );
|
||||
}
|
||||
|
||||
if ( lookupType == 1 )
|
||||
if ( real_lookupType == 1 )
|
||||
{
|
||||
FT_UInt format = FT_PEEK_USHORT( subtable );
|
||||
|
||||
|
|
|
@ -307,13 +307,16 @@
|
|||
FT_Bool is_variation_old = FT_IS_VARIATION( face );
|
||||
|
||||
|
||||
if ( error != -1 )
|
||||
{
|
||||
if ( error == -2 ) /* -2 means is_variable. */
|
||||
face->face_flags |= FT_FACE_FLAG_VARIATION;
|
||||
else
|
||||
face->face_flags &= ~FT_FACE_FLAG_VARIATION;
|
||||
}
|
||||
if ( error != -1 )
|
||||
{
|
||||
if ( error == -2 ) /* -2 means is_variable. */
|
||||
{
|
||||
face->face_flags |= FT_FACE_FLAG_VARIATION;
|
||||
error = FT_Err_Ok;
|
||||
}
|
||||
else
|
||||
face->face_flags &= ~FT_FACE_FLAG_VARIATION;
|
||||
}
|
||||
|
||||
if ( service_mm->construct_ps_name )
|
||||
{
|
||||
|
@ -485,13 +488,16 @@
|
|||
FT_Bool is_variation_old = FT_IS_VARIATION( face );
|
||||
|
||||
|
||||
if ( error != -1 )
|
||||
{
|
||||
if ( error == -2 ) /* -2 means is_variable. */
|
||||
face->face_flags |= FT_FACE_FLAG_VARIATION;
|
||||
else
|
||||
face->face_flags &= ~FT_FACE_FLAG_VARIATION;
|
||||
}
|
||||
if ( error != -1 )
|
||||
{
|
||||
if ( error == -2 ) /* -2 means is_variable. */
|
||||
{
|
||||
face->face_flags |= FT_FACE_FLAG_VARIATION;
|
||||
error = FT_Err_Ok;
|
||||
}
|
||||
else
|
||||
face->face_flags &= ~FT_FACE_FLAG_VARIATION;
|
||||
}
|
||||
|
||||
if ( service_mm->construct_ps_name )
|
||||
{
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
|
||||
#include<windows.h>
|
||||
|
||||
#define FT_VERSION 2,14,0,0
|
||||
#define FT_VERSION_STR "2.14.0"
|
||||
#define FT_VERSION 2,14,1,0
|
||||
#define FT_VERSION_STR "2.14.1"
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION FT_VERSION
|
||||
|
|
|
@ -7521,6 +7521,12 @@
|
|||
exec->func_round = (TT_Round_Func)Round_To_Grid;
|
||||
Compute_Funcs( exec );
|
||||
|
||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
|
||||
/* Reset IUP tracking bits in the backward compatibility mode. */
|
||||
/* See `ttinterp.h' for details. */
|
||||
exec->backward_compatibility &= ~0x3;
|
||||
#endif
|
||||
|
||||
/* some glyphs leave something on the stack, */
|
||||
/* so we clean it before a new execution. */
|
||||
exec->top = 0;
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
|
||||
"Description": "HarfBuzz is an OpenType text shaping engine.",
|
||||
"Homepage": "http://harfbuzz.org",
|
||||
"Version": "11.4.5",
|
||||
"DownloadLocation": "https://github.com/harfbuzz/harfbuzz/releases/tag/11.4.5",
|
||||
"Version": "11.5.0",
|
||||
"DownloadLocation": "https://github.com/harfbuzz/harfbuzz/releases/tag/11.5.0",
|
||||
"PURL": "pkg:github/harfbuzz/harfbuzz@$<VERSION>",
|
||||
"CPE": "cpe:2.3:a:harfbuzz_project:harfbuzz:$<VERSION>:*:*:*:*:*:*:*",
|
||||
"License": "MIT License",
|
||||
|
|
|
@ -110,17 +110,37 @@ propagate_attachment_offsets (hb_glyph_position_t *pos,
|
|||
pos[i].x_offset += pos[j].x_offset;
|
||||
pos[i].y_offset += pos[j].y_offset;
|
||||
|
||||
assert (j < i);
|
||||
if (HB_DIRECTION_IS_FORWARD (direction))
|
||||
for (unsigned int k = j; k < i; k++) {
|
||||
pos[i].x_offset -= pos[k].x_advance;
|
||||
pos[i].y_offset -= pos[k].y_advance;
|
||||
}
|
||||
else
|
||||
for (unsigned int k = j + 1; k < i + 1; k++) {
|
||||
pos[i].x_offset += pos[k].x_advance;
|
||||
pos[i].y_offset += pos[k].y_advance;
|
||||
}
|
||||
// i is the position of the mark; j is the base.
|
||||
if (j < i)
|
||||
{
|
||||
/* This is the common case: mark follows base.
|
||||
* And currently the only way in OpenType. */
|
||||
if (HB_DIRECTION_IS_FORWARD (direction))
|
||||
for (unsigned int k = j; k < i; k++) {
|
||||
pos[i].x_offset -= pos[k].x_advance;
|
||||
pos[i].y_offset -= pos[k].y_advance;
|
||||
}
|
||||
else
|
||||
for (unsigned int k = j + 1; k < i + 1; k++) {
|
||||
pos[i].x_offset += pos[k].x_advance;
|
||||
pos[i].y_offset += pos[k].y_advance;
|
||||
}
|
||||
}
|
||||
else // j > i
|
||||
{
|
||||
/* This can happen with `kerx`: a mark attaching
|
||||
* to a base after it in the logical order. */
|
||||
if (HB_DIRECTION_IS_FORWARD (direction))
|
||||
for (unsigned int k = i; k < j; k++) {
|
||||
pos[i].x_offset += pos[k].x_advance;
|
||||
pos[i].y_offset += pos[k].y_advance;
|
||||
}
|
||||
else
|
||||
for (unsigned int k = i + 1; k < j + 1; k++) {
|
||||
pos[i].x_offset -= pos[k].x_advance;
|
||||
pos[i].y_offset -= pos[k].y_advance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -126,12 +126,14 @@ struct hb_aat_apply_context_t :
|
|||
const OT::GDEF &gdef;
|
||||
bool has_glyph_classes;
|
||||
const hb_sorted_vector_t<hb_aat_map_t::range_flags_t> *range_flags = nullptr;
|
||||
hb_mask_t subtable_flags = 0;
|
||||
bool buffer_is_reversed = false;
|
||||
// Caches
|
||||
bool using_buffer_glyph_set = false;
|
||||
hb_bit_set_t *buffer_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;
|
||||
|
||||
/* Unused. For debug tracing only. */
|
||||
unsigned int lookup_index;
|
||||
|
@ -147,6 +149,12 @@ struct hb_aat_apply_context_t :
|
|||
|
||||
void set_lookup_index (unsigned int i) { lookup_index = i; }
|
||||
|
||||
void reverse_buffer ()
|
||||
{
|
||||
buffer->reverse ();
|
||||
buffer_is_reversed = !buffer_is_reversed;
|
||||
}
|
||||
|
||||
void setup_buffer_glyph_set ()
|
||||
{
|
||||
using_buffer_glyph_set = buffer->len >= 4 && buffer_glyph_set;
|
||||
|
|
|
@ -629,6 +629,8 @@ struct KerxSubTableFormat4
|
|||
}
|
||||
o.attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_MARK;
|
||||
o.attach_chain() = (int) mark - (int) buffer->idx;
|
||||
if (c->buffer_is_reversed)
|
||||
o.attach_chain() = -o.attach_chain();
|
||||
buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
|
||||
}
|
||||
|
||||
|
@ -1000,7 +1002,6 @@ struct KerxTable
|
|||
|
||||
typedef typename T::SubTable SubTable;
|
||||
|
||||
bool buffer_is_reversed = false;
|
||||
bool ret = false;
|
||||
bool seenCrossStream = false;
|
||||
c->set_lookup_index (0);
|
||||
|
@ -1051,11 +1052,8 @@ struct KerxTable
|
|||
}
|
||||
}
|
||||
|
||||
if (reverse != buffer_is_reversed)
|
||||
{
|
||||
c->buffer->reverse ();
|
||||
buffer_is_reversed = reverse;
|
||||
}
|
||||
if (reverse != c->buffer_is_reversed)
|
||||
c->reverse_buffer ();
|
||||
|
||||
{
|
||||
/* See comment in sanitize() for conditional here. */
|
||||
|
@ -1069,8 +1067,8 @@ struct KerxTable
|
|||
st = &StructAfter<SubTable> (*st);
|
||||
c->set_lookup_index (c->lookup_index + 1);
|
||||
}
|
||||
if (buffer_is_reversed)
|
||||
c->buffer->reverse ();
|
||||
if (c->buffer_is_reversed)
|
||||
c->reverse_buffer ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -1156,7 +1156,6 @@ struct Chain
|
|||
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++)
|
||||
|
@ -1220,11 +1219,8 @@ struct Chain
|
|||
if (!c->buffer->message (c->font, "start chainsubtable %u", c->lookup_index))
|
||||
goto skip;
|
||||
|
||||
if (reverse != buffer_is_reversed)
|
||||
{
|
||||
c->buffer->reverse ();
|
||||
buffer_is_reversed = reverse;
|
||||
}
|
||||
if (reverse != c->buffer_is_reversed)
|
||||
c->reverse_buffer ();
|
||||
|
||||
subtable->apply (c);
|
||||
|
||||
|
@ -1236,8 +1232,8 @@ struct Chain
|
|||
subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
|
||||
c->set_lookup_index (c->lookup_index + 1);
|
||||
}
|
||||
if (buffer_is_reversed)
|
||||
c->buffer->reverse ();
|
||||
if (c->buffer_is_reversed)
|
||||
c->reverse_buffer ();
|
||||
}
|
||||
|
||||
unsigned int get_size () const { return length; }
|
||||
|
|
|
@ -525,7 +525,19 @@ hb_buffer_t::set_masks (hb_mask_t value,
|
|||
hb_mask_t not_mask = ~mask;
|
||||
value &= mask;
|
||||
|
||||
max_ops -= len;
|
||||
if (unlikely (max_ops < 0))
|
||||
successful = false;
|
||||
|
||||
unsigned int count = len;
|
||||
|
||||
if (cluster_start == 0 && cluster_end == (unsigned int) -1)
|
||||
{
|
||||
for (unsigned int i = 0; i < count; i++)
|
||||
info[i].mask = (info[i].mask & not_mask) | value;
|
||||
return;
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < count; i++)
|
||||
if (cluster_start <= info[i].cluster && info[i].cluster < cluster_end)
|
||||
info[i].mask = (info[i].mask & not_mask) | value;
|
||||
|
@ -541,6 +553,10 @@ hb_buffer_t::merge_clusters_impl (unsigned int start,
|
|||
return;
|
||||
}
|
||||
|
||||
max_ops -= end - start;
|
||||
if (unlikely (max_ops < 0))
|
||||
successful = false;
|
||||
|
||||
unsigned int cluster = info[start].cluster;
|
||||
|
||||
for (unsigned int i = start + 1; i < end; i++)
|
||||
|
@ -574,6 +590,10 @@ hb_buffer_t::merge_out_clusters (unsigned int start,
|
|||
if (unlikely (end - start < 2))
|
||||
return;
|
||||
|
||||
max_ops -= end - start;
|
||||
if (unlikely (max_ops < 0))
|
||||
successful = false;
|
||||
|
||||
unsigned int cluster = out_info[start].cluster;
|
||||
|
||||
for (unsigned int i = start + 1; i < end; i++)
|
||||
|
|
|
@ -616,6 +616,10 @@ struct hb_buffer_t
|
|||
if (unlikely (start == end))
|
||||
return;
|
||||
|
||||
max_ops -= end - start;
|
||||
if (unlikely (max_ops < 0))
|
||||
successful = false;
|
||||
|
||||
unsigned cluster_first = infos[start].cluster;
|
||||
unsigned cluster_last = infos[end - 1].cluster;
|
||||
|
||||
|
|
|
@ -631,6 +631,9 @@ hb_script_get_horizontal_direction (hb_script_t script)
|
|||
/* Unicode-16.0 additions */
|
||||
case HB_SCRIPT_GARAY:
|
||||
|
||||
/* Unicode-17.0 additions */
|
||||
case HB_SCRIPT_SIDETIC:
|
||||
|
||||
return HB_DIRECTION_RTL;
|
||||
|
||||
|
||||
|
|
|
@ -2331,120 +2331,169 @@ struct delta_row_encoding_t
|
|||
{
|
||||
/* each byte represents a region, value is one of 0/1/2/4, which means bytes
|
||||
* needed for this region */
|
||||
hb_vector_t<uint8_t> chars;
|
||||
struct chars_t : hb_vector_t<uint8_t>
|
||||
{
|
||||
static chars_t get_row_chars (const hb_vector_t<int>& row)
|
||||
{
|
||||
chars_t ret;
|
||||
if (!ret.alloc (row.length)) return ret;
|
||||
|
||||
bool long_words = false;
|
||||
|
||||
/* 0/1/2 byte encoding */
|
||||
for (int i = row.length - 1; i >= 0; i--)
|
||||
{
|
||||
int v = row.arrayZ[i];
|
||||
if (v == 0)
|
||||
ret.push (0);
|
||||
else if (v > 32767 || v < -32768)
|
||||
{
|
||||
long_words = true;
|
||||
break;
|
||||
}
|
||||
else if (v > 127 || v < -128)
|
||||
ret.push (2);
|
||||
else
|
||||
ret.push (1);
|
||||
}
|
||||
|
||||
if (!long_words)
|
||||
return ret;
|
||||
|
||||
/* redo, 0/2/4 bytes encoding */
|
||||
ret.reset ();
|
||||
for (int i = row.length - 1; i >= 0; i--)
|
||||
{
|
||||
int v = row.arrayZ[i];
|
||||
if (v == 0)
|
||||
ret.push (0);
|
||||
else if (v > 32767 || v < -32768)
|
||||
ret.push (4);
|
||||
else
|
||||
ret.push (2);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
hb_bit_set_t get_columns ()
|
||||
{
|
||||
hb_bit_set_t cols;
|
||||
for (auto _ : + hb_enumerate (iter ()))
|
||||
{
|
||||
if (_.second)
|
||||
cols.add (_.first);
|
||||
}
|
||||
return cols;
|
||||
}
|
||||
|
||||
int cmp (const chars_t& other) const
|
||||
{
|
||||
return as_array ().cmp (other.as_array ());
|
||||
}
|
||||
|
||||
chars_t combine_chars (const chars_t& other) const
|
||||
{
|
||||
chars_t combined_chars;
|
||||
if (!combined_chars.alloc (length))
|
||||
return combined_chars;
|
||||
|
||||
for (unsigned idx = 0; idx < length; idx++)
|
||||
{
|
||||
uint8_t v = hb_max (arrayZ[idx], other.arrayZ[idx]);
|
||||
combined_chars.push (v);
|
||||
}
|
||||
return combined_chars;
|
||||
}
|
||||
|
||||
hb_pair_t<unsigned, unsigned> get_width ()
|
||||
{
|
||||
unsigned width = 0;
|
||||
unsigned columns = 0;
|
||||
for (unsigned i = 0; i < length; i++)
|
||||
{
|
||||
unsigned v = arrayZ[i];
|
||||
width += v;
|
||||
columns += (v != 0);
|
||||
}
|
||||
return hb_pair (width, columns);
|
||||
}
|
||||
|
||||
hb_pair_t<unsigned, unsigned> combine_width (const chars_t& other) const
|
||||
{
|
||||
unsigned combined_width = 0;
|
||||
unsigned combined_columns = 0;
|
||||
for (unsigned i = 0; i < length; i++)
|
||||
{
|
||||
unsigned v = hb_max (arrayZ[i], other.arrayZ[i]);
|
||||
combined_width += v;
|
||||
combined_columns += (v != 0);
|
||||
}
|
||||
return hb_pair (combined_width, combined_columns);
|
||||
}
|
||||
};
|
||||
|
||||
chars_t combine_chars (const delta_row_encoding_t& other_encoding) const { return chars.combine_chars (other_encoding.chars); }
|
||||
hb_pair_t<unsigned, unsigned> combine_width (const delta_row_encoding_t& other_encoding) const { return chars.combine_width (other_encoding.chars); }
|
||||
static chars_t get_row_chars (const hb_vector_t<int>& row) { return chars_t::get_row_chars (row); }
|
||||
|
||||
// Actual data
|
||||
|
||||
chars_t chars;
|
||||
unsigned width = 0;
|
||||
hb_vector_t<uint8_t> columns;
|
||||
unsigned overhead = 0;
|
||||
hb_vector_t<const hb_vector_t<int>*> items;
|
||||
|
||||
delta_row_encoding_t () = default;
|
||||
delta_row_encoding_t (hb_vector_t<uint8_t>&& chars_,
|
||||
delta_row_encoding_t (chars_t&& chars_,
|
||||
const hb_vector_t<int>* row = nullptr) :
|
||||
delta_row_encoding_t ()
|
||||
|
||||
{
|
||||
chars = std::move (chars_);
|
||||
width = get_width ();
|
||||
columns = get_columns ();
|
||||
overhead = get_chars_overhead (columns);
|
||||
auto _ = chars.get_width ();
|
||||
width = _.first;
|
||||
overhead = get_chars_overhead (_.second);
|
||||
if (row) items.push (row);
|
||||
}
|
||||
|
||||
bool is_empty () const
|
||||
{ return !items; }
|
||||
|
||||
static hb_vector_t<uint8_t> get_row_chars (const hb_vector_t<int>& row)
|
||||
{
|
||||
hb_vector_t<uint8_t> ret;
|
||||
if (!ret.alloc (row.length)) return ret;
|
||||
|
||||
bool long_words = false;
|
||||
|
||||
/* 0/1/2 byte encoding */
|
||||
for (int i = row.length - 1; i >= 0; i--)
|
||||
{
|
||||
int v = row.arrayZ[i];
|
||||
if (v == 0)
|
||||
ret.push (0);
|
||||
else if (v > 32767 || v < -32768)
|
||||
{
|
||||
long_words = true;
|
||||
break;
|
||||
}
|
||||
else if (v > 127 || v < -128)
|
||||
ret.push (2);
|
||||
else
|
||||
ret.push (1);
|
||||
}
|
||||
|
||||
if (!long_words)
|
||||
return ret;
|
||||
|
||||
/* redo, 0/2/4 bytes encoding */
|
||||
ret.reset ();
|
||||
for (int i = row.length - 1; i >= 0; i--)
|
||||
{
|
||||
int v = row.arrayZ[i];
|
||||
if (v == 0)
|
||||
ret.push (0);
|
||||
else if (v > 32767 || v < -32768)
|
||||
ret.push (4);
|
||||
else
|
||||
ret.push (2);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline unsigned get_width ()
|
||||
{
|
||||
unsigned ret = + hb_iter (chars)
|
||||
| hb_reduce (hb_add, 0u)
|
||||
;
|
||||
return ret;
|
||||
}
|
||||
|
||||
hb_vector_t<uint8_t> get_columns ()
|
||||
{
|
||||
hb_vector_t<uint8_t> cols;
|
||||
cols.alloc (chars.length);
|
||||
for (auto v : chars)
|
||||
{
|
||||
uint8_t flag = v ? 1 : 0;
|
||||
cols.push (flag);
|
||||
}
|
||||
return cols;
|
||||
}
|
||||
|
||||
static inline unsigned get_chars_overhead (const hb_vector_t<uint8_t>& cols)
|
||||
static inline unsigned get_chars_overhead (unsigned num_columns)
|
||||
{
|
||||
unsigned c = 4 + 6; // 4 bytes for LOffset, 6 bytes for VarData header
|
||||
unsigned cols_bit_count = 0;
|
||||
for (auto v : cols)
|
||||
if (v) cols_bit_count++;
|
||||
return c + cols_bit_count * 2;
|
||||
return c + num_columns * 2;
|
||||
}
|
||||
|
||||
unsigned get_gain () const
|
||||
unsigned get_gain (unsigned additional_bytes_per_rows = 1) const
|
||||
{
|
||||
int count = items.length;
|
||||
return hb_max (0, (int) overhead - count);
|
||||
return hb_max (0, (int) overhead - count * (int) additional_bytes_per_rows);
|
||||
}
|
||||
|
||||
int gain_from_merging (const delta_row_encoding_t& other_encoding) const
|
||||
{
|
||||
int combined_width = 0;
|
||||
for (unsigned i = 0; i < chars.length; i++)
|
||||
combined_width += hb_max (chars.arrayZ[i], other_encoding.chars.arrayZ[i]);
|
||||
// Back of the envelope calculations to reject early.
|
||||
signed additional_bytes_per_rows = other_encoding.width - width;
|
||||
if (additional_bytes_per_rows > 0)
|
||||
{
|
||||
if (get_gain (additional_bytes_per_rows) == 0)
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (other_encoding.get_gain (-additional_bytes_per_rows) == 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
hb_vector_t<uint8_t> combined_columns;
|
||||
combined_columns.alloc (columns.length);
|
||||
for (unsigned i = 0; i < columns.length; i++)
|
||||
combined_columns.push (columns.arrayZ[i] | other_encoding.columns.arrayZ[i]);
|
||||
auto pair = combine_width (other_encoding);
|
||||
unsigned combined_width = pair.first;
|
||||
unsigned combined_columns = pair.second;
|
||||
|
||||
int combined_overhead = get_chars_overhead (combined_columns);
|
||||
int combined_gain = (int) overhead + (int) other_encoding.overhead - combined_overhead
|
||||
- (combined_width - (int) width) * items.length
|
||||
- (combined_width - (int) other_encoding.width) * other_encoding.items.length;
|
||||
int combined_gain = (int) overhead + (int) other_encoding.overhead;
|
||||
combined_gain -= (combined_width - (int) width) * items.length;
|
||||
combined_gain -= (combined_width - (int) other_encoding.width) * other_encoding.items.length;
|
||||
combined_gain -= get_chars_overhead (combined_columns);
|
||||
|
||||
return combined_gain;
|
||||
}
|
||||
|
@ -2454,24 +2503,10 @@ struct delta_row_encoding_t
|
|||
const delta_row_encoding_t *a = (const delta_row_encoding_t *)pa;
|
||||
const delta_row_encoding_t *b = (const delta_row_encoding_t *)pb;
|
||||
|
||||
int gain_a = a->get_gain ();
|
||||
int gain_b = b->get_gain ();
|
||||
|
||||
if (gain_a != gain_b)
|
||||
return gain_a - gain_b;
|
||||
|
||||
return (b->chars).as_array ().cmp ((a->chars).as_array ());
|
||||
}
|
||||
|
||||
static int cmp_width (const void *pa, const void *pb)
|
||||
{
|
||||
const delta_row_encoding_t *a = (const delta_row_encoding_t *)pa;
|
||||
const delta_row_encoding_t *b = (const delta_row_encoding_t *)pb;
|
||||
|
||||
if (a->width != b->width)
|
||||
return (int) a->width - (int) b->width;
|
||||
|
||||
return (b->chars).as_array ().cmp ((a->chars).as_array ());
|
||||
return b->chars.cmp (a->chars);
|
||||
}
|
||||
|
||||
bool add_row (const hb_vector_t<int>* row)
|
||||
|
|
|
@ -484,6 +484,9 @@ hb_set_unicode_props (hb_buffer_t *buffer)
|
|||
{
|
||||
_hb_glyph_info_set_unicode_props (&info[i], buffer);
|
||||
|
||||
if (info[i].codepoint < 0x80)
|
||||
continue;
|
||||
|
||||
unsigned gen_cat = _hb_glyph_info_get_general_category (&info[i]);
|
||||
if (FLAG_UNSAFE (gen_cat) &
|
||||
(FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) |
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
*
|
||||
* on files with these headers:
|
||||
*
|
||||
* # ArabicShaping-16.0.0.txt
|
||||
* # Date: 2024-07-30
|
||||
* # Scripts-16.0.0.txt
|
||||
* # Date: 2024-04-30, 21:48:40 GMT
|
||||
* # ArabicShaping-17.0.0.txt
|
||||
* # Date: 2025-08-14
|
||||
* # Scripts-17.0.0.txt
|
||||
* # Date: 2025-07-24, 13:28:55 GMT
|
||||
*/
|
||||
|
||||
#ifndef HB_OT_SHAPER_ARABIC_JOINING_LIST_HH
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
*
|
||||
* on files with these headers:
|
||||
*
|
||||
* # ArabicShaping-16.0.0.txt
|
||||
* # Date: 2024-07-30
|
||||
* # Blocks-16.0.0.txt
|
||||
* # Date: 2024-02-02
|
||||
* # ArabicShaping-17.0.0.txt
|
||||
* # Date: 2025-08-14
|
||||
* # Blocks-17.0.0.txt
|
||||
* # Date: 2025-08-01
|
||||
* UnicodeData.txt does not have a header.
|
||||
*/
|
||||
|
||||
|
@ -80,7 +80,7 @@ static const uint8_t joining_table[] =
|
|||
/* Arabic Extended-B */
|
||||
|
||||
/* 0860 */ R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,
|
||||
/* 0880 */ R,R,R,C,C,C,D,U,U,D,D,D,D,D,R,X,U,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
|
||||
/* 0880 */ R,R,R,C,C,C,D,U,U,D,D,D,D,D,R,D,U,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
|
||||
|
||||
/* Arabic Extended-A */
|
||||
|
||||
|
@ -140,9 +140,9 @@ static const uint8_t joining_table[] =
|
|||
|
||||
/* Arabic Extended-C */
|
||||
|
||||
/* 10EC0 */ R,D,D,
|
||||
/* 10EC0 */ R,D,D,X,D,D,
|
||||
|
||||
#define joining_offset_0x10f30u 1185
|
||||
#define joining_offset_0x10f30u 1188
|
||||
|
||||
/* Sogdian */
|
||||
|
||||
|
@ -161,14 +161,14 @@ static const uint8_t joining_table[] =
|
|||
/* 10FA0 */ D,U,D,D,R,R,R,U,D,R,R,D,D,R,D,D,
|
||||
/* 10FC0 */ U,D,R,R,D,U,U,U,U,R,D,L,
|
||||
|
||||
#define joining_offset_0x110bdu 1341
|
||||
#define joining_offset_0x110bdu 1344
|
||||
|
||||
/* Kaithi */
|
||||
|
||||
/* 110A0 */ U,X,X,
|
||||
/* 110C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,U,
|
||||
|
||||
#define joining_offset_0x1e900u 1358
|
||||
#define joining_offset_0x1e900u 1361
|
||||
|
||||
/* Adlam */
|
||||
|
||||
|
@ -176,7 +176,7 @@ static const uint8_t joining_table[] =
|
|||
/* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
|
||||
/* 1E940 */ D,D,D,D,X,X,X,X,X,X,X,T,
|
||||
|
||||
}; /* Table items: 1434; occupancy: 57% */
|
||||
}; /* Table items: 1437; occupancy: 58% */
|
||||
|
||||
|
||||
static unsigned int
|
||||
|
@ -204,7 +204,7 @@ joining_type (hb_codepoint_t u)
|
|||
if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
|
||||
if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
|
||||
if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D23u)) return joining_table[u - 0x10D00u + joining_offset_0x10d00u];
|
||||
if (hb_in_range<hb_codepoint_t> (u, 0x10EC2u, 0x10EC4u)) return joining_table[u - 0x10EC2u + joining_offset_0x10ec2u];
|
||||
if (hb_in_range<hb_codepoint_t> (u, 0x10EC2u, 0x10EC7u)) return joining_table[u - 0x10EC2u + joining_offset_0x10ec2u];
|
||||
if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10FCBu)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u];
|
||||
break;
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
*
|
||||
* on files with these headers:
|
||||
*
|
||||
* # IndicSyllabicCategory-16.0.0.txt
|
||||
* # Date: 2024-04-30, 21:48:21 GMT
|
||||
* # IndicPositionalCategory-16.0.0.txt
|
||||
* # Date: 2024-04-30, 21:48:21 GMT
|
||||
* # Blocks-16.0.0.txt
|
||||
* # Date: 2024-02-02
|
||||
* # IndicSyllabicCategory-17.0.0.txt
|
||||
* # Date: 2025-08-01, 04:02:23 GMT
|
||||
* # IndicPositionalCategory-17.0.0.txt
|
||||
* # Date: 2025-07-29, 13:35:52 GMT
|
||||
* # Blocks-17.0.0.txt
|
||||
* # Date: 2025-08-01
|
||||
*/
|
||||
|
||||
#include "hb.hh"
|
||||
|
|
|
@ -6,18 +6,18 @@
|
|||
*
|
||||
* on files with these headers:
|
||||
*
|
||||
* # IndicSyllabicCategory-16.0.0.txt
|
||||
* # Date: 2024-04-30, 21:48:21 GMT
|
||||
* # IndicPositionalCategory-16.0.0.txt
|
||||
* # Date: 2024-04-30, 21:48:21 GMT
|
||||
* # ArabicShaping-16.0.0.txt
|
||||
* # Date: 2024-07-30
|
||||
* # DerivedCoreProperties-16.0.0.txt
|
||||
* # Date: 2024-05-31, 18:09:32 GMT
|
||||
* # Blocks-16.0.0.txt
|
||||
* # Date: 2024-02-02
|
||||
* # Scripts-16.0.0.txt
|
||||
* # Date: 2024-04-30, 21:48:40 GMT
|
||||
* # IndicSyllabicCategory-17.0.0.txt
|
||||
* # Date: 2025-08-01, 04:02:23 GMT
|
||||
* # IndicPositionalCategory-17.0.0.txt
|
||||
* # Date: 2025-07-29, 13:35:52 GMT
|
||||
* # ArabicShaping-17.0.0.txt
|
||||
* # Date: 2025-08-14
|
||||
* # DerivedCoreProperties-17.0.0.txt
|
||||
* # Date: 2025-07-30, 23:55:08 GMT
|
||||
* # Blocks-17.0.0.txt
|
||||
* # Date: 2025-08-01
|
||||
* # Scripts-17.0.0.txt
|
||||
* # Date: 2025-07-24, 13:28:55 GMT
|
||||
* # Override values For Indic_Syllabic_Category
|
||||
* # Not derivable
|
||||
* # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
|
||||
|
@ -103,7 +103,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
static const uint8_t hb_use_u8[3345]=
|
||||
static const uint8_t hb_use_u8[3343]=
|
||||
{
|
||||
16, 50, 51, 51, 51, 52, 51, 83, 118, 131, 57, 58, 59, 195, 211, 62,
|
||||
51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
|
||||
|
@ -127,24 +127,24 @@ static const uint8_t hb_use_u8[3345]=
|
|||
49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 51, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 52, 53, 2, 54, 2, 2, 55, 56, 2, 57, 58,
|
||||
59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 2, 70, 71, 72, 73,
|
||||
2, 74, 2, 75, 76, 77, 78, 2, 2, 79, 80, 81, 82, 2, 83, 84,
|
||||
2, 85, 85, 85, 85, 85, 85, 85, 85, 86, 85, 85, 85, 85, 85, 85,
|
||||
85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
|
||||
85, 85, 85, 85, 85, 85, 85, 85, 87, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 74, 2, 75, 76, 77, 78, 79, 2, 80, 81, 82, 83, 2, 84, 85,
|
||||
2, 86, 86, 86, 86, 86, 86, 86, 86, 87, 86, 86, 86, 86, 86, 86,
|
||||
86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
|
||||
86, 86, 86, 86, 86, 86, 86, 86, 88, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 89, 90, 2, 2, 2, 91, 2, 2, 2, 92,
|
||||
93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 94, 94, 94, 95, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 89, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 90, 91, 2, 2, 2, 92, 2, 2, 2, 93,
|
||||
94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 95, 95, 95, 96, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 96, 97, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 98, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 97, 98, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 99, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 99, 2, 2, 100, 2, 2, 2, 101, 2, 102, 2, 2, 2,
|
||||
2, 2, 2, 103, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 104, 104, 105, 106, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
|
||||
104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
|
||||
104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
||||
2, 2, 2, 100, 2, 2, 101, 2, 2, 2, 102, 2, 103, 2, 2, 2,
|
||||
2, 2, 2, 104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 105, 105, 106, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
|
||||
105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
|
||||
105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4,
|
||||
0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
@ -193,99 +193,99 @@ static const uint8_t hb_use_u8[3345]=
|
|||
48, 48, 48, 48, 15, 82, 83, 84, 85, 86, 87, 0, 0, 0, 0, 88,
|
||||
0, 9, 0, 0, 30, 0, 89, 81, 90, 2, 2, 2, 2, 9, 0, 0,
|
||||
0, 42, 42, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 13, 9, 0,
|
||||
0, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
9, 22, 80, 45, 22, 94, 61, 0, 0, 95, 96, 95, 95, 97, 98, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 9, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 29, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 0, 0, 2, 2, 2, 52, 99, 45, 0,
|
||||
0, 2, 2, 100, 101, 102, 103, 61, 63, 104, 16, 45, 22, 59, 21, 80,
|
||||
48, 48, 76, 11, 11, 11, 105, 46, 40, 11, 106, 74, 2, 2, 2, 2,
|
||||
2, 2, 2, 107, 22, 20, 20, 22, 48, 48, 22, 108, 2, 2, 2, 9,
|
||||
0, 0, 0, 0, 0, 0, 109, 110, 110, 110, 110, 0, 0, 0, 0, 0,
|
||||
0, 106, 74, 2, 2, 2, 2, 2, 2, 60, 61, 59, 25, 22, 111, 61,
|
||||
2, 2, 2, 2, 107, 22, 23, 45, 45, 102, 112, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 61, 18, 48, 23, 113, 102, 102, 102, 114, 115, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 30, 2, 11, 46, 116, 116, 116, 11, 116,
|
||||
116, 15, 116, 116, 116, 26, 0, 40, 0, 0, 0, 117, 51, 11, 5, 0,
|
||||
0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 6, 119,
|
||||
120, 42, 42, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120,
|
||||
121, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 122, 0, 0, 0, 0,
|
||||
0, 0, 7, 122, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 123, 123, 0, 0,
|
||||
0, 2, 2, 2, 2, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0,
|
||||
124, 0, 123, 123, 0, 0, 0, 0, 0, 2, 53, 2, 108, 2, 10, 2,
|
||||
2, 2, 65, 19, 16, 0, 0, 31, 0, 2, 2, 0, 0, 0, 0, 0,
|
||||
0, 29, 2, 2, 2, 2, 2, 2, 2, 2, 2, 125, 23, 23, 23, 23,
|
||||
23, 23, 23, 126, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11,
|
||||
11, 11, 2, 0, 0, 0, 0, 0, 52, 2, 2, 2, 22, 22, 127, 116,
|
||||
0, 2, 2, 2, 128, 20, 59, 20, 113, 102, 129, 0, 0, 0, 0, 0,
|
||||
0, 11, 130, 2, 2, 2, 2, 2, 2, 2, 131, 23, 22, 20, 48, 132,
|
||||
133, 134, 0, 0, 0, 0, 0, 0, 0, 2, 2, 52, 30, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 10, 22, 59, 99, 76, 135, 136, 137, 0, 0, 0,
|
||||
0, 2, 138, 2, 2, 2, 2, 139, 0, 30, 2, 42, 5, 0, 79, 15,
|
||||
2, 140, 20, 53, 128, 140, 2, 2, 141, 10, 9, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 142, 21, 25, 0, 0, 143, 144, 0, 0, 0,
|
||||
0, 2, 65, 45, 23, 80, 47, 145, 0, 81, 81, 81, 81, 81, 81, 81,
|
||||
81, 0, 0, 0, 0, 0, 0, 0, 6, 120, 120, 120, 120, 121, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 2, 2, 2, 9, 2, 30, 2, 2, 2,
|
||||
2, 2, 30, 2, 2, 2, 30, 9, 0, 128, 20, 27, 31, 0, 0, 146,
|
||||
147, 2, 2, 30, 2, 30, 2, 2, 2, 2, 2, 2, 0, 14, 37, 0,
|
||||
148, 2, 2, 13, 37, 0, 30, 2, 2, 2, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 30, 2, 2, 9, 2, 2, 11, 41, 0, 0, 0,
|
||||
0, 2, 2, 2, 0, 27, 22, 22, 30, 2, 2, 2, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 27, 38, 0, 2, 2, 2, 116, 116, 116, 116,
|
||||
116, 149, 2, 9, 0, 0, 0, 0, 0, 2, 14, 14, 0, 0, 0, 0,
|
||||
0, 9, 2, 2, 9, 2, 2, 2, 2, 30, 2, 9, 0, 30, 2, 0,
|
||||
0, 150, 151, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 22, 20,
|
||||
20, 20, 22, 22, 134, 0, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153,
|
||||
153, 153, 153, 153, 2, 2, 2, 2, 2, 53, 52, 53, 0, 0, 0, 0,
|
||||
154, 11, 74, 2, 2, 2, 2, 2, 2, 18, 19, 21, 16, 24, 37, 0,
|
||||
0, 0, 31, 0, 0, 0, 0, 0, 0, 11, 49, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 128, 20, 22, 155, 22, 21, 156, 157, 2, 2, 2, 2,
|
||||
2, 0, 0, 65, 158, 0, 0, 0, 0, 2, 13, 0, 0, 0, 0, 0,
|
||||
0, 2, 65, 25, 20, 20, 20, 22, 22, 108, 159, 0, 0, 56, 160, 31,
|
||||
161, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 23,
|
||||
19, 22, 22, 162, 44, 0, 0, 0, 49, 128, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 9, 9, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2,
|
||||
30, 2, 2, 2, 2, 2, 2, 2, 10, 18, 19, 21, 22, 163, 31, 0,
|
||||
0, 11, 11, 30, 2, 2, 2, 9, 30, 9, 2, 30, 2, 2, 58, 17,
|
||||
23, 16, 23, 47, 32, 33, 32, 34, 0, 0, 0, 0, 35, 0, 0, 0,
|
||||
2, 2, 23, 0, 11, 11, 11, 46, 0, 11, 11, 46, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 30, 0, 9, 2, 2, 2, 30, 45, 59, 20,
|
||||
20, 31, 33, 32, 32, 25, 164, 29, 165, 166, 37, 0, 0, 0, 0, 0,
|
||||
0, 12, 26, 0, 0, 0, 0, 0, 0, 2, 2, 65, 25, 20, 20, 20,
|
||||
22, 23, 126, 15, 17, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0,
|
||||
167, 168, 0, 0, 0, 0, 0, 0, 0, 18, 19, 20, 20, 66, 99, 25,
|
||||
161, 11, 169, 9, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
65, 25, 20, 20, 0, 48, 48, 11, 170, 37, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 2, 2, 20, 0, 23, 19, 20, 20, 21, 16, 82,
|
||||
170, 38, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 10, 171,
|
||||
25, 20, 22, 22, 169, 9, 0, 0, 0, 2, 2, 2, 2, 2, 9, 43,
|
||||
136, 23, 22, 20, 76, 21, 22, 0, 0, 2, 2, 2, 9, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 18, 19, 20, 21, 22, 105, 170, 37, 0,
|
||||
0, 2, 2, 2, 9, 30, 0, 2, 2, 2, 2, 30, 9, 2, 2, 2,
|
||||
2, 23, 23, 18, 32, 33, 12, 172, 166, 173, 174, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 0, 2, 2, 2, 65, 25, 20, 20, 0, 22, 23,
|
||||
29, 108, 0, 33, 0, 0, 0, 0, 0, 52, 20, 22, 22, 22, 140, 2,
|
||||
2, 2, 175, 141, 11, 15, 176, 61, 177, 0, 0, 1, 148, 0, 0, 0,
|
||||
0, 52, 20, 22, 16, 19, 20, 2, 2, 2, 2, 159, 159, 159, 178, 178,
|
||||
178, 178, 178, 178, 15, 179, 0, 30, 0, 22, 20, 20, 31, 22, 22, 11,
|
||||
170, 0, 61, 61, 61, 61, 61, 61, 61, 66, 21, 82, 46, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 9, 22, 80, 45, 22, 93, 61, 0,
|
||||
0, 94, 95, 94, 94, 96, 97, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
0, 2, 2, 9, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0,
|
||||
0, 2, 2, 2, 2, 29, 0, 0, 0, 2, 2, 2, 2, 2, 9, 0,
|
||||
0, 2, 2, 2, 52, 98, 45, 0, 0, 2, 2, 99, 100, 101, 102, 61,
|
||||
63, 103, 16, 45, 22, 59, 21, 80, 48, 48, 76, 11, 11, 11, 104, 46,
|
||||
40, 11, 105, 74, 2, 2, 2, 2, 2, 2, 2, 106, 22, 20, 20, 22,
|
||||
48, 48, 22, 107, 2, 2, 2, 9, 0, 0, 0, 0, 0, 0, 108, 109,
|
||||
109, 109, 109, 0, 0, 0, 0, 0, 0, 105, 74, 2, 2, 2, 2, 2,
|
||||
2, 60, 61, 59, 25, 22, 110, 61, 2, 2, 2, 2, 106, 22, 23, 45,
|
||||
45, 101, 111, 0, 0, 0, 0, 0, 0, 2, 2, 61, 18, 48, 23, 112,
|
||||
101, 101, 101, 113, 114, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 30,
|
||||
2, 11, 46, 115, 115, 115, 11, 115, 115, 15, 115, 115, 115, 26, 0, 40,
|
||||
0, 0, 0, 116, 51, 11, 5, 0, 0, 0, 0, 0, 0, 0, 117, 0,
|
||||
0, 0, 0, 0, 0, 0, 6, 118, 119, 42, 42, 5, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 119, 119, 120, 119, 119, 119, 119, 119, 119, 119,
|
||||
119, 0, 0, 121, 0, 0, 0, 0, 0, 0, 7, 121, 0, 0, 0, 0,
|
||||
0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
|
||||
0, 0, 0, 0, 122, 122, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0,
|
||||
30, 0, 0, 0, 0, 0, 0, 0, 123, 0, 122, 122, 0, 0, 0, 0,
|
||||
0, 2, 53, 2, 107, 2, 10, 2, 2, 2, 65, 19, 16, 0, 0, 31,
|
||||
0, 2, 2, 0, 0, 0, 0, 0, 0, 29, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 124, 23, 23, 23, 23, 23, 23, 23, 125, 0, 0, 0, 0,
|
||||
0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, 0, 0, 0, 0, 0,
|
||||
52, 2, 2, 2, 22, 22, 126, 115, 0, 2, 2, 2, 127, 20, 59, 20,
|
||||
112, 101, 128, 0, 0, 0, 0, 0, 0, 11, 129, 2, 2, 2, 2, 2,
|
||||
2, 2, 130, 23, 22, 20, 48, 131, 132, 133, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 52, 30, 2, 2, 2, 2, 2, 2, 2, 2, 10, 22, 59,
|
||||
98, 76, 134, 135, 136, 0, 0, 0, 0, 2, 137, 2, 2, 2, 2, 138,
|
||||
0, 30, 2, 42, 5, 0, 79, 15, 2, 139, 20, 53, 127, 139, 2, 2,
|
||||
140, 10, 9, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 141, 21,
|
||||
25, 0, 0, 142, 143, 0, 0, 0, 0, 2, 65, 45, 23, 80, 47, 144,
|
||||
0, 81, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0,
|
||||
6, 119, 119, 119, 119, 120, 0, 0, 0, 2, 2, 2, 2, 2, 9, 2,
|
||||
2, 2, 9, 2, 30, 2, 2, 2, 2, 2, 30, 2, 2, 2, 30, 9,
|
||||
0, 127, 20, 27, 31, 0, 0, 145, 146, 2, 2, 30, 2, 30, 2, 2,
|
||||
2, 2, 2, 2, 0, 14, 37, 0, 147, 2, 2, 13, 37, 0, 30, 2,
|
||||
2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 2, 2,
|
||||
9, 2, 2, 11, 41, 0, 0, 0, 0, 2, 2, 2, 0, 27, 22, 22,
|
||||
30, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 27, 38,
|
||||
0, 2, 2, 2, 115, 115, 115, 115, 115, 148, 2, 9, 0, 0, 0, 0,
|
||||
0, 2, 14, 14, 0, 0, 0, 0, 0, 9, 2, 2, 9, 2, 2, 2,
|
||||
2, 30, 2, 9, 0, 30, 2, 0, 0, 149, 150, 151, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 22, 22, 20, 20, 20, 22, 22, 133, 0, 0, 0,
|
||||
0, 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 2, 2, 2, 2,
|
||||
2, 53, 52, 53, 0, 0, 0, 0, 153, 11, 74, 2, 2, 2, 2, 2,
|
||||
2, 18, 19, 21, 16, 24, 37, 0, 0, 0, 31, 0, 0, 0, 0, 0,
|
||||
0, 11, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 127, 20, 22, 154,
|
||||
22, 21, 155, 156, 2, 2, 2, 2, 2, 0, 0, 65, 157, 0, 0, 0,
|
||||
0, 2, 13, 0, 0, 0, 0, 0, 0, 2, 65, 25, 20, 20, 20, 22,
|
||||
22, 107, 158, 0, 0, 56, 159, 31, 160, 30, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 23, 19, 22, 22, 161, 44, 0, 0, 0,
|
||||
49, 127, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 9, 2, 2,
|
||||
30, 2, 2, 2, 2, 2, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2,
|
||||
10, 18, 19, 21, 22, 162, 31, 0, 0, 11, 11, 30, 2, 2, 2, 9,
|
||||
30, 9, 2, 30, 2, 2, 58, 17, 23, 16, 23, 47, 32, 33, 32, 34,
|
||||
0, 0, 0, 0, 35, 0, 0, 0, 2, 2, 23, 0, 11, 11, 11, 46,
|
||||
0, 11, 11, 46, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 30, 0,
|
||||
9, 2, 2, 2, 30, 45, 59, 20, 20, 31, 33, 32, 32, 25, 163, 29,
|
||||
164, 165, 37, 0, 0, 0, 0, 0, 0, 12, 26, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 65, 25, 20, 20, 20, 22, 23, 125, 15, 17, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 166, 167, 0, 0, 0, 0, 0, 0,
|
||||
0, 18, 19, 20, 20, 66, 98, 25, 160, 11, 168, 9, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 65, 25, 20, 20, 0, 48, 48, 11,
|
||||
169, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 20,
|
||||
0, 23, 19, 20, 20, 21, 16, 82, 169, 38, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 10, 170, 25, 20, 22, 22, 168, 9, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 43, 135, 23, 22, 20, 76, 21, 22, 0,
|
||||
0, 2, 2, 2, 9, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 18,
|
||||
19, 20, 21, 22, 104, 169, 37, 0, 0, 2, 2, 2, 9, 30, 0, 2,
|
||||
2, 2, 2, 30, 9, 2, 2, 2, 2, 23, 23, 18, 32, 33, 12, 171,
|
||||
165, 172, 173, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2,
|
||||
2, 65, 25, 20, 20, 0, 22, 23, 29, 107, 0, 33, 0, 0, 0, 0,
|
||||
0, 52, 20, 22, 22, 22, 139, 2, 2, 2, 174, 140, 11, 15, 175, 61,
|
||||
176, 0, 0, 1, 147, 0, 0, 0, 0, 52, 20, 22, 16, 19, 20, 2,
|
||||
2, 2, 2, 158, 158, 158, 177, 177, 177, 177, 177, 177, 15, 178, 0, 30,
|
||||
0, 16, 20, 16, 16, 0, 0, 0, 0, 22, 20, 20, 31, 22, 22, 11,
|
||||
169, 0, 61, 61, 61, 61, 61, 61, 61, 66, 21, 82, 46, 0, 0, 0,
|
||||
0, 2, 2, 2, 9, 2, 30, 2, 2, 52, 22, 22, 31, 0, 38, 22,
|
||||
27, 11, 160, 180, 181, 0, 0, 0, 0, 2, 2, 2, 30, 9, 2, 2,
|
||||
27, 11, 159, 179, 180, 0, 0, 0, 0, 2, 2, 2, 30, 9, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 23, 23, 47, 22, 35, 82, 68, 0, 0, 0,
|
||||
0, 2, 182, 66, 47, 0, 0, 0, 0, 11, 183, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 23, 22, 20, 31, 0, 48, 16, 144, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 157, 0, 0, 184, 184, 184, 184, 184, 184, 184,
|
||||
184, 185, 185, 185, 186, 187, 185, 184, 184, 188, 184, 184, 189, 190, 190, 190,
|
||||
190, 190, 190, 190, 0, 0, 0, 0, 0, 184, 184, 184, 184, 184, 191, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22, 22, 22, 192, 193,
|
||||
194, 11, 11, 11, 46, 0, 0, 0, 0, 29, 74, 2, 2, 2, 2, 2,
|
||||
0, 2, 181, 66, 47, 0, 0, 0, 0, 11, 182, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 23, 22, 20, 31, 0, 48, 16, 143, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 156, 0, 0, 183, 183, 183, 183, 183, 183, 183,
|
||||
183, 184, 184, 184, 185, 186, 184, 183, 183, 187, 183, 183, 188, 189, 189, 189,
|
||||
189, 189, 189, 189, 0, 0, 0, 0, 0, 183, 183, 183, 183, 183, 190, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22, 22, 22, 191, 192,
|
||||
193, 11, 11, 11, 46, 0, 0, 0, 0, 29, 74, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 65, 47, 0, 2, 2, 2, 2, 2, 9, 0,
|
||||
58, 195, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||
20, 20, 20, 20, 20, 0, 0, 0, 40, 116, 26, 0, 0, 0, 0, 0,
|
||||
58, 194, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||
20, 20, 20, 20, 20, 0, 0, 0, 40, 115, 26, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
30, 2, 2, 2, 2, 2, 0, 58, 37, 0, 6, 120, 120, 120, 121, 0,
|
||||
30, 2, 2, 2, 2, 2, 0, 58, 37, 0, 6, 119, 119, 119, 120, 0,
|
||||
0, 11, 11, 11, 49, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 46, 2, 2, 2, 2, 2, 2, 11,
|
||||
11, 2, 2, 2, 2, 2, 2, 22, 22, 2, 2, 2, 2, 2, 2, 2,
|
||||
|
@ -301,22 +301,21 @@ static const uint8_t hb_use_u8[3345]=
|
|||
VMBlw,VMPst, IS, VAbv, MPst, MPre, MBlw, MBlw, B, MBlw, MBlw, VPst,VMPst,VMPst, B, MBlw,
|
||||
VPst, VPre, VAbv, VAbv,VMPst,VMPst,VMBlw, B,VMPst, VBlw, VPst, CGJ, CGJ, VPst,VMAbv,VMAbv,
|
||||
FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv, IS,FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,
|
||||
CMAbv,CMAbv, B, GB, B, VAbv, SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv,
|
||||
VPre, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv, SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv,
|
||||
VPst, H, B, O,SMAbv,SMAbv,SMAbv, VPst, IS, RK, RK, VBlw, FAbv,VMPre,VMPre,FMAbv,
|
||||
CMBlw,VMBlw,VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, SB,
|
||||
SE, O, H, MPst, VPst, H,VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,
|
||||
CMAbv, VAbv, MBlw, MPst, MBlw, H, O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv,
|
||||
FPst, VBlw, B, VBlw,VMAbv, B, VPre, O,VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,
|
||||
VMAbv, O, IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS, B, N, N, O, HN, VPre,
|
||||
VBlw, VAbv, IS,CMAbv, O, VPst, B, R, R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,
|
||||
CMBlw,VMPst, O,VMAbv,CMBlw, IS, R,FMAbv, B, CS, CS, H,CMBlw,VMPst, H,VMPst,
|
||||
VAbv,VMAbv, VPst, MPst, R, MPst,CMBlw, B,FMBlw, CS, SUB, SUB, GB, FBlw, FBlw,CMAbv,
|
||||
IS, VBlw, IS, R, MBlw, GB, VAbv, R,VMPst, G, G, J, J, J, SB, SE,
|
||||
J, HR, G, G, HM, HM, HM, G, O, MPre, MPre, MPst,VMAbv, MBlw, VBlw, O,
|
||||
VBlw,
|
||||
CMAbv,CMAbv, B, VAbv, SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre, B,
|
||||
MPre, MBlw, SUB, FAbv, FAbv, MAbv, SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, H,
|
||||
B, O,SMAbv,SMAbv,SMAbv, VPst, IS, RK, RK, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,
|
||||
VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, SB, SE, O,
|
||||
H, MPst, VPst, H,VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv,
|
||||
MBlw, MPst, MBlw, H, O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw,
|
||||
B, VBlw,VMAbv, B, VPre, O,VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O,
|
||||
IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv,
|
||||
IS,CMAbv, O, VPst, B, R, R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,VMPst,
|
||||
O,VMAbv,CMBlw, IS, R,FMAbv, B, CS, CS, H,CMBlw,VMPst, H,VMPst, VAbv,VMAbv,
|
||||
VPst, MPst, R, MPst,CMBlw, B,FMBlw, CS, SUB, SUB, GB, FBlw, FBlw,CMAbv, IS, VBlw,
|
||||
IS, R, MBlw, GB, VAbv, R,VMPst, G, G, J, J, J, SB, SE, J, HR,
|
||||
G, G, HM, HM, HM, G, O, MPre, MPre, MPst,VMAbv, MBlw, VBlw, O, VBlw,
|
||||
};
|
||||
static const uint16_t hb_use_u16[856]=
|
||||
static const uint16_t hb_use_u16[864]=
|
||||
{
|
||||
0, 0, 1, 2, 0, 3, 0, 3, 0, 0, 4, 5, 0, 6, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
|
||||
|
@ -330,48 +329,48 @@ static const uint16_t hb_use_u16[856]=
|
|||
73, 74, 75, 76, 77, 0, 0, 0, 10, 10, 78, 79, 80, 81, 82, 83,
|
||||
84, 85, 0, 0, 0, 0, 0, 0, 10, 86, 10, 87, 10, 88, 89, 90,
|
||||
10, 10, 10, 91, 92, 93, 2, 0, 94, 0, 10, 10, 10, 10, 10, 95,
|
||||
96, 10, 97, 0, 0, 0, 0, 0, 98, 99,100,101, 31, 10,102,103,
|
||||
10, 10,104, 10,105,106, 0, 0, 10,107, 10, 10, 10,108,109,110,
|
||||
2, 2, 0, 0, 0, 0, 0, 0,111, 10, 10,112,113, 2,114,115,
|
||||
116, 10,117, 10, 10, 10,118,119, 10, 10,120,121,122, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,123,124,125, 0, 0, 0, 0, 0, 0, 0,126,
|
||||
127,128,129, 0, 0, 0,130,131,132, 0, 0, 0, 0, 0, 0,133,
|
||||
0, 0, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0,135, 0,
|
||||
0, 0, 0, 10, 10, 10,136,137, 0, 0,138, 0, 0, 0, 0, 0,
|
||||
139, 10,140, 0, 10, 10, 10,141,142, 10, 10,143,144, 2,145,146,
|
||||
10, 10,147, 10,148,149, 0, 0,150, 10, 10,151,152, 2,153, 99,
|
||||
10, 10,154,155,156, 2, 10,157, 10, 10, 10,158,159, 0,160,161,
|
||||
0, 0, 0, 0, 10, 10,162, 2,163, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0,165,
|
||||
0, 0, 0, 0, 0, 0, 0,166,166,167, 34,168, 0, 0, 0, 0,
|
||||
169,170, 10,171, 95, 0, 0, 0, 0, 0, 0, 0, 70, 10,172, 0,
|
||||
10,173,174, 0, 0, 0, 0, 0, 10, 10,175, 2, 9, 10,176, 10,
|
||||
177, 0, 0, 0, 0, 0, 0, 0, 10, 10,178,173, 0, 0, 0, 0,
|
||||
0, 0, 0, 10,179,180, 0, 10,181, 0, 0,182,183, 0, 0, 0,
|
||||
184, 10, 10,185,186,187,188,189,190, 10, 10,191,192, 0, 0, 0,
|
||||
193, 10,194,195,196, 10, 10,197,190, 10, 10,198,199,106,200,103,
|
||||
10, 34,201,202,203, 0, 0, 0,204,205, 95, 10, 10,206,207, 2,
|
||||
208, 21, 22,209,210,211,212,213,214, 10, 10,215,216,217,218, 0,
|
||||
10, 10, 10,219,220,221,222, 0,200, 10, 10,223,224, 2, 0, 0,
|
||||
10, 10,225,226,227,228, 0, 0, 10, 10, 10,229,230, 2, 0, 0,
|
||||
10, 10,231,232, 2, 10,141, 0, 10,233,234,104,235, 0, 0, 0,
|
||||
10, 10,236,237, 0, 0, 0, 0,238,239, 10,240,241, 2, 0, 0,
|
||||
0, 0,242, 10, 10,243,244, 0,245, 10, 10,246,247,248, 10, 10,
|
||||
249,250, 0, 0, 0, 0, 0, 0, 22, 10,225,251, 8, 10, 71, 19,
|
||||
10,252, 74,253, 0, 0, 0, 0,254, 10, 10,255,256, 2,257, 10,
|
||||
258,259, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,260,
|
||||
261, 49, 10,262,263,264, 0, 0,265,265,265,265,265,265,265,265,
|
||||
265,265,265,266,267,268,265,265,265,265,265,265,265,265,265,269,
|
||||
10,270,271, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
|
||||
10, 10, 10,272, 0, 0, 0, 0, 0, 0, 0, 0,273, 10,274, 2,
|
||||
10, 10, 10, 10,275,276,277,277,278,279, 0, 0, 0, 0,280, 0,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,177, 0,281,
|
||||
10, 10, 10, 10, 10, 10,106, 71, 95,282, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,283, 10, 10, 71,284,285, 0, 0, 0,
|
||||
0, 10,286, 0, 10, 10,287, 2, 0, 0, 0, 0, 0, 10,288, 2,
|
||||
0, 0, 0, 0, 0, 10,289,106, 10, 10, 10, 10,290, 2, 0, 0,
|
||||
130,130,130,130,130,130,130,130,163,163,163,163,163,163,163,163,
|
||||
163,163,163,163,163,163,163,130,
|
||||
96, 10, 97, 0, 0, 0, 0, 0, 10, 98, 99,100, 31, 10,101,102,
|
||||
10, 10,103, 10,104,105, 0, 0, 10,106, 10, 10, 10,107,108,109,
|
||||
2, 2, 0, 0, 0, 0, 0, 0,110, 10, 10,111,112, 2,113,114,
|
||||
115, 10,116, 10, 10, 10,117,118, 10, 10,119,120,121, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,122,123,124, 0, 0, 0, 0, 0, 0, 0,125,
|
||||
126,127,128, 0, 0, 0,129,130,131, 0, 0, 0, 0, 0, 0,132,
|
||||
0, 0, 0, 0,133, 0, 0, 0, 0, 0, 0, 0, 0, 0,134, 0,
|
||||
0, 0, 0, 10, 10, 10,135,136, 0, 0,137, 0, 0, 0, 0, 0,
|
||||
138, 10,139, 0, 10, 10, 10,140,141, 10, 10,142,143, 2,144,145,
|
||||
10, 10,146, 10,147,148, 0, 0,149, 10, 10,150,151, 2,152, 98,
|
||||
10, 10,153,154,155, 2, 10,156, 10, 10, 10,157,158, 0,159,160,
|
||||
0, 0, 0, 0, 10, 10,161, 2,162, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,163, 0, 0, 0, 0, 0, 0, 0,164,
|
||||
0, 0, 0, 0, 0, 0, 0,165,165,166, 34,167, 0, 0, 0, 0,
|
||||
168,169, 10,170, 95, 0, 0, 0, 0, 0, 0, 0, 70, 10,171, 0,
|
||||
10,172,173, 0, 0, 0, 0, 0, 10, 10,174, 2, 9, 10,175, 10,
|
||||
176, 0, 0, 0, 0, 0, 0, 0, 10, 10,177,172, 0, 0, 0, 0,
|
||||
0, 0, 0, 10,178,179, 0, 10,180, 0, 0,181,182, 0, 0, 0,
|
||||
183, 10, 10,184,185,186,187,188,189, 10, 10,190,191, 0, 0, 0,
|
||||
192, 10,193,194,195, 10, 10,196,189, 10, 10,197,198,105,199,102,
|
||||
10, 34,200,201,202, 0, 0, 0,203,204, 95, 10, 10,205,206, 2,
|
||||
207, 21, 22,208,209,210,211,212,213, 10, 10,214,215,216,217, 0,
|
||||
10, 10, 10,218,219,220,221, 0,199, 10, 10,222,223, 2, 0, 0,
|
||||
10, 10,224,225,226,227, 0, 0, 10, 10, 10,228,229, 2, 0, 0,
|
||||
10, 10,230,231, 2, 10,140, 0, 10,232,233,103,234, 0, 0, 0,
|
||||
10, 10,235,236, 0, 0, 0, 0,237,238, 10,239,240, 2, 0, 0,
|
||||
0, 0,241, 10, 10,242,243, 0,244, 10, 10,245,246,247, 10, 10,
|
||||
248,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,
|
||||
22, 10,224,251, 8, 10, 71, 19, 10,252, 74,253, 0, 0, 0, 0,
|
||||
254, 10, 10,255,256, 2,257, 10,258,259, 2, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 10,260,261, 49, 10,262,263,264, 0, 0,
|
||||
265,265,265,265,265,265,265,265,265,265,265,266,267,268,265,265,
|
||||
265,265,265,265,265,265,265,269, 10,270,271, 2, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 2, 0, 0, 0, 10, 10, 10,272, 0, 0, 0, 0,
|
||||
0, 0, 0, 0,273, 10,274, 2, 10, 10, 10, 10,275,276,277,277,
|
||||
278,279, 0, 0, 0, 0,280, 0, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10,176, 0,281, 10, 10, 10, 10, 10, 10,105, 71,
|
||||
95,282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,283,
|
||||
10, 10, 71,284,285, 0, 0, 0, 0, 10,286, 0, 10, 10,287, 2,
|
||||
0, 0, 0, 0, 0, 10,288, 2, 0, 0, 0, 0, 0, 10,289,105,
|
||||
10, 10, 10, 10,290, 2, 0, 0,129,129,129,129,129,129,129,129,
|
||||
162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,129,
|
||||
};
|
||||
|
||||
static inline uint8_t hb_use_b4 (const uint8_t* a, unsigned i)
|
||||
|
@ -388,7 +387,7 @@ static inline uint8_t hb_use_get_category (unsigned u)
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
static const uint8_t hb_use_u8[3657]=
|
||||
static const uint8_t hb_use_u8[3663]=
|
||||
{
|
||||
16, 50, 51, 51, 51, 52, 51, 83, 118, 131, 57, 58, 59, 195, 211, 62,
|
||||
51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
|
||||
|
@ -404,16 +403,16 @@ static const uint8_t hb_use_u8[3657]=
|
|||
1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 26, 27, 28, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 29,
|
||||
30, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 32, 33, 1, 34, 35,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1, 48, 49, 50,
|
||||
51, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
||||
52, 52, 52, 52, 54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 55, 1, 1, 1, 1, 1, 1, 1, 1, 56, 57, 1, 58, 1,
|
||||
59, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 61, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 62, 1, 1,
|
||||
1, 1, 63, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 64, 65, 1, 66, 67, 1, 1, 1, 68, 1, 1, 1, 1, 1,
|
||||
1, 69, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||
69, 0, 1, 2, 2, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
|
||||
52, 53, 53, 53, 53, 54, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
|
||||
53, 53, 53, 53, 55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 56, 1, 1, 1, 1, 1, 1, 1, 1, 57, 58, 1, 59, 1,
|
||||
60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 61, 62, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 63, 1, 1,
|
||||
1, 1, 64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 65, 66, 1, 67, 68, 1, 1, 1, 69, 1, 1, 1, 1, 1,
|
||||
1, 70, 71, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
|
||||
70, 0, 1, 2, 2, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 9, 0, 0, 0, 0,
|
||||
0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||
|
@ -437,190 +436,190 @@ static const uint8_t hb_use_u8[3657]=
|
|||
0, 0, 0, 0, 0, 56, 179, 180, 0, 56, 181, 182, 0, 56, 183, 184,
|
||||
185, 186, 187, 188, 0, 0, 0, 0, 0, 56, 189, 0, 0, 0, 0, 0,
|
||||
0, 190, 191, 192, 0, 0, 193, 194, 195, 196, 197, 198, 56, 199, 0, 0,
|
||||
0, 200, 201, 202, 203, 204, 205, 0, 0, 206, 207, 208, 209, 210, 67, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 211, 212, 213, 214, 0, 0, 0, 0,
|
||||
0, 215, 215, 215, 215, 215, 215, 215, 215, 215, 216, 217, 215, 215, 215, 215,
|
||||
215, 215, 215, 215, 215, 215, 215, 215, 218, 219, 220, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 67, 0, 56, 221, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 222, 223, 0, 0, 0, 0, 56, 56, 224, 225, 226, 0, 0,
|
||||
227, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 228,
|
||||
229, 56, 56, 56, 230, 231, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0,
|
||||
0, 56, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 235, 56,
|
||||
236, 0, 0, 0, 0, 0, 0, 101, 237, 0, 0, 0, 0, 0, 0, 101,
|
||||
238, 56, 56, 239, 0, 0, 0, 0, 0, 240, 240, 240, 240, 240, 240, 240,
|
||||
240, 241, 241, 241, 241, 241, 241, 241, 242, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 2, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 3, 4, 0, 5, 0, 0, 0, 0, 0, 6,
|
||||
0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 10, 11, 11, 11, 11, 0, 0, 0, 9, 12,
|
||||
0, 2, 2, 2, 2, 13, 14, 0, 0, 11, 15, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 16, 17, 18, 19, 20, 21, 22, 16, 23, 24,
|
||||
25, 12, 26, 27, 20, 2, 2, 2, 2, 2, 20, 0, 2, 2, 2, 2,
|
||||
2, 0, 2, 2, 2, 2, 2, 2, 2, 28, 29, 30, 2, 2, 2, 9,
|
||||
30, 9, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 2, 2,
|
||||
2, 9, 9, 0, 2, 2, 0, 17, 18, 19, 20, 31, 32, 33, 32, 34,
|
||||
0, 0, 0, 0, 35, 0, 0, 2, 30, 2, 0, 0, 0, 0, 0, 9,
|
||||
36, 12, 15, 30, 2, 2, 9, 0, 30, 9, 2, 30, 9, 2, 0, 37,
|
||||
18, 19, 31, 0, 27, 38, 27, 39, 0, 40, 0, 0, 0, 30, 2, 9,
|
||||
9, 0, 0, 0, 2, 2, 2, 2, 2, 41, 42, 43, 0, 0, 0, 0,
|
||||
0, 12, 15, 30, 2, 2, 2, 2, 30, 2, 30, 2, 2, 2, 2, 2,
|
||||
2, 9, 2, 30, 2, 2, 0, 17, 18, 19, 20, 21, 27, 22, 35, 24,
|
||||
0, 0, 0, 0, 0, 30, 41, 41, 44, 12, 29, 30, 2, 2, 2, 9,
|
||||
30, 9, 2, 30, 2, 2, 0, 17, 45, 0, 0, 27, 22, 0, 0, 2,
|
||||
30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 46, 30, 2, 2, 9, 0,
|
||||
2, 9, 2, 2, 0, 30, 9, 9, 2, 0, 30, 9, 0, 2, 9, 0,
|
||||
2, 2, 2, 2, 2, 2, 0, 0, 23, 16, 47, 0, 48, 33, 48, 34,
|
||||
0, 0, 0, 0, 35, 0, 0, 0, 0, 15, 29, 49, 2, 2, 2, 9,
|
||||
2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 17,
|
||||
22, 16, 23, 47, 22, 38, 22, 39, 0, 0, 0, 27, 31, 2, 9, 0,
|
||||
0, 10, 29, 30, 2, 2, 2, 9, 2, 2, 2, 30, 2, 2, 0, 17,
|
||||
45, 0, 0, 35, 47, 0, 0, 0, 9, 50, 51, 0, 0, 0, 0, 0,
|
||||
0, 11, 29, 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 52, 53,
|
||||
23, 19, 20, 31, 48, 33, 48, 34, 54, 0, 0, 0, 35, 0, 0, 0,
|
||||
30, 12, 29, 30, 2, 2, 2, 2, 2, 2, 2, 2, 9, 0, 2, 2,
|
||||
2, 2, 30, 2, 2, 2, 2, 30, 0, 2, 2, 2, 9, 0, 55, 0,
|
||||
35, 23, 22, 31, 31, 18, 48, 48, 25, 0, 23, 0, 0, 0, 0, 0,
|
||||
0, 2, 0, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0,
|
||||
0, 2, 2, 56, 56, 57, 0, 0, 18, 2, 2, 2, 2, 30, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 9, 0, 58, 21, 59, 22, 22, 20, 20,
|
||||
46, 21, 11, 31, 11, 2, 2, 60, 61, 61, 61, 61, 61, 62, 61, 61,
|
||||
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 63,
|
||||
0, 0, 0, 0, 64, 0, 0, 0, 0, 2, 2, 2, 2, 2, 65, 45,
|
||||
59, 66, 22, 22, 67, 68, 69, 70, 71, 2, 2, 2, 2, 2, 1, 0,
|
||||
5, 2, 2, 2, 23, 20, 2, 2, 72, 71, 73, 74, 65, 73, 29, 29,
|
||||
2, 52, 22, 53, 2, 2, 2, 2, 2, 2, 75, 76, 77, 29, 29, 78,
|
||||
79, 2, 2, 2, 2, 2, 29, 45, 0, 2, 59, 80, 0, 0, 0, 0,
|
||||
30, 2, 59, 47, 0, 0, 0, 0, 0, 2, 59, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 9, 2, 9, 59, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 81, 45, 22, 59, 20, 48, 48, 48, 48, 15, 82, 83, 84,
|
||||
85, 86, 87, 0, 0, 0, 0, 88, 0, 9, 0, 0, 30, 0, 89, 81,
|
||||
90, 2, 2, 2, 2, 9, 0, 0, 0, 42, 42, 91, 92, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 13, 9, 0, 0, 93, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 9, 22, 80, 45, 22, 94, 61, 0,
|
||||
0, 95, 96, 95, 95, 97, 98, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
0, 0, 0, 0, 200, 0, 0, 0, 0, 201, 202, 203, 204, 205, 206, 0,
|
||||
0, 207, 208, 209, 210, 211, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
212, 213, 214, 215, 0, 0, 0, 0, 0, 216, 216, 216, 216, 216, 216, 216,
|
||||
216, 216, 217, 218, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
|
||||
219, 220, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
|
||||
0, 56, 222, 0, 0, 0, 0, 0, 0, 0, 0, 223, 224, 0, 0, 0,
|
||||
0, 56, 56, 225, 226, 227, 0, 0, 228, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 229, 230, 56, 56, 56, 231, 232, 0, 0,
|
||||
0, 0, 0, 0, 233, 0, 0, 0, 0, 56, 234, 235, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 101, 236, 56, 237, 0, 0, 0, 0, 0, 0, 101,
|
||||
238, 0, 0, 0, 0, 0, 0, 101, 239, 56, 56, 240, 0, 0, 0, 0,
|
||||
0, 241, 241, 241, 241, 241, 241, 241, 241, 242, 242, 242, 242, 242, 242, 242,
|
||||
243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4,
|
||||
0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11,
|
||||
11, 11, 11, 0, 0, 0, 9, 12, 0, 2, 2, 2, 2, 13, 14, 0,
|
||||
0, 11, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 17,
|
||||
18, 19, 20, 21, 22, 16, 23, 24, 25, 12, 26, 27, 20, 2, 2, 2,
|
||||
2, 2, 20, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2,
|
||||
2, 28, 29, 30, 2, 2, 2, 9, 30, 9, 30, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 9, 2, 2, 2, 9, 9, 0, 2, 2, 0, 17,
|
||||
18, 19, 20, 31, 32, 33, 32, 34, 0, 0, 0, 0, 35, 0, 0, 2,
|
||||
30, 2, 0, 0, 0, 0, 0, 9, 36, 12, 15, 30, 2, 2, 9, 0,
|
||||
30, 9, 2, 30, 9, 2, 0, 37, 18, 19, 31, 0, 27, 38, 27, 39,
|
||||
0, 40, 0, 0, 0, 30, 2, 9, 9, 0, 0, 0, 2, 2, 2, 2,
|
||||
2, 41, 42, 43, 0, 0, 0, 0, 0, 12, 15, 30, 2, 2, 2, 2,
|
||||
30, 2, 30, 2, 2, 2, 2, 2, 2, 9, 2, 30, 2, 2, 0, 17,
|
||||
18, 19, 20, 21, 27, 22, 35, 24, 0, 0, 0, 0, 0, 30, 41, 41,
|
||||
44, 12, 29, 30, 2, 2, 2, 9, 30, 9, 2, 30, 2, 2, 0, 17,
|
||||
45, 0, 0, 27, 22, 0, 0, 2, 30, 30, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 46, 30, 2, 2, 9, 0, 2, 9, 2, 2, 0, 30, 9, 9,
|
||||
2, 0, 30, 9, 0, 2, 9, 0, 2, 2, 2, 2, 2, 2, 0, 0,
|
||||
23, 16, 47, 0, 48, 33, 48, 34, 0, 0, 0, 0, 35, 0, 0, 0,
|
||||
0, 15, 29, 49, 2, 2, 2, 9, 2, 9, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 0, 17, 22, 16, 23, 47, 22, 38, 22, 39,
|
||||
0, 0, 0, 27, 31, 2, 9, 0, 0, 10, 29, 30, 2, 2, 2, 9,
|
||||
2, 2, 2, 30, 2, 2, 0, 17, 45, 0, 0, 35, 47, 0, 0, 0,
|
||||
9, 50, 51, 0, 0, 0, 0, 0, 0, 11, 29, 2, 2, 2, 2, 9,
|
||||
2, 2, 2, 2, 2, 2, 52, 53, 23, 19, 20, 31, 48, 33, 48, 34,
|
||||
54, 0, 0, 0, 35, 0, 0, 0, 30, 12, 29, 30, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 9, 0, 2, 2, 2, 2, 30, 2, 2, 2, 2, 30,
|
||||
0, 2, 2, 2, 9, 0, 55, 0, 35, 23, 22, 31, 31, 18, 48, 48,
|
||||
25, 0, 23, 0, 0, 0, 0, 0, 0, 2, 0, 2, 9, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 20, 0, 0, 0, 2, 2, 56, 56, 57, 0, 0,
|
||||
18, 2, 2, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9,
|
||||
0, 58, 21, 59, 22, 22, 20, 20, 46, 21, 11, 31, 11, 2, 2, 60,
|
||||
61, 61, 61, 61, 61, 62, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
|
||||
61, 61, 61, 61, 61, 61, 61, 63, 0, 0, 0, 0, 64, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 65, 45, 59, 66, 22, 22, 67, 68, 69, 70,
|
||||
71, 2, 2, 2, 2, 2, 1, 0, 5, 2, 2, 2, 23, 20, 2, 2,
|
||||
72, 71, 73, 74, 65, 73, 29, 29, 2, 52, 22, 53, 2, 2, 2, 2,
|
||||
2, 2, 75, 76, 77, 29, 29, 78, 79, 2, 2, 2, 2, 2, 29, 45,
|
||||
0, 2, 59, 80, 0, 0, 0, 0, 30, 2, 59, 47, 0, 0, 0, 0,
|
||||
0, 2, 59, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 9,
|
||||
2, 9, 59, 0, 0, 0, 0, 0, 0, 2, 2, 81, 45, 22, 59, 20,
|
||||
48, 48, 48, 48, 15, 82, 83, 84, 85, 86, 87, 0, 0, 0, 0, 88,
|
||||
0, 9, 0, 0, 30, 0, 89, 81, 90, 2, 2, 2, 2, 9, 0, 0,
|
||||
0, 42, 42, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 13, 9, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 9, 22, 80, 45, 22, 93, 61, 0,
|
||||
0, 94, 95, 94, 94, 96, 97, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
0, 2, 2, 9, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0,
|
||||
0, 2, 2, 2, 2, 29, 0, 0, 0, 2, 2, 2, 2, 2, 9, 0,
|
||||
0, 2, 2, 2, 52, 99, 45, 0, 0, 2, 2, 100, 101, 102, 103, 61,
|
||||
63, 104, 16, 45, 22, 59, 21, 80, 48, 48, 76, 11, 11, 11, 105, 46,
|
||||
40, 11, 106, 74, 2, 2, 2, 2, 2, 2, 2, 107, 22, 20, 20, 22,
|
||||
48, 48, 22, 108, 2, 2, 2, 9, 0, 0, 0, 0, 0, 0, 109, 110,
|
||||
110, 110, 110, 0, 0, 0, 0, 0, 0, 106, 74, 2, 2, 2, 2, 2,
|
||||
2, 60, 61, 59, 25, 22, 111, 61, 2, 2, 2, 2, 107, 22, 23, 45,
|
||||
45, 102, 112, 0, 0, 0, 0, 0, 0, 2, 2, 61, 18, 48, 23, 113,
|
||||
102, 102, 102, 114, 115, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 30,
|
||||
2, 11, 46, 116, 116, 116, 11, 116, 116, 15, 116, 116, 116, 26, 0, 40,
|
||||
0, 0, 0, 117, 51, 11, 5, 0, 0, 0, 0, 0, 0, 0, 118, 0,
|
||||
0, 0, 0, 0, 0, 0, 6, 119, 120, 42, 42, 5, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 120, 120, 121, 120, 120, 120, 120, 120, 120, 120,
|
||||
120, 0, 0, 122, 0, 0, 0, 0, 0, 0, 7, 122, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 52, 98, 45, 0, 0, 2, 2, 99, 100, 101, 102, 61,
|
||||
63, 103, 16, 45, 22, 59, 21, 80, 48, 48, 76, 11, 11, 11, 104, 46,
|
||||
40, 11, 105, 74, 2, 2, 2, 2, 2, 2, 2, 106, 22, 20, 20, 22,
|
||||
48, 48, 22, 107, 2, 2, 2, 9, 0, 0, 0, 0, 0, 0, 108, 109,
|
||||
109, 109, 109, 0, 0, 0, 0, 0, 0, 105, 74, 2, 2, 2, 2, 2,
|
||||
2, 60, 61, 59, 25, 22, 110, 61, 2, 2, 2, 2, 106, 22, 23, 45,
|
||||
45, 101, 111, 0, 0, 0, 0, 0, 0, 2, 2, 61, 18, 48, 23, 112,
|
||||
101, 101, 101, 113, 114, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 30,
|
||||
2, 11, 46, 115, 115, 115, 11, 115, 115, 15, 115, 115, 115, 26, 0, 40,
|
||||
0, 0, 0, 116, 51, 11, 5, 0, 0, 0, 0, 0, 0, 0, 117, 0,
|
||||
0, 0, 0, 0, 0, 0, 6, 118, 119, 42, 42, 5, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 119, 119, 120, 119, 119, 119, 119, 119, 119, 119,
|
||||
119, 0, 0, 121, 0, 0, 0, 0, 0, 0, 7, 121, 0, 0, 0, 0,
|
||||
0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
|
||||
0, 0, 0, 0, 123, 123, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0,
|
||||
30, 0, 0, 0, 0, 0, 0, 0, 124, 0, 123, 123, 0, 0, 0, 0,
|
||||
0, 2, 53, 2, 108, 2, 10, 2, 2, 2, 65, 19, 16, 0, 0, 31,
|
||||
0, 0, 0, 0, 122, 122, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0,
|
||||
30, 0, 0, 0, 0, 0, 0, 0, 123, 0, 122, 122, 0, 0, 0, 0,
|
||||
0, 2, 53, 2, 107, 2, 10, 2, 2, 2, 65, 19, 16, 0, 0, 31,
|
||||
0, 2, 2, 0, 0, 0, 0, 0, 0, 29, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 125, 23, 23, 23, 23, 23, 23, 23, 126, 0, 0, 0, 0,
|
||||
2, 2, 2, 124, 23, 23, 23, 23, 23, 23, 23, 125, 0, 0, 0, 0,
|
||||
0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, 0, 0, 0, 0, 0,
|
||||
52, 2, 2, 2, 22, 22, 127, 116, 0, 2, 2, 2, 128, 20, 59, 20,
|
||||
113, 102, 129, 0, 0, 0, 0, 0, 0, 11, 130, 2, 2, 2, 2, 2,
|
||||
2, 2, 131, 23, 22, 20, 48, 132, 133, 134, 0, 0, 0, 0, 0, 0,
|
||||
52, 2, 2, 2, 22, 22, 126, 115, 0, 2, 2, 2, 127, 20, 59, 20,
|
||||
112, 101, 128, 0, 0, 0, 0, 0, 0, 11, 129, 2, 2, 2, 2, 2,
|
||||
2, 2, 130, 23, 22, 20, 48, 131, 132, 133, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 52, 30, 2, 2, 2, 2, 2, 2, 2, 2, 10, 22, 59,
|
||||
99, 76, 135, 136, 137, 0, 0, 0, 0, 2, 138, 2, 2, 2, 2, 139,
|
||||
0, 30, 2, 42, 5, 0, 79, 15, 2, 140, 20, 53, 128, 140, 2, 2,
|
||||
141, 10, 9, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 142, 21,
|
||||
25, 0, 0, 143, 144, 0, 0, 0, 0, 2, 65, 45, 23, 80, 47, 145,
|
||||
98, 76, 134, 135, 136, 0, 0, 0, 0, 2, 137, 2, 2, 2, 2, 138,
|
||||
0, 30, 2, 42, 5, 0, 79, 15, 2, 139, 20, 53, 127, 139, 2, 2,
|
||||
140, 10, 9, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 141, 21,
|
||||
25, 0, 0, 142, 143, 0, 0, 0, 0, 2, 65, 45, 23, 80, 47, 144,
|
||||
0, 81, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0,
|
||||
6, 120, 120, 120, 120, 121, 0, 0, 0, 2, 2, 2, 2, 2, 9, 2,
|
||||
6, 119, 119, 119, 119, 120, 0, 0, 0, 2, 2, 2, 2, 2, 9, 2,
|
||||
2, 2, 9, 2, 30, 2, 2, 2, 2, 2, 30, 2, 2, 2, 30, 9,
|
||||
0, 128, 20, 27, 31, 0, 0, 146, 147, 2, 2, 30, 2, 30, 2, 2,
|
||||
2, 2, 2, 2, 0, 14, 37, 0, 148, 2, 2, 13, 37, 0, 30, 2,
|
||||
0, 127, 20, 27, 31, 0, 0, 145, 146, 2, 2, 30, 2, 30, 2, 2,
|
||||
2, 2, 2, 2, 0, 14, 37, 0, 147, 2, 2, 13, 37, 0, 30, 2,
|
||||
2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 2, 2,
|
||||
9, 2, 2, 11, 41, 0, 0, 0, 0, 2, 2, 2, 0, 27, 22, 22,
|
||||
30, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 27, 38,
|
||||
0, 2, 2, 2, 116, 116, 116, 116, 116, 149, 2, 9, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 115, 115, 115, 115, 115, 148, 2, 9, 0, 0, 0, 0,
|
||||
0, 2, 14, 14, 0, 0, 0, 0, 0, 9, 2, 2, 9, 2, 2, 2,
|
||||
2, 30, 2, 9, 0, 30, 2, 0, 0, 150, 151, 152, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 22, 22, 20, 20, 20, 22, 22, 134, 0, 0, 0,
|
||||
0, 0, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 2, 2, 2, 2,
|
||||
2, 53, 52, 53, 0, 0, 0, 0, 154, 11, 74, 2, 2, 2, 2, 2,
|
||||
2, 30, 2, 9, 0, 30, 2, 0, 0, 149, 150, 151, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 22, 22, 20, 20, 20, 22, 22, 133, 0, 0, 0,
|
||||
0, 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 2, 2, 2, 2,
|
||||
2, 53, 52, 53, 0, 0, 0, 0, 153, 11, 74, 2, 2, 2, 2, 2,
|
||||
2, 18, 19, 21, 16, 24, 37, 0, 0, 0, 31, 0, 0, 0, 0, 0,
|
||||
0, 11, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 128, 20, 22, 155,
|
||||
22, 21, 156, 157, 2, 2, 2, 2, 2, 0, 0, 65, 158, 0, 0, 0,
|
||||
0, 11, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 127, 20, 22, 154,
|
||||
22, 21, 155, 156, 2, 2, 2, 2, 2, 0, 0, 65, 157, 0, 0, 0,
|
||||
0, 2, 13, 0, 0, 0, 0, 0, 0, 2, 65, 25, 20, 20, 20, 22,
|
||||
22, 108, 159, 0, 0, 56, 160, 31, 161, 30, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 23, 19, 22, 22, 162, 44, 0, 0, 0,
|
||||
49, 128, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 9, 2, 2,
|
||||
22, 107, 158, 0, 0, 56, 159, 31, 160, 30, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 23, 19, 22, 22, 161, 44, 0, 0, 0,
|
||||
49, 127, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 9, 2, 2,
|
||||
30, 2, 2, 2, 2, 2, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2,
|
||||
10, 18, 19, 21, 22, 163, 31, 0, 0, 11, 11, 30, 2, 2, 2, 9,
|
||||
10, 18, 19, 21, 22, 162, 31, 0, 0, 11, 11, 30, 2, 2, 2, 9,
|
||||
30, 9, 2, 30, 2, 2, 58, 17, 23, 16, 23, 47, 32, 33, 32, 34,
|
||||
0, 0, 0, 0, 35, 0, 0, 0, 2, 2, 23, 0, 11, 11, 11, 46,
|
||||
0, 11, 11, 46, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 30, 0,
|
||||
9, 2, 2, 2, 30, 45, 59, 20, 20, 31, 33, 32, 32, 25, 164, 29,
|
||||
165, 166, 37, 0, 0, 0, 0, 0, 0, 12, 26, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 65, 25, 20, 20, 20, 22, 23, 126, 15, 17, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 167, 168, 0, 0, 0, 0, 0, 0,
|
||||
0, 18, 19, 20, 20, 66, 99, 25, 161, 11, 169, 9, 0, 0, 0, 0,
|
||||
9, 2, 2, 2, 30, 45, 59, 20, 20, 31, 33, 32, 32, 25, 163, 29,
|
||||
164, 165, 37, 0, 0, 0, 0, 0, 0, 12, 26, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 65, 25, 20, 20, 20, 22, 23, 125, 15, 17, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 166, 167, 0, 0, 0, 0, 0, 0,
|
||||
0, 18, 19, 20, 20, 66, 98, 25, 160, 11, 168, 9, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 65, 25, 20, 20, 0, 48, 48, 11,
|
||||
170, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 20,
|
||||
0, 23, 19, 20, 20, 21, 16, 82, 170, 38, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 10, 171, 25, 20, 22, 22, 169, 9, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 43, 136, 23, 22, 20, 76, 21, 22, 0,
|
||||
169, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 20,
|
||||
0, 23, 19, 20, 20, 21, 16, 82, 169, 38, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 10, 170, 25, 20, 22, 22, 168, 9, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 43, 135, 23, 22, 20, 76, 21, 22, 0,
|
||||
0, 2, 2, 2, 9, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 18,
|
||||
19, 20, 21, 22, 105, 170, 37, 0, 0, 2, 2, 2, 9, 30, 0, 2,
|
||||
2, 2, 2, 30, 9, 2, 2, 2, 2, 23, 23, 18, 32, 33, 12, 172,
|
||||
166, 173, 174, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2,
|
||||
2, 65, 25, 20, 20, 0, 22, 23, 29, 108, 0, 33, 0, 0, 0, 0,
|
||||
0, 52, 20, 22, 22, 22, 140, 2, 2, 2, 175, 141, 11, 15, 176, 61,
|
||||
177, 0, 0, 1, 148, 0, 0, 0, 0, 52, 20, 22, 16, 19, 20, 2,
|
||||
2, 2, 2, 159, 159, 159, 178, 178, 178, 178, 178, 178, 15, 179, 0, 30,
|
||||
0, 22, 20, 20, 31, 22, 22, 11, 170, 0, 61, 61, 61, 61, 61, 61,
|
||||
61, 66, 21, 82, 46, 0, 0, 0, 0, 2, 2, 2, 9, 2, 30, 2,
|
||||
2, 52, 22, 22, 31, 0, 38, 22, 27, 11, 160, 180, 181, 0, 0, 0,
|
||||
0, 2, 2, 2, 30, 9, 2, 2, 2, 2, 2, 2, 2, 2, 23, 23,
|
||||
47, 22, 35, 82, 68, 0, 0, 0, 0, 2, 182, 66, 47, 0, 0, 0,
|
||||
0, 11, 183, 2, 2, 2, 2, 2, 2, 2, 2, 23, 22, 20, 31, 0,
|
||||
48, 16, 144, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 157, 0,
|
||||
0, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 186, 187, 185, 184,
|
||||
184, 188, 184, 184, 189, 190, 190, 190, 190, 190, 190, 190, 0, 0, 0, 0,
|
||||
0, 184, 184, 184, 184, 184, 191, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
22, 22, 22, 22, 22, 22, 192, 193, 194, 11, 11, 11, 46, 0, 0, 0,
|
||||
0, 29, 74, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 65, 47,
|
||||
0, 2, 2, 2, 2, 2, 9, 0, 58, 195, 20, 20, 20, 20, 20, 20,
|
||||
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0,
|
||||
40, 116, 26, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 30, 2, 2, 2, 2, 2, 0, 58,
|
||||
37, 0, 6, 120, 120, 120, 121, 0, 0, 11, 11, 11, 49, 2, 2, 2,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
46, 2, 2, 2, 2, 2, 2, 11, 11, 2, 2, 2, 2, 2, 2, 22,
|
||||
22, 2, 2, 2, 2, 2, 2, 2, 20, 2, 2, 44, 44, 44, 92, 0,
|
||||
0, O, O, O, GB, B, B, O, SB, O, SE, GB, O, O, WJ,FMPst,
|
||||
FMPst, O, CGJ, B, O, B,VMAbv,VMAbv,VMAbv, O,VMAbv, B,CMBlw,CMBlw,CMBlw,VMAbv,
|
||||
VMPst, VAbv, VPst,CMBlw, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VPst,
|
||||
VPst, VPst, H, VPre, VPst,VMBlw, O, O, VAbv, GB,VMAbv,VMPst,VMPst, O, B, VBlw,
|
||||
O, O, VPre, VPre, O, VPre, H, O, VPst,FMAbv, O,CMBlw, O, VAbv, O, VAbv,
|
||||
H, O,VMBlw,VMAbv,CMAbv, GB, GB, O, MBlw,CMAbv,CMAbv, VPst, VAbv,VMAbv, O, VPst,
|
||||
O, VPre, VPre,VMAbv, B, O, CS, CS,VMPst, B, VAbv, VAbv, B, R, O, HVM,
|
||||
O, O,FMBlw, O,CMAbv, O,CMBlw, VAbv, VBlw, B, SUB, SUB, SUB, O, SUB, SUB,
|
||||
O,FMBlw, O, B, VPst, VBlw, VPre,VMAbv,VMBlw,VMPst, IS, VAbv, MPst, MPre, MBlw, MBlw,
|
||||
B, MBlw, MBlw, VPst,VMPst,VMPst, B, MBlw, VPst, VPre, VAbv, VAbv,VMPst,VMPst,VMBlw, B,
|
||||
VMPst, VBlw, VPst, CGJ, CGJ, VPst,VMAbv,VMAbv,FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv, IS,
|
||||
FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,CMAbv,CMAbv, B, GB, B, VAbv, SUB, FPst,
|
||||
FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv,
|
||||
SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, H, B, O,SMAbv,SMAbv,SMAbv, VPst,
|
||||
IS, RK, RK, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,VMBlw,VMAbv, CS, O,FMAbv, ZWNJ,
|
||||
CGJ, WJ, WJ, WJ, O,FMPst, O, SB, SE, O, H, MPst, VPst, H,VMAbv, VAbv,
|
||||
VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv, MBlw, MPst, MBlw, H, O, VBlw,
|
||||
MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw, B, VBlw,VMAbv, B, VPre, O,
|
||||
VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O, IS,VMBlw, B,VMPst,VMAbv,VMPst,
|
||||
CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv, IS,CMAbv, O, VPst, B, R,
|
||||
R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,VMPst, O,VMAbv,CMBlw, IS, R,FMAbv,
|
||||
B, CS, CS, H,CMBlw,VMPst, H,VMPst, VAbv,VMAbv, VPst, MPst, R, MPst,CMBlw, B,
|
||||
FMBlw, CS, SUB, SUB, GB, FBlw, FBlw,CMAbv, IS, VBlw, IS, R, MBlw, GB, VAbv, R,
|
||||
VMPst, G, G, J, J, J, SB, SE, J, HR, G, G, HM, HM, HM, G,
|
||||
O, MPre, MPre, MPst,VMAbv, MBlw, VBlw, O, VBlw,
|
||||
19, 20, 21, 22, 104, 169, 37, 0, 0, 2, 2, 2, 9, 30, 0, 2,
|
||||
2, 2, 2, 30, 9, 2, 2, 2, 2, 23, 23, 18, 32, 33, 12, 171,
|
||||
165, 172, 173, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2,
|
||||
2, 65, 25, 20, 20, 0, 22, 23, 29, 107, 0, 33, 0, 0, 0, 0,
|
||||
0, 52, 20, 22, 22, 22, 139, 2, 2, 2, 174, 140, 11, 15, 175, 61,
|
||||
176, 0, 0, 1, 147, 0, 0, 0, 0, 52, 20, 22, 16, 19, 20, 2,
|
||||
2, 2, 2, 158, 158, 158, 177, 177, 177, 177, 177, 177, 15, 178, 0, 30,
|
||||
0, 16, 20, 16, 16, 0, 0, 0, 0, 22, 20, 20, 31, 22, 22, 11,
|
||||
169, 0, 61, 61, 61, 61, 61, 61, 61, 66, 21, 82, 46, 0, 0, 0,
|
||||
0, 2, 2, 2, 9, 2, 30, 2, 2, 52, 22, 22, 31, 0, 38, 22,
|
||||
27, 11, 159, 179, 180, 0, 0, 0, 0, 2, 2, 2, 30, 9, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 23, 23, 47, 22, 35, 82, 68, 0, 0, 0,
|
||||
0, 2, 181, 66, 47, 0, 0, 0, 0, 11, 182, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 23, 22, 20, 31, 0, 48, 16, 143, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 156, 0, 0, 183, 183, 183, 183, 183, 183, 183,
|
||||
183, 184, 184, 184, 185, 186, 184, 183, 183, 187, 183, 183, 188, 189, 189, 189,
|
||||
189, 189, 189, 189, 0, 0, 0, 0, 0, 183, 183, 183, 183, 183, 190, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22, 22, 22, 191, 192,
|
||||
193, 11, 11, 11, 46, 0, 0, 0, 0, 29, 74, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 65, 47, 0, 2, 2, 2, 2, 2, 9, 0,
|
||||
58, 194, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||
20, 20, 20, 20, 20, 0, 0, 0, 40, 115, 26, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
30, 2, 2, 2, 2, 2, 0, 58, 37, 0, 6, 119, 119, 119, 120, 0,
|
||||
0, 11, 11, 11, 49, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 46, 2, 2, 2, 2, 2, 2, 11,
|
||||
11, 2, 2, 2, 2, 2, 2, 22, 22, 2, 2, 2, 2, 2, 2, 2,
|
||||
20, 2, 2, 44, 44, 44, 92, 0, 0, O, O, O, GB, B, B, O,
|
||||
SB, O, SE, GB, O, O, WJ,FMPst,FMPst, O, CGJ, B, O, B,VMAbv,VMAbv,
|
||||
VMAbv, O,VMAbv, B,CMBlw,CMBlw,CMBlw,VMAbv,VMPst, VAbv, VPst,CMBlw, B, VPst, VPre, VPst,
|
||||
VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, VPst, VPst, H, VPre, VPst,VMBlw, O, O,
|
||||
VAbv, GB,VMAbv,VMPst,VMPst, O, B, VBlw, O, O, VPre, VPre, O, VPre, H, O,
|
||||
VPst,FMAbv, O,CMBlw, O, VAbv, O, VAbv, H, O,VMBlw,VMAbv,CMAbv, GB, GB, O,
|
||||
MBlw,CMAbv,CMAbv, VPst, VAbv,VMAbv, O, VPst, O, VPre, VPre,VMAbv, B, O, CS, CS,
|
||||
VMPst, B, VAbv, VAbv, B, R, O, HVM, O, O,FMBlw, O,CMAbv, O,CMBlw, VAbv,
|
||||
VBlw, B, SUB, SUB, SUB, O, SUB, SUB, O,FMBlw, O, B, VPst, VBlw, VPre,VMAbv,
|
||||
VMBlw,VMPst, IS, VAbv, MPst, MPre, MBlw, MBlw, B, MBlw, MBlw, VPst,VMPst,VMPst, B, MBlw,
|
||||
VPst, VPre, VAbv, VAbv,VMPst,VMPst,VMBlw, B,VMPst, VBlw, VPst, CGJ, CGJ, VPst,VMAbv,VMAbv,
|
||||
FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv, IS,FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,
|
||||
CMAbv,CMAbv, B, VAbv, SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre, B,
|
||||
MPre, MBlw, SUB, FAbv, FAbv, MAbv, SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, H,
|
||||
B, O,SMAbv,SMAbv,SMAbv, VPst, IS, RK, RK, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,
|
||||
VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, SB, SE, O,
|
||||
H, MPst, VPst, H,VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv,
|
||||
MBlw, MPst, MBlw, H, O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw,
|
||||
B, VBlw,VMAbv, B, VPre, O,VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O,
|
||||
IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv,
|
||||
IS,CMAbv, O, VPst, B, R, R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,VMPst,
|
||||
O,VMAbv,CMBlw, IS, R,FMAbv, B, CS, CS, H,CMBlw,VMPst, H,VMPst, VAbv,VMAbv,
|
||||
VPst, MPst, R, MPst,CMBlw, B,FMBlw, CS, SUB, SUB, GB, FBlw, FBlw,CMAbv, IS, VBlw,
|
||||
IS, R, MBlw, GB, VAbv, R,VMPst, G, G, J, J, J, SB, SE, J, HR,
|
||||
G, G, HM, HM, HM, G, O, MPre, MPre, MPst,VMAbv, MBlw, VBlw, O, VBlw,
|
||||
};
|
||||
static const uint16_t hb_use_u16[486]=
|
||||
static const uint16_t hb_use_u16[488]=
|
||||
{
|
||||
0, 0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9, 10,
|
||||
11, 12, 10, 13, 14, 10, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
||||
|
@ -631,28 +630,28 @@ static const uint16_t hb_use_u16[486]=
|
|||
31, 66, 67, 68, 10, 69, 70, 10, 71, 72, 73, 74, 75, 76, 77, 0,
|
||||
10, 10, 78, 79, 80, 81, 82, 83, 84, 85, 10, 86, 10, 87, 10, 88,
|
||||
89, 90, 10, 91, 92, 93, 2, 0, 94, 0, 10, 95, 96, 10, 97, 0,
|
||||
98, 99,100,101, 31, 10,102,103,104, 10,105,106, 10,107, 10,108,
|
||||
109,110, 2, 2,111, 10, 10,112,113, 2,114,115,116, 10,117, 10,
|
||||
118,119,120,121,122, 0, 0,123,124,125, 0,126,127,128,129, 0,
|
||||
130,131,132, 0, 0,133,134, 0,135, 0, 0, 10,136,137,138, 0,
|
||||
139, 10,140, 0, 10,141,142, 10, 10,143,144, 2,145,146,147, 10,
|
||||
148,149,150, 10, 10,151,152, 2,153, 99,154,155,156, 2, 10,157,
|
||||
10,158,159, 0,160,161,162, 2,163, 0, 0,164, 0,165, 0,166,
|
||||
166,167, 34,168,169,170, 10,171, 95, 0,172, 0, 10,173,174, 0,
|
||||
175, 2,176, 10,177, 0,178,173,179,180,181, 0, 0,182,183, 0,
|
||||
184, 10, 10,185,186,187,188,189,190, 10, 10,191,192, 0,193, 10,
|
||||
194,195,196, 10, 10,197, 10,198,199,106,200,103, 10, 34,201,202,
|
||||
203, 0,204,205, 95, 10, 10,206,207, 2,208, 21, 22,209,210,211,
|
||||
212,213,214, 10, 10,215,216,217,218, 0, 10,219,220,221,222, 0,
|
||||
200, 10, 10,223,224, 2,225,226,227,228, 10,229,230, 2,231,232,
|
||||
2, 10,141, 0, 10,233,234,104,235, 0,236,237,238,239, 10,240,
|
||||
241, 2,242, 10, 10,243,244, 0,245, 10, 10,246,247,248,249,250,
|
||||
22, 10,225,251, 8, 10, 71, 19, 10,252, 74,253,254, 10, 10,255,
|
||||
256, 2,257, 10,258,259, 10,260,261, 49, 10,262,263,264,265,265,
|
||||
265,266,267,268,265,269, 10,270,271, 2, 10,272,273, 10,274, 2,
|
||||
275,276,277,277,278,279,280, 0, 10,177, 0,281,106, 71, 95,282,
|
||||
0,283, 71,284,285, 0,286, 0,287, 2,288, 2,289,106,290, 2,
|
||||
130,130,163,163,163,130,
|
||||
10, 98, 99,100, 31, 10,101,102,103, 10,104,105, 10,106, 10,107,
|
||||
108,109, 2, 2,110, 10, 10,111,112, 2,113,114,115, 10,116, 10,
|
||||
117,118,119,120,121, 0, 0,122,123,124, 0,125,126,127,128, 0,
|
||||
129,130,131, 0, 0,132,133, 0,134, 0, 0, 10,135,136,137, 0,
|
||||
138, 10,139, 0, 10,140,141, 10, 10,142,143, 2,144,145,146, 10,
|
||||
147,148,149, 10, 10,150,151, 2,152, 98,153,154,155, 2, 10,156,
|
||||
10,157,158, 0,159,160,161, 2,162, 0, 0,163, 0,164, 0,165,
|
||||
165,166, 34,167,168,169, 10,170, 95, 0,171, 0, 10,172,173, 0,
|
||||
174, 2,175, 10,176, 0,177,172,178,179,180, 0, 0,181,182, 0,
|
||||
183, 10, 10,184,185,186,187,188,189, 10, 10,190,191, 0,192, 10,
|
||||
193,194,195, 10, 10,196, 10,197,198,105,199,102, 10, 34,200,201,
|
||||
202, 0,203,204, 95, 10, 10,205,206, 2,207, 21, 22,208,209,210,
|
||||
211,212,213, 10, 10,214,215,216,217, 0, 10,218,219,220,221, 0,
|
||||
199, 10, 10,222,223, 2,224,225,226,227, 10,228,229, 2,230,231,
|
||||
2, 10,140, 0, 10,232,233,103,234, 0,235,236,237,238, 10,239,
|
||||
240, 2,241, 10, 10,242,243, 0,244, 10, 10,245,246,247,248,249,
|
||||
250, 0, 22, 10,224,251, 8, 10, 71, 19, 10,252, 74,253,254, 10,
|
||||
10,255,256, 2,257, 10,258,259, 10,260,261, 49, 10,262,263,264,
|
||||
265,265,265,266,267,268,265,269, 10,270,271, 2, 10,272,273, 10,
|
||||
274, 2,275,276,277,277,278,279,280, 0, 10,176, 0,281,105, 71,
|
||||
95,282, 0,283, 71,284,285, 0,286, 0,287, 2,288, 2,289,105,
|
||||
290, 2,129,129,162,162,162,129,
|
||||
};
|
||||
|
||||
static inline uint8_t hb_use_b4 (const uint8_t* a, unsigned i)
|
||||
|
@ -661,7 +660,7 @@ static inline uint8_t hb_use_b4 (const uint8_t* a, unsigned i)
|
|||
}
|
||||
static inline uint8_t hb_use_get_category (unsigned u)
|
||||
{
|
||||
return u<921600 ? hb_use_u8[3265u+((hb_use_u8[937u+((hb_use_u16[((hb_use_u8[369u+((hb_use_u8[113u+((hb_use_b4(hb_use_u8,((((((((((u)>>1))>>3))>>1))>>3))>>4)))<<4)+((((((((((u)>>1))>>3))>>1))>>3))&15)])<<3)+((((((((u)>>1))>>3))>>1))&7)])<<1)+((((((u)>>1))>>3))&1)])<<3)+((((u)>>1))&7)])<<1)+((u)&1)] : O;
|
||||
return u<921600 ? hb_use_u8[3273u+((hb_use_u8[945u+((hb_use_u16[((hb_use_u8[369u+((hb_use_u8[113u+((hb_use_b4(hb_use_u8,((((((((((u)>>1))>>3))>>1))>>3))>>4)))<<4)+((((((((((u)>>1))>>3))>>1))>>3))&15)])<<3)+((((((((u)>>1))>>3))>>1))&7)])<<1)+((((((u)>>1))>>3))&1)])<<3)+((((u)>>1))&7)])<<1)+((u)&1)] : O;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
* # Date: 2015-03-12, 21:17:00 GMT [AG]
|
||||
* # Date: 2019-11-08, 23:22:00 GMT [AG]
|
||||
*
|
||||
* # Scripts-16.0.0.txt
|
||||
* # Date: 2024-04-30, 21:48:40 GMT
|
||||
* # Scripts-17.0.0.txt
|
||||
* # Date: 2025-07-24, 13:28:55 GMT
|
||||
*/
|
||||
|
||||
#include "hb.hh"
|
||||
|
|
|
@ -396,6 +396,12 @@ hb_ot_shaper_categorize (hb_script_t script,
|
|||
case HB_SCRIPT_TODHRI:
|
||||
case HB_SCRIPT_TULU_TIGALARI:
|
||||
|
||||
/* Unicode-17.0 additions */
|
||||
case HB_SCRIPT_BERIA_ERFE:
|
||||
case HB_SCRIPT_SIDETIC:
|
||||
case HB_SCRIPT_TAI_YO:
|
||||
case HB_SCRIPT_TOLONG_SIKI:
|
||||
|
||||
/* If the designer designed the font for the 'DFLT' script,
|
||||
* (or we ended up arbitrarily pick 'latn'), use the default shaper.
|
||||
* Otherwise, use the specific shaper.
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* on files with these headers:
|
||||
*
|
||||
* <meta name="updated_at" content="2024-12-06T06:35:00Z" />
|
||||
* File-Date: 2025-03-10
|
||||
* File-Date: 2025-08-25
|
||||
*/
|
||||
|
||||
#ifndef HB_OT_TAG_TABLE_HH
|
||||
|
@ -704,7 +704,7 @@ static const LangTag ot_languages3[] = {
|
|||
/*{HB_TAG('g','u','z',' '), HB_TAG('G','U','Z',' ')},*/ /* Gusii */
|
||||
{HB_TAG('g','w','i',' '), HB_TAG('A','T','H',' ')}, /* Gwichʼin -> Athapaskan */
|
||||
{HB_TAG('g','y','n',' '), HB_TAG('C','P','P',' ')}, /* Guyanese Creole English -> Creoles */
|
||||
{HB_TAG('h','a','a',' '), HB_TAG('A','T','H',' ')}, /* Han -> Athapaskan */
|
||||
{HB_TAG('h','a','a',' '), HB_TAG('A','T','H',' ')}, /* Hän -> Athapaskan */
|
||||
{HB_TAG('h','a','e',' '), HB_TAG('O','R','O',' ')}, /* Eastern Oromo -> Oromo */
|
||||
{HB_TAG('h','a','i',' '), HB_TAG('H','A','I','0')}, /* Haida [macrolanguage] */
|
||||
{HB_TAG('h','a','k',' '), HB_TAG('Z','H','S',' ')}, /* Hakka Chinese -> Chinese, Simplified */
|
||||
|
@ -921,7 +921,7 @@ static const LangTag ot_languages3[] = {
|
|||
{HB_TAG('k','v','t',' '), HB_TAG('K','R','N',' ')}, /* Lahta Karen -> Karen */
|
||||
{HB_TAG('k','v','u',' '), HB_TAG('K','R','N',' ')}, /* Yinbaw Karen -> Karen */
|
||||
{HB_TAG('k','v','y',' '), HB_TAG('K','R','N',' ')}, /* Yintale Karen -> Karen */
|
||||
/*{HB_TAG('k','w','k',' '), HB_TAG('K','W','K',' ')},*/ /* Kwakiutl -> Kwakʼwala */
|
||||
/*{HB_TAG('k','w','k',' '), HB_TAG('K','W','K',' ')},*/ /* Kwakʼwala */
|
||||
{HB_TAG('k','w','w',' '), HB_TAG('C','P','P',' ')}, /* Kwinti -> Creoles */
|
||||
{HB_TAG('k','w','y',' '), HB_TAG('K','O','N','0')}, /* San Salvador Kongo -> Kongo */
|
||||
{HB_TAG('k','x','c',' '), HB_TAG('K','M','S',' ')}, /* Konso -> Komso */
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
|
||||
namespace OT {
|
||||
|
||||
using rebase_tent_result_scratch_t = hb_pair_t<rebase_tent_result_t, rebase_tent_result_t>;
|
||||
|
||||
/* https://docs.microsoft.com/en-us/typography/opentype/spec/otvarcommonformats#tuplevariationheader */
|
||||
struct TupleVariationHeader
|
||||
{
|
||||
|
@ -320,28 +322,31 @@ struct tuple_delta_t
|
|||
return *this;
|
||||
}
|
||||
|
||||
hb_vector_t<tuple_delta_t> change_tuple_var_axis_limit (hb_tag_t axis_tag, Triple axis_limit,
|
||||
TripleDistances axis_triple_distances) const
|
||||
void change_tuple_var_axis_limit (hb_tag_t axis_tag, Triple axis_limit,
|
||||
TripleDistances axis_triple_distances,
|
||||
hb_vector_t<tuple_delta_t>& out,
|
||||
rebase_tent_result_scratch_t &scratch) const
|
||||
{
|
||||
hb_vector_t<tuple_delta_t> out;
|
||||
out.reset ();
|
||||
Triple *tent;
|
||||
if (!axis_tuples.has (axis_tag, &tent))
|
||||
{
|
||||
out.push (*this);
|
||||
return out;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((tent->minimum < 0.0 && tent->maximum > 0.0) ||
|
||||
!(tent->minimum <= tent->middle && tent->middle <= tent->maximum))
|
||||
return out;
|
||||
return;
|
||||
|
||||
if (tent->middle == 0.0)
|
||||
{
|
||||
out.push (*this);
|
||||
return out;
|
||||
return;
|
||||
}
|
||||
|
||||
rebase_tent_result_t solutions = rebase_tent (*tent, axis_limit, axis_triple_distances);
|
||||
rebase_tent_result_t &solutions = scratch.first;
|
||||
rebase_tent (*tent, axis_limit, axis_triple_distances, solutions, scratch.second);
|
||||
for (auto &t : solutions)
|
||||
{
|
||||
tuple_delta_t new_var = *this;
|
||||
|
@ -353,8 +358,6 @@ struct tuple_delta_t
|
|||
new_var *= t.first;
|
||||
out.push (std::move (new_var));
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
bool compile_peak_coords (const hb_map_t& axes_index_map,
|
||||
|
@ -402,7 +405,7 @@ struct tuple_delta_t
|
|||
unsigned cur_axis_count = axes_index_map.get_population ();
|
||||
/* allocate enough memory: 1 peak + 2 intermediate coords + fixed header size */
|
||||
unsigned alloc_len = 3 * cur_axis_count * (F2DOT14::static_size) + 4;
|
||||
if (unlikely (!compiled_tuple_header.resize (alloc_len))) return false;
|
||||
if (unlikely (!compiled_tuple_header.resize (alloc_len, false))) return false;
|
||||
|
||||
unsigned flag = 0;
|
||||
/* skip the first 4 header bytes: variationDataSize+tupleIndex */
|
||||
|
@ -535,7 +538,7 @@ struct tuple_delta_t
|
|||
if (y_deltas)
|
||||
alloc_len *= 2;
|
||||
|
||||
if (unlikely (!compiled_deltas.resize (alloc_len))) return false;
|
||||
if (unlikely (!compiled_deltas.resize (alloc_len, false))) return false;
|
||||
|
||||
unsigned encoded_len = compile_deltas (compiled_deltas, rounded_deltas);
|
||||
|
||||
|
@ -565,14 +568,17 @@ struct tuple_delta_t
|
|||
return TupleValues::compile (deltas, encoded_bytes);
|
||||
}
|
||||
|
||||
bool calc_inferred_deltas (const contour_point_vector_t& orig_points)
|
||||
bool calc_inferred_deltas (const contour_point_vector_t& orig_points,
|
||||
hb_vector_t<unsigned> &scratch)
|
||||
{
|
||||
unsigned point_count = orig_points.length;
|
||||
if (point_count != indices.length)
|
||||
return false;
|
||||
|
||||
unsigned ref_count = 0;
|
||||
hb_vector_t<unsigned> end_points;
|
||||
|
||||
hb_vector_t<unsigned> &end_points = scratch;
|
||||
end_points.reset ();
|
||||
|
||||
for (unsigned i = 0; i < point_count; i++)
|
||||
{
|
||||
|
@ -586,7 +592,7 @@ struct tuple_delta_t
|
|||
return true;
|
||||
if (unlikely (end_points.in_error ())) return false;
|
||||
|
||||
hb_set_t inferred_idxes;
|
||||
hb_bit_set_t inferred_idxes;
|
||||
unsigned start_point = 0;
|
||||
for (unsigned end_point : end_points)
|
||||
{
|
||||
|
@ -926,6 +932,9 @@ struct TupleVariationData
|
|||
const hb_array_t<const F2DOT14> shared_tuples,
|
||||
bool is_composite_glyph)
|
||||
{
|
||||
hb_vector_t<unsigned> private_indices;
|
||||
hb_vector_t<int> deltas_x;
|
||||
hb_vector_t<int> deltas_y;
|
||||
do
|
||||
{
|
||||
const HBUINT8 *p = iterator.get_serialized_data ();
|
||||
|
@ -933,12 +942,12 @@ struct TupleVariationData
|
|||
if (unlikely (!iterator.var_data_bytes.check_range (p, length)))
|
||||
return false;
|
||||
|
||||
hb_hashmap_t<hb_tag_t, Triple> axis_tuples;
|
||||
hb_hashmap_t<hb_tag_t, Triple> axis_tuples;
|
||||
if (!iterator.current_tuple->unpack_axis_tuples (iterator.get_axis_count (), shared_tuples, axes_old_index_tag_map, axis_tuples)
|
||||
|| axis_tuples.is_empty ())
|
||||
return false;
|
||||
|
||||
hb_vector_t<unsigned> private_indices;
|
||||
private_indices.reset ();
|
||||
bool has_private_points = iterator.current_tuple->has_private_points ();
|
||||
const HBUINT8 *end = p + length;
|
||||
if (has_private_points &&
|
||||
|
@ -949,13 +958,10 @@ struct TupleVariationData
|
|||
bool apply_to_all = (indices.length == 0);
|
||||
unsigned num_deltas = apply_to_all ? point_count : indices.length;
|
||||
|
||||
hb_vector_t<int> deltas_x;
|
||||
|
||||
if (unlikely (!deltas_x.resize (num_deltas, false) ||
|
||||
!TupleVariationData::decompile_deltas (p, deltas_x, end)))
|
||||
return false;
|
||||
|
||||
hb_vector_t<int> deltas_y;
|
||||
if (is_gvar)
|
||||
{
|
||||
if (unlikely (!deltas_y.resize (num_deltas, false) ||
|
||||
|
@ -1049,6 +1055,10 @@ struct TupleVariationData
|
|||
for (auto t : normalized_axes_location.keys ())
|
||||
axis_tags.push (t);
|
||||
|
||||
// Reused vectors for reduced malloc pressure.
|
||||
rebase_tent_result_scratch_t scratch;
|
||||
hb_vector_t<tuple_delta_t> out;
|
||||
|
||||
axis_tags.qsort (_cmp_axis_tag);
|
||||
for (auto axis_tag : axis_tags)
|
||||
{
|
||||
|
@ -1062,7 +1072,7 @@ struct TupleVariationData
|
|||
hb_vector_t<tuple_delta_t> new_vars;
|
||||
for (const tuple_delta_t& var : tuple_vars)
|
||||
{
|
||||
hb_vector_t<tuple_delta_t> out = var.change_tuple_var_axis_limit (axis_tag, *axis_limit, axis_triple_distances);
|
||||
var.change_tuple_var_axis_limit (axis_tag, *axis_limit, axis_triple_distances, out, scratch);
|
||||
if (!out) continue;
|
||||
|
||||
unsigned new_len = new_vars.length + out.length;
|
||||
|
@ -1084,9 +1094,12 @@ struct TupleVariationData
|
|||
bool merge_tuple_variations (contour_point_vector_t* contour_points = nullptr)
|
||||
{
|
||||
hb_vector_t<tuple_delta_t> new_vars;
|
||||
// The pre-allocation is essential for address stability of pointers
|
||||
// we store in the hashmap.
|
||||
if (unlikely (!new_vars.alloc (tuple_vars.length)))
|
||||
return false;
|
||||
hb_hashmap_t<const hb_hashmap_t<hb_tag_t, Triple>*, unsigned> m;
|
||||
unsigned i = 0;
|
||||
for (const tuple_delta_t& var : tuple_vars)
|
||||
for (tuple_delta_t& var : tuple_vars)
|
||||
{
|
||||
/* if all axes are pinned, drop the tuple variation */
|
||||
if (var.axis_tuples.is_empty ())
|
||||
|
@ -1106,13 +1119,17 @@ struct TupleVariationData
|
|||
}
|
||||
else
|
||||
{
|
||||
new_vars.push (var);
|
||||
if (!m.set (&(var.axis_tuples), i))
|
||||
auto *new_var = new_vars.push ();
|
||||
if (unlikely (new_vars.in_error ()))
|
||||
return false;
|
||||
hb_swap (*new_var, var);
|
||||
if (unlikely (!m.set (&(new_var->axis_tuples), new_vars.length - 1)))
|
||||
return false;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
tuple_vars.fini ();
|
||||
m.fini (); // Just in case, since it points into new_vars data.
|
||||
// Shouldn't be necessary though, since we only move new_vars, not its
|
||||
// contents.
|
||||
tuple_vars = std::move (new_vars);
|
||||
return true;
|
||||
}
|
||||
|
@ -1172,10 +1189,11 @@ struct TupleVariationData
|
|||
}
|
||||
}
|
||||
|
||||
bool calc_inferred_deltas (const contour_point_vector_t& contour_points)
|
||||
bool calc_inferred_deltas (const contour_point_vector_t& contour_points,
|
||||
hb_vector_t<unsigned> &scratch)
|
||||
{
|
||||
for (tuple_delta_t& var : tuple_vars)
|
||||
if (!var.calc_inferred_deltas (contour_points))
|
||||
if (!var.calc_inferred_deltas (contour_points, scratch))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
@ -1202,8 +1220,11 @@ struct TupleVariationData
|
|||
return false;
|
||||
/* compute inferred deltas only for gvar */
|
||||
if (contour_points)
|
||||
if (!calc_inferred_deltas (*contour_points))
|
||||
return false;
|
||||
{
|
||||
hb_vector_t<unsigned> scratch;
|
||||
if (!calc_inferred_deltas (*contour_points, scratch))
|
||||
return false;
|
||||
}
|
||||
|
||||
/* if iup delta opt is on, contour_points can't be null */
|
||||
if (optimize && !contour_points)
|
||||
|
@ -1731,30 +1752,28 @@ struct item_variations_t
|
|||
|
||||
struct combined_gain_idx_tuple_t
|
||||
{
|
||||
int gain;
|
||||
unsigned idx_1;
|
||||
unsigned idx_2;
|
||||
uint64_t encoded;
|
||||
|
||||
combined_gain_idx_tuple_t () = default;
|
||||
combined_gain_idx_tuple_t (int gain_, unsigned i, unsigned j)
|
||||
:gain (gain_), idx_1 (i), idx_2 (j) {}
|
||||
combined_gain_idx_tuple_t (unsigned gain, unsigned i, unsigned j)
|
||||
: encoded ((uint64_t (0xFFFFFF - gain) << 40) | (uint64_t (i) << 20) | uint64_t (j))
|
||||
{
|
||||
assert (gain < 0xFFFFFF);
|
||||
assert (i < 0xFFFFFFF && j < 0xFFFFFFF);
|
||||
}
|
||||
|
||||
bool operator < (const combined_gain_idx_tuple_t& o)
|
||||
{
|
||||
if (gain != o.gain)
|
||||
return gain < o.gain;
|
||||
|
||||
if (idx_1 != o.idx_1)
|
||||
return idx_1 < o.idx_1;
|
||||
|
||||
return idx_2 < o.idx_2;
|
||||
return encoded < o.encoded;
|
||||
}
|
||||
|
||||
bool operator <= (const combined_gain_idx_tuple_t& o)
|
||||
{
|
||||
if (*this < o) return true;
|
||||
return gain == o.gain && idx_1 == o.idx_1 && idx_2 == o.idx_2;
|
||||
return encoded <= o.encoded;
|
||||
}
|
||||
|
||||
unsigned idx_1 () const { return (encoded >> 20) & 0xFFFFF; };
|
||||
unsigned idx_2 () const { return encoded & 0xFFFFF; };
|
||||
};
|
||||
|
||||
bool as_item_varstore (bool optimize=true, bool use_no_variation_idx=true)
|
||||
|
@ -1839,7 +1858,7 @@ struct item_variations_t
|
|||
if (!front_mapping.set ((major<<16) + minor, &row))
|
||||
return false;
|
||||
|
||||
hb_vector_t<uint8_t> chars = delta_row_encoding_t::get_row_chars (row);
|
||||
auto chars = delta_row_encoding_t::get_row_chars (row);
|
||||
if (!chars) return false;
|
||||
|
||||
if (delta_rows_map.has (&row))
|
||||
|
@ -1874,7 +1893,8 @@ struct item_variations_t
|
|||
|
||||
/* main algorithm: repeatedly pick 2 best encodings to combine, and combine
|
||||
* them */
|
||||
hb_priority_queue_t<combined_gain_idx_tuple_t> queue;
|
||||
using item_t = hb_priority_queue_t<combined_gain_idx_tuple_t>::item_t;
|
||||
hb_vector_t<item_t> queue_items;
|
||||
unsigned num_todos = encoding_objs.length;
|
||||
for (unsigned i = 0; i < num_todos; i++)
|
||||
{
|
||||
|
@ -1882,16 +1902,25 @@ struct item_variations_t
|
|||
{
|
||||
int combining_gain = encoding_objs.arrayZ[i].gain_from_merging (encoding_objs.arrayZ[j]);
|
||||
if (combining_gain > 0)
|
||||
queue.insert (combined_gain_idx_tuple_t (-combining_gain, i, j), 0);
|
||||
{
|
||||
auto item = item_t (combined_gain_idx_tuple_t (combining_gain, i, j), 0);
|
||||
queue_items.push (item);
|
||||
}
|
||||
|
||||
// Some heuristic to reduce work we do at the expense of less optimal result.
|
||||
if (num_todos - j > 8 && combining_gain > (int) encoding_objs[j].get_gain ())
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
hb_set_t removed_todo_idxes;
|
||||
hb_priority_queue_t<combined_gain_idx_tuple_t> queue (std::move (queue_items));
|
||||
|
||||
hb_bit_set_t removed_todo_idxes;
|
||||
while (queue)
|
||||
{
|
||||
auto t = queue.pop_minimum ().first;
|
||||
unsigned i = t.idx_1;
|
||||
unsigned j = t.idx_2;
|
||||
unsigned i = t.idx_1 ();
|
||||
unsigned j = t.idx_2 ();
|
||||
|
||||
if (removed_todo_idxes.has (i) || removed_todo_idxes.has (j))
|
||||
continue;
|
||||
|
@ -1902,17 +1931,7 @@ struct item_variations_t
|
|||
removed_todo_idxes.add (i);
|
||||
removed_todo_idxes.add (j);
|
||||
|
||||
hb_vector_t<uint8_t> combined_chars;
|
||||
if (!combined_chars.alloc (encoding.chars.length))
|
||||
return false;
|
||||
|
||||
for (unsigned idx = 0; idx < encoding.chars.length; idx++)
|
||||
{
|
||||
uint8_t v = hb_max (encoding.chars.arrayZ[idx], other_encoding.chars.arrayZ[idx]);
|
||||
combined_chars.push (v);
|
||||
}
|
||||
|
||||
delta_row_encoding_t combined_encoding_obj (std::move (combined_chars));
|
||||
delta_row_encoding_t combined_encoding_obj (std::move (encoding.combine_chars (other_encoding)));
|
||||
for (const auto& row : hb_concat (encoding.items, other_encoding.items))
|
||||
combined_encoding_obj.add_row (row);
|
||||
|
||||
|
@ -1921,8 +1940,15 @@ struct item_variations_t
|
|||
if (removed_todo_idxes.has (idx)) continue;
|
||||
|
||||
const delta_row_encoding_t& obj = encoding_objs.arrayZ[idx];
|
||||
if (obj.chars == combined_chars)
|
||||
// In the unlikely event that the same encoding exists already, combine it.
|
||||
if (obj.width == combined_encoding_obj.width && obj.chars == combined_encoding_obj.chars)
|
||||
{
|
||||
// This is straight port from fonttools algorithm. I added this branch there
|
||||
// because I thought it can happen. But looks like we never get in here in
|
||||
// practice. I'm not confident enough to remove it though; in theory it can
|
||||
// happen. I think it's just that our tests are not extensive enough to hit
|
||||
// this path.
|
||||
|
||||
for (const auto& row : obj.items)
|
||||
combined_encoding_obj.add_row (row);
|
||||
|
||||
|
@ -1932,7 +1958,7 @@ struct item_variations_t
|
|||
|
||||
int combined_gain = combined_encoding_obj.gain_from_merging (obj);
|
||||
if (combined_gain > 0)
|
||||
queue.insert (combined_gain_idx_tuple_t (-combined_gain, idx, encoding_objs.length), 0);
|
||||
queue.insert (combined_gain_idx_tuple_t (combined_gain, idx, encoding_objs.length), 0);
|
||||
}
|
||||
|
||||
encoding_objs.push (std::move (combined_encoding_obj));
|
||||
|
@ -1949,7 +1975,7 @@ struct item_variations_t
|
|||
}
|
||||
|
||||
/* sort again based on width, make result deterministic */
|
||||
encodings.qsort (delta_row_encoding_t::cmp_width);
|
||||
encodings.qsort ();
|
||||
|
||||
return compile_varidx_map (front_mapping);
|
||||
}
|
||||
|
|
|
@ -42,57 +42,62 @@ struct index_map_subset_plan_t
|
|||
VORG_INDEX
|
||||
};
|
||||
|
||||
void init (const DeltaSetIndexMap &index_map,
|
||||
void init (const DeltaSetIndexMap *index_map,
|
||||
hb_inc_bimap_t &outer_map,
|
||||
hb_vector_t<hb_set_t *> &inner_sets,
|
||||
const hb_subset_plan_t *plan,
|
||||
bool bypass_empty = true)
|
||||
{
|
||||
map_count = 0;
|
||||
outer_bit_count = 0;
|
||||
inner_bit_count = 1;
|
||||
max_inners.init ();
|
||||
output_map.init ();
|
||||
|
||||
if (bypass_empty && !index_map.get_map_count ()) return;
|
||||
if (bypass_empty && (!index_map || !index_map->get_map_count ())) return;
|
||||
|
||||
unsigned int last_val = (unsigned int)-1;
|
||||
hb_codepoint_t last_gid = HB_CODEPOINT_INVALID;
|
||||
|
||||
outer_bit_count = (index_map.get_width () * 8) - index_map.get_inner_bit_count ();
|
||||
max_inners.resize (inner_sets.length);
|
||||
for (unsigned i = 0; i < inner_sets.length; i++) max_inners[i] = 0;
|
||||
|
||||
/* Search backwards for a map value different from the last map value */
|
||||
auto &new_to_old_gid_list = plan->new_to_old_gid_list;
|
||||
unsigned count = new_to_old_gid_list.length;
|
||||
for (unsigned j = count; j; j--)
|
||||
if (!index_map)
|
||||
{
|
||||
hb_codepoint_t gid = new_to_old_gid_list.arrayZ[j - 1].first;
|
||||
hb_codepoint_t old_gid = new_to_old_gid_list.arrayZ[j - 1].second;
|
||||
|
||||
unsigned int v = index_map.map (old_gid);
|
||||
if (last_gid == HB_CODEPOINT_INVALID)
|
||||
map_count = new_to_old_gid_list.tail ().first + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (unsigned j = count; j; j--)
|
||||
{
|
||||
last_val = v;
|
||||
last_gid = gid;
|
||||
continue;
|
||||
hb_codepoint_t gid = new_to_old_gid_list.arrayZ[j - 1].first;
|
||||
hb_codepoint_t old_gid = new_to_old_gid_list.arrayZ[j - 1].second;
|
||||
|
||||
unsigned int v = index_map->map (old_gid);
|
||||
if (last_gid == HB_CODEPOINT_INVALID)
|
||||
{
|
||||
last_val = v;
|
||||
last_gid = gid;
|
||||
continue;
|
||||
}
|
||||
if (v != last_val)
|
||||
break;
|
||||
|
||||
last_gid = gid;
|
||||
}
|
||||
if (v != last_val)
|
||||
break;
|
||||
|
||||
last_gid = gid;
|
||||
|
||||
if (unlikely (last_gid == (hb_codepoint_t)-1)) return;
|
||||
map_count = last_gid + 1;
|
||||
}
|
||||
|
||||
if (unlikely (last_gid == (hb_codepoint_t)-1)) return;
|
||||
map_count = last_gid + 1;
|
||||
for (auto _ : plan->new_to_old_gid_list)
|
||||
{
|
||||
hb_codepoint_t gid = _.first;
|
||||
if (gid >= map_count) break;
|
||||
|
||||
hb_codepoint_t old_gid = _.second;
|
||||
unsigned int v = index_map.map (old_gid);
|
||||
unsigned int v = index_map ? index_map->map (old_gid): old_gid;
|
||||
unsigned int outer = v >> 16;
|
||||
unsigned int inner = v & 0xFFFF;
|
||||
outer_map.add (outer);
|
||||
|
@ -113,6 +118,9 @@ struct index_map_subset_plan_t
|
|||
const hb_vector_t<hb_inc_bimap_t> &inner_maps,
|
||||
const hb_subset_plan_t *plan)
|
||||
{
|
||||
outer_bit_count = 1;
|
||||
inner_bit_count = 1;
|
||||
|
||||
for (unsigned int i = 0; i < max_inners.length; i++)
|
||||
{
|
||||
if (inner_maps[i].get_population () == 0) continue;
|
||||
|
@ -128,9 +136,13 @@ struct index_map_subset_plan_t
|
|||
|
||||
if (unlikely (new_gid >= map_count)) break;
|
||||
|
||||
uint32_t v = input_map->map (old_gid);
|
||||
unsigned int outer = v >> 16;
|
||||
output_map.arrayZ[new_gid] = (outer_map[outer] << 16) | (inner_maps[outer][v & 0xFFFF]);
|
||||
uint32_t v = input_map? input_map->map (old_gid) : old_gid;
|
||||
unsigned outer = v >> 16;
|
||||
unsigned new_outer = outer_map[outer];
|
||||
unsigned bit_count = (new_outer == 0) ? 1 : hb_bit_storage (new_outer);
|
||||
outer_bit_count = hb_max (bit_count, outer_bit_count);
|
||||
|
||||
output_map.arrayZ[new_gid] = (new_outer << 16) | (inner_maps[outer][v & 0xFFFF]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,8 +216,8 @@ struct hvarvvar_subset_plan_t
|
|||
if (unlikely (!index_map_plans.length || !inner_sets.length || !inner_maps.length)) return;
|
||||
|
||||
bool retain_adv_map = false;
|
||||
index_map_plans[0].init (*index_maps[0], outer_map, inner_sets, plan, false);
|
||||
if (index_maps[0] == &Null (DeltaSetIndexMap))
|
||||
index_map_plans[0].init (index_maps[0], outer_map, inner_sets, plan, false);
|
||||
if (!index_maps[0])
|
||||
{
|
||||
retain_adv_map = plan->flags & HB_SUBSET_FLAGS_RETAIN_GIDS;
|
||||
outer_map.add (0);
|
||||
|
@ -215,7 +227,7 @@ struct hvarvvar_subset_plan_t
|
|||
}
|
||||
|
||||
for (unsigned int i = 1; i < index_maps.length; i++)
|
||||
index_map_plans[i].init (*index_maps[i], outer_map, inner_sets, plan);
|
||||
index_map_plans[i].init (index_maps[i], outer_map, inner_sets, plan);
|
||||
|
||||
outer_map.sort ();
|
||||
|
||||
|
@ -303,9 +315,14 @@ struct HVARVVAR
|
|||
|
||||
void listup_index_maps (hb_vector_t<const DeltaSetIndexMap *> &index_maps) const
|
||||
{
|
||||
index_maps.push (&(this+advMap));
|
||||
index_maps.push (&(this+lsbMap));
|
||||
index_maps.push (&(this+rsbMap));
|
||||
if (advMap) index_maps.push (&(this+advMap));
|
||||
else index_maps.push (nullptr);
|
||||
|
||||
if (lsbMap) index_maps.push (&(this+lsbMap));
|
||||
else index_maps.push (nullptr);
|
||||
|
||||
if (rsbMap) index_maps.push (&(this+rsbMap));
|
||||
else index_maps.push (nullptr);
|
||||
}
|
||||
|
||||
bool serialize_index_maps (hb_serialize_context_t *c,
|
||||
|
@ -428,7 +445,8 @@ struct VVAR : HVARVVAR {
|
|||
void listup_index_maps (hb_vector_t<const DeltaSetIndexMap *> &index_maps) const
|
||||
{
|
||||
HVARVVAR::listup_index_maps (index_maps);
|
||||
index_maps.push (&(this+vorgMap));
|
||||
if (vorgMap) index_maps.push (&(this+vorgMap));
|
||||
else index_maps.push (nullptr);
|
||||
}
|
||||
|
||||
bool serialize_index_maps (hb_serialize_context_t *c,
|
||||
|
|
|
@ -45,12 +45,22 @@
|
|||
template <typename K>
|
||||
struct hb_priority_queue_t
|
||||
{
|
||||
private:
|
||||
public:
|
||||
typedef hb_pair_t<K, unsigned> item_t;
|
||||
|
||||
private:
|
||||
hb_vector_t<item_t> heap;
|
||||
|
||||
public:
|
||||
|
||||
hb_priority_queue_t () = default;
|
||||
hb_priority_queue_t (hb_vector_t<item_t>&& other) : heap (std::move (other))
|
||||
{
|
||||
// Heapify the vector.
|
||||
for (int i = (heap.length / 2) - 1; i >= 0; i--)
|
||||
bubble_down (i);
|
||||
}
|
||||
|
||||
void reset () { heap.resize (0); }
|
||||
|
||||
bool in_error () const { return heap.in_error (); }
|
||||
|
|
|
@ -223,6 +223,10 @@ HB_END_DECLS
|
|||
* @HB_SCRIPT_SUNUWAR: `Sunu`, Since: 10.0.0
|
||||
* @HB_SCRIPT_TODHRI: `Todr`, Since: 10.0.0
|
||||
* @HB_SCRIPT_TULU_TIGALARI: `Tutg`, Since: 10.0.0
|
||||
* @HB_SCRIPT_BERIA_ERFE: `Berf`, Since: 11.5.0
|
||||
* @HB_SCRIPT_SIDETIC: `Sidt`, Since: 11.5.0
|
||||
* @HB_SCRIPT_TAI_YO: `Tayo`, Since: 11.5.0
|
||||
* @HB_SCRIPT_TOLONG_SIKI: `Tols`, Since: 11.5.0
|
||||
* @HB_SCRIPT_INVALID: No script set
|
||||
*
|
||||
* Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
|
||||
|
@ -461,6 +465,14 @@ typedef enum
|
|||
HB_SCRIPT_TODHRI = HB_TAG ('T','o','d','r'), /*16.0*/
|
||||
HB_SCRIPT_TULU_TIGALARI = HB_TAG ('T','u','t','g'), /*16.0*/
|
||||
|
||||
/*
|
||||
* Since REPLACEME
|
||||
*/
|
||||
HB_SCRIPT_BERIA_ERFE = HB_TAG ('B','e','r','f'), /*17.0*/
|
||||
HB_SCRIPT_SIDETIC = HB_TAG ('S','i','d','t'), /*17.0*/
|
||||
HB_SCRIPT_TAI_YO = HB_TAG ('T','a','y','o'), /*17.0*/
|
||||
HB_SCRIPT_TOLONG_SIKI = HB_TAG ('T','o','l','s'), /*17.0*/
|
||||
|
||||
/* No script set. */
|
||||
HB_SCRIPT_INVALID = HB_TAG_NONE,
|
||||
|
||||
|
|
|
@ -62,9 +62,10 @@ static inline double supportScalar (double coord, const Triple &tent)
|
|||
return (end - coord) / (end - peak);
|
||||
}
|
||||
|
||||
static inline rebase_tent_result_t
|
||||
_solve (Triple tent, Triple axisLimit, bool negative = false)
|
||||
static inline void
|
||||
_solve (Triple tent, Triple axisLimit, rebase_tent_result_t &out, bool negative = false)
|
||||
{
|
||||
out.reset();
|
||||
double axisMin = axisLimit.minimum;
|
||||
double axisDef = axisLimit.middle;
|
||||
double axisMax = axisLimit.maximum;
|
||||
|
@ -75,14 +76,12 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
|
|||
// Mirror the problem such that axisDef <= peak
|
||||
if (axisDef > peak)
|
||||
{
|
||||
rebase_tent_result_t vec = _solve (_reverse_negate (tent),
|
||||
_reverse_negate (axisLimit),
|
||||
!negative);
|
||||
_solve (_reverse_negate (tent), _reverse_negate (axisLimit), out, !negative);
|
||||
|
||||
for (auto &p : vec)
|
||||
for (auto &p : out)
|
||||
p = hb_pair (p.first, _reverse_negate (p.second));
|
||||
|
||||
return vec;
|
||||
return;
|
||||
}
|
||||
// axisDef <= peak
|
||||
|
||||
|
@ -98,7 +97,7 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
|
|||
* axisMin axisDef axisMax lower upper
|
||||
*/
|
||||
if (axisMax <= lower && axisMax < peak)
|
||||
return rebase_tent_result_t{}; // No overlap
|
||||
return; // No overlap
|
||||
|
||||
/* case 2: Only the peak and outermost bound fall outside the new limit;
|
||||
* we keep the deltaset, update peak and outermost bound and scale deltas
|
||||
|
@ -133,18 +132,18 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
|
|||
double mult = supportScalar (axisMax, tent);
|
||||
tent = Triple{lower, axisMax, axisMax};
|
||||
|
||||
rebase_tent_result_t vec = _solve (tent, axisLimit);
|
||||
_solve (tent, axisLimit, out);
|
||||
|
||||
for (auto &p : vec)
|
||||
for (auto &p : out)
|
||||
p = hb_pair (p.first * mult, p.second);
|
||||
|
||||
return vec;
|
||||
return;
|
||||
}
|
||||
|
||||
// lower <= axisDef <= peak <= axisMax
|
||||
|
||||
double gain = supportScalar (axisDef, tent);
|
||||
rebase_tent_result_t out {hb_pair (gain, Triple{})};
|
||||
out.push(hb_pair (gain, Triple{}));
|
||||
|
||||
// First, the positive side
|
||||
|
||||
|
@ -362,8 +361,6 @@ _solve (Triple tent, Triple axisLimit, bool negative = false)
|
|||
out.push (hb_pair (scalar1 - gain, loc1));
|
||||
out.push (hb_pair (scalar2 - gain, loc2));
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
static inline TripleDistances _reverse_triple_distances (const TripleDistances &v)
|
||||
|
@ -405,18 +402,21 @@ double renormalizeValue (double v, const Triple &triple,
|
|||
return (-v_distance) /total_distance;
|
||||
}
|
||||
|
||||
rebase_tent_result_t
|
||||
rebase_tent (Triple tent, Triple axisLimit, TripleDistances axis_triple_distances)
|
||||
void
|
||||
rebase_tent (Triple tent, Triple axisLimit, TripleDistances axis_triple_distances,
|
||||
rebase_tent_result_t &out,
|
||||
rebase_tent_result_t &scratch)
|
||||
{
|
||||
assert (-1.0 <= axisLimit.minimum && axisLimit.minimum <= axisLimit.middle && axisLimit.middle <= axisLimit.maximum && axisLimit.maximum <= +1.0);
|
||||
assert (-2.0 <= tent.minimum && tent.minimum <= tent.middle && tent.middle <= tent.maximum && tent.maximum <= +2.0);
|
||||
assert (tent.middle != 0.0);
|
||||
|
||||
rebase_tent_result_t sols = _solve (tent, axisLimit);
|
||||
rebase_tent_result_t &sols = scratch;
|
||||
_solve (tent, axisLimit, sols);
|
||||
|
||||
auto n = [&axisLimit, &axis_triple_distances] (double v) { return renormalizeValue (v, axisLimit, axis_triple_distances); };
|
||||
|
||||
rebase_tent_result_t out;
|
||||
out.reset();
|
||||
for (auto &p : sols)
|
||||
{
|
||||
if (!p.first) continue;
|
||||
|
@ -429,6 +429,4 @@ rebase_tent (Triple tent, Triple axisLimit, TripleDistances axis_triple_distance
|
|||
out.push (hb_pair (p.first,
|
||||
Triple{n (t.minimum), n (t.middle), n (t.maximum)}));
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
|
|
@ -42,10 +42,9 @@ struct TripleDistances
|
|||
double positive;
|
||||
};
|
||||
|
||||
struct Triple {
|
||||
|
||||
Triple () :
|
||||
minimum (0.0), middle (0.0), maximum (0.0) {}
|
||||
struct Triple
|
||||
{
|
||||
Triple () = default;
|
||||
|
||||
Triple (double minimum_, double middle_, double maximum_) :
|
||||
minimum (minimum_), middle (middle_), maximum (maximum_) {}
|
||||
|
@ -81,10 +80,9 @@ struct Triple {
|
|||
return current;
|
||||
}
|
||||
|
||||
|
||||
double minimum;
|
||||
double middle;
|
||||
double maximum;
|
||||
double minimum = 0;
|
||||
double middle = 0;
|
||||
double maximum = 0;
|
||||
};
|
||||
|
||||
using rebase_tent_result_item_t = hb_pair_t<double, Triple>;
|
||||
|
@ -107,8 +105,10 @@ HB_INTERNAL double renormalizeValue (double v, const Triple &triple,
|
|||
* If tent value is Triple{}, that is a special deltaset that should
|
||||
* be always-enabled (called "gain").
|
||||
*/
|
||||
HB_INTERNAL rebase_tent_result_t rebase_tent (Triple tent,
|
||||
Triple axisLimit,
|
||||
TripleDistances axis_triple_distances);
|
||||
HB_INTERNAL void rebase_tent (Triple tent,
|
||||
Triple axisLimit,
|
||||
TripleDistances axis_triple_distances,
|
||||
rebase_tent_result_t &out,
|
||||
rebase_tent_result_t &scratch);
|
||||
|
||||
#endif /* HB_SUBSET_INSTANCER_SOLVER_HH */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -7,13 +7,13 @@
|
|||
* on file with this header:
|
||||
*
|
||||
* # emoji-data.txt
|
||||
* # Date: 2024-05-01, 21:25:24 GMT
|
||||
* # © 2024 Unicode®, Inc.
|
||||
* # Date: 2025-07-25, 17:54:31 GMT
|
||||
* # © 2025 Unicode®, Inc.
|
||||
* # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
|
||||
* # For terms of use and license, see https://www.unicode.org/terms_of_use.html
|
||||
* #
|
||||
* # Emoji Data for UTS #51
|
||||
* # Used with Emoji Version 16.0 and subsequent minor revisions (if any)
|
||||
* # Version: 17.0
|
||||
* #
|
||||
* # For documentation and usage, see https://www.unicode.org/reports/tr51
|
||||
*/
|
||||
|
@ -25,37 +25,47 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
static const uint8_t _hb_emoji_u8[464]=
|
||||
static const uint8_t _hb_emoji_u8[624]=
|
||||
{
|
||||
16, 17, 17, 17, 50, 20, 21, 17, 17, 17, 17, 17, 17, 17, 17, 17,
|
||||
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
|
||||
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
|
||||
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,118,152,
|
||||
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
2, 0, 3, 4, 0, 0, 5, 6, 0, 7, 0, 8, 9, 10, 11, 12,
|
||||
0, 0, 13, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 16, 0, 0,
|
||||
17, 17, 18, 19, 20, 17, 17, 21, 17, 17, 22, 17, 23, 17, 24, 25,
|
||||
26, 27, 28, 17, 17, 17, 0, 0, 17, 17, 17, 17, 17, 17, 17, 29,
|
||||
0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 4, 0, 0,
|
||||
5, 6, 0, 0, 7, 8, 0, 0, 8, 0, 9, 10, 0, 0, 11, 0,
|
||||
0, 12, 13, 14, 15, 16, 16, 16, 17, 16, 16, 16, 18, 19, 20, 21,
|
||||
22, 23, 0, 0, 0, 24, 0, 0, 25, 0, 26, 0, 0, 27, 0, 0,
|
||||
28, 0, 0, 0, 16, 16, 16, 16, 29, 9, 0, 30, 31, 32, 16, 33,
|
||||
34, 35, 36, 16, 16, 16, 16, 37, 16, 38, 39, 16, 16, 16, 40, 0,
|
||||
0, 0, 0, 41, 0, 0, 42, 16, 43, 0, 44, 0, 45, 46, 16, 16,
|
||||
47, 48, 49, 16, 16, 16, 16, 38, 0, 0, 0, 0, 0, 66, 0, 0,
|
||||
0, 0, 0, 16, 0, 2, 0, 0, 4, 0, 0, 2, 0, 0,240, 3,
|
||||
0, 6, 0, 0, 0, 0, 0, 12, 0, 1, 0, 0, 0,128, 0, 0,
|
||||
0,254, 15, 7, 4, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0,
|
||||
0, 0, 0,120,191,255,247,255,255,255,255,255, 63, 0,255,255,
|
||||
63,255, 87, 32, 2, 1, 24, 0,144, 80,184, 0,248, 0, 0, 0,
|
||||
0, 0,224, 0, 2, 0, 1,128, 0, 0, 48, 0,224, 0, 0, 24,
|
||||
0, 0, 33, 0, 0, 0, 1, 32, 0, 0,128, 2, 0,224, 0, 0,
|
||||
0,240, 3,192, 0, 64,254, 7, 0,224,255,255, 63, 0, 0, 0,
|
||||
254,255, 0, 4, 0,128,252,247, 0,254,255,255,255,255,255, 7,
|
||||
255,255,255, 63,192,255,255,255,255,255, 0, 0, 0, 0,240,255,
|
||||
0, 0,224,255, 0,240, 0, 0, 0,255, 0,252, 0,255, 0, 0,
|
||||
0,192,255,255, 0,240,255,255,255,255,255,247,191,255,255,255,
|
||||
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
2, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7,
|
||||
0, 0, 0, 8, 0, 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0,
|
||||
0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0,
|
||||
21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
|
||||
23, 0, 24, 25, 0, 26, 27, 28, 29, 30, 31, 31, 32, 31, 33, 34,
|
||||
31, 31, 31, 35, 36, 37, 38, 39, 31, 40, 31, 41, 0, 0, 0, 42,
|
||||
43, 44, 45, 46, 47, 48, 31, 31, 0, 49, 31, 31, 0, 0, 0, 0,
|
||||
31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 36,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 4, 0, 0, 2, 0, 0,240, 3, 0, 6, 0, 0,
|
||||
0, 0, 0, 12, 0, 1, 0, 0, 0,128, 0, 0, 0,254, 15, 7,
|
||||
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 64, 0,
|
||||
1, 0, 0, 0, 0, 0, 0,120, 31, 64, 50, 33, 77,196, 0, 7,
|
||||
5,255, 15,128,105, 1, 0,200, 0, 0,252, 26,131, 12, 3, 96,
|
||||
48,193, 26, 0, 0, 6,191, 39, 36,191, 84, 32, 2, 1, 24, 0,
|
||||
144, 80,184, 0, 24, 0, 0, 0, 0, 0,224, 0, 2, 0, 1,128,
|
||||
0, 0, 0, 0, 0, 0, 48, 0,224, 0, 0, 24, 0, 0, 0, 0,
|
||||
0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32,
|
||||
0, 0,128, 2, 0, 0, 0, 0, 16, 0, 0, 0, 0,240, 0, 0,
|
||||
0, 0,240,255, 0,128, 1, 0, 1,128, 1, 0, 0, 0,192,255,
|
||||
0, 0, 0, 0, 0, 0, 3,192, 0, 64,254, 7, 0,192,255,255,
|
||||
255,255,255,255, 63, 0, 0, 0,254,255, 0, 4, 0,128,252,247,
|
||||
0,254,255,255,192,255,255,255,255,255,255,255,255,255,255,255,
|
||||
255,255,255,255,243,255,255,255,255,255,207,206,255,255,255,255,
|
||||
255,255,255,255,255,255,185, 7,255,255,255,255,255,255,255,191,
|
||||
255,255,255,255,255,255,255, 63, 0,126,255,255,255,128,249, 7,
|
||||
128, 60, 97, 0, 48, 1, 6, 16, 28, 0, 14,112, 10,129, 8,252,
|
||||
255,255, 0, 0, 0, 0, 0, 0, 63,248,231,255, 63,250,249,255,
|
||||
0, 0, 0,252,255,255,255,255, 0,240, 0, 0, 0, 0, 0, 0,
|
||||
0,255, 0,252, 0, 0, 0, 0, 0,255, 0, 0, 0,192, 0,240,
|
||||
252,255, 0,254,255,255,255,255, 0,240,255,255,255,255,255,247,
|
||||
191,255,255,255,255,255,255,255, 0, 0, 0,255, 0,192,255,255,
|
||||
};
|
||||
|
||||
static inline uint8_t _hb_emoji_b4 (const uint8_t* a, unsigned i)
|
||||
|
@ -68,7 +78,7 @@ static inline uint8_t _hb_emoji_b1 (const uint8_t* a, unsigned i)
|
|||
}
|
||||
static inline uint8_t _hb_emoji_is_Extended_Pictographic (unsigned u)
|
||||
{
|
||||
return u<131070 ? _hb_emoji_b1(_hb_emoji_u8+264u,((_hb_emoji_u8[144u+(((_hb_emoji_u8[64u+(((_hb_emoji_b4(_hb_emoji_u8,u>>5>>2>>3))<<3)+((u>>5>>2)&7))])<<2)+((u>>5)&3))])<<5)+((u)&31)) : 0;
|
||||
return u<131070 ? _hb_emoji_b1(_hb_emoji_u8+224u,((_hb_emoji_u8[64u+((_hb_emoji_b4(_hb_emoji_u8,((((u)>>6))>>4)))<<4)+((((u)>>6))&15)])<<6)+((u)&63)) : 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -32,6 +32,12 @@
|
|||
#include "hb-meta.hh"
|
||||
#include "hb-null.hh"
|
||||
|
||||
// Change to 1 to force inline vector allocs, to see callsite in malloc-stats tool.
|
||||
#if 0
|
||||
#define HB_ALWAYS_INLINE_VECTOR_ALLOCS HB_ALWAYS_INLINE
|
||||
#else
|
||||
#define HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
#endif
|
||||
|
||||
template <typename Type,
|
||||
bool sorted=false>
|
||||
|
@ -45,6 +51,7 @@ struct hb_vector_t
|
|||
using c_array_t = typename std::conditional<sorted, hb_sorted_array_t<const Type>, hb_array_t<const Type>>::type;
|
||||
|
||||
hb_vector_t () = default;
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
hb_vector_t (std::initializer_list<Type> lst) : hb_vector_t ()
|
||||
{
|
||||
alloc (lst.size (), true);
|
||||
|
@ -57,18 +64,21 @@ struct hb_vector_t
|
|||
{
|
||||
extend (o);
|
||||
}
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
hb_vector_t (const hb_vector_t &o) : hb_vector_t ()
|
||||
{
|
||||
alloc_exact (o.length);
|
||||
if (unlikely (in_error ())) return;
|
||||
copy_array (o.as_array ());
|
||||
}
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
hb_vector_t (array_t o) : hb_vector_t ()
|
||||
{
|
||||
alloc_exact (o.length);
|
||||
if (unlikely (in_error ())) return;
|
||||
copy_array (o);
|
||||
}
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
hb_vector_t (c_array_t o) : hb_vector_t ()
|
||||
{
|
||||
alloc_exact (o.length);
|
||||
|
@ -113,6 +123,7 @@ struct hb_vector_t
|
|||
|
||||
template <typename Iterable,
|
||||
hb_requires (hb_is_iterable (Iterable))>
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
void extend (const Iterable &o)
|
||||
{
|
||||
auto iter = hb_iter (o);
|
||||
|
@ -133,12 +144,14 @@ struct hb_vector_t
|
|||
push_has_room (*iter++);
|
||||
}
|
||||
}
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
void extend (array_t o)
|
||||
{
|
||||
alloc (length + o.length);
|
||||
if (unlikely (in_error ())) return;
|
||||
copy_array (o);
|
||||
}
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
void extend (c_array_t o)
|
||||
{
|
||||
alloc (length + o.length);
|
||||
|
@ -174,6 +187,7 @@ struct hb_vector_t
|
|||
init ();
|
||||
}
|
||||
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
void reset ()
|
||||
{
|
||||
if (unlikely (in_error ()))
|
||||
|
@ -264,13 +278,16 @@ struct hb_vector_t
|
|||
Type * operator + (unsigned int i) { return arrayZ + i; }
|
||||
const Type * operator + (unsigned int i) const { return arrayZ + i; }
|
||||
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
Type *push ()
|
||||
{
|
||||
if (unlikely (!resize (length + 1)))
|
||||
return std::addressof (Crap (Type));
|
||||
return std::addressof (arrayZ[length - 1]);
|
||||
}
|
||||
template <typename... Args> Type *push (Args&&... args)
|
||||
template <typename... Args>
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
Type *push (Args&&... args)
|
||||
{
|
||||
if (unlikely ((int) length >= allocated && !alloc (length + 1)))
|
||||
// If push failed to allocate then don't copy v, since this may cause
|
||||
|
@ -280,7 +297,9 @@ struct hb_vector_t
|
|||
|
||||
return push_has_room (std::forward<Args> (args)...);
|
||||
}
|
||||
template <typename... Args> Type *push_has_room (Args&&... args)
|
||||
template <typename... Args>
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
Type *push_has_room (Args&&... args)
|
||||
{
|
||||
/* Emplace. */
|
||||
Type *p = std::addressof (arrayZ[length++]);
|
||||
|
@ -467,6 +486,7 @@ struct hb_vector_t
|
|||
}
|
||||
|
||||
/* Allocate for size but don't adjust length. */
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
bool alloc (unsigned int size, bool exact=false)
|
||||
{
|
||||
if (unlikely (in_error ()))
|
||||
|
@ -522,16 +542,19 @@ struct hb_vector_t
|
|||
|
||||
return true;
|
||||
}
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
bool alloc_exact (unsigned int size)
|
||||
{
|
||||
return alloc (size, true);
|
||||
}
|
||||
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
void clear ()
|
||||
{
|
||||
resize (0);
|
||||
}
|
||||
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
bool resize (int size_, bool initialize = true, bool exact = false)
|
||||
{
|
||||
unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
|
||||
|
@ -552,6 +575,7 @@ struct hb_vector_t
|
|||
length = size;
|
||||
return true;
|
||||
}
|
||||
HB_ALWAYS_INLINE_VECTOR_ALLOCS
|
||||
bool resize_exact (int size_, bool initialize = true)
|
||||
{
|
||||
return resize (size_, initialize, true);
|
||||
|
|
|
@ -47,20 +47,20 @@ HB_BEGIN_DECLS
|
|||
*
|
||||
* The minor component of the library version available at compile-time.
|
||||
*/
|
||||
#define HB_VERSION_MINOR 4
|
||||
#define HB_VERSION_MINOR 5
|
||||
/**
|
||||
* HB_VERSION_MICRO:
|
||||
*
|
||||
* The micro component of the library version available at compile-time.
|
||||
*/
|
||||
#define HB_VERSION_MICRO 5
|
||||
#define HB_VERSION_MICRO 0
|
||||
|
||||
/**
|
||||
* HB_VERSION_STRING:
|
||||
*
|
||||
* A string literal containing the library version available at compile-time.
|
||||
*/
|
||||
#define HB_VERSION_STRING "11.4.5"
|
||||
#define HB_VERSION_STRING "11.5.0"
|
||||
|
||||
/**
|
||||
* HB_VERSION_ATLEAST:
|
||||
|
|
|
@ -121,9 +121,8 @@ function(_qt_internal_wasm_add_target_helpers target)
|
|||
if(_tmp_maximumMemory)
|
||||
set(QT_WASM_MAXIMUM_MEMORY "${_tmp_maximumMemory}")
|
||||
elseif(NOT DEFINED QT_WASM_MAXIMUM_MEMORY)
|
||||
if(QT_FEATURE_wasm_jspi)
|
||||
# Work around Emscripten >2GB and JSPI compatibility issue.
|
||||
set(QT_WASM_MAXIMUM_MEMORY "2GB")
|
||||
if(WASM64)
|
||||
set(QT_WASM_MAXIMUM_MEMORY "16GB")
|
||||
else()
|
||||
set(QT_WASM_MAXIMUM_MEMORY "4GB")
|
||||
endif()
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:critical reason:data-parser
|
||||
|
||||
#ifndef QBYTEARRAYALGORITHMS_H
|
||||
#define QBYTEARRAYALGORITHMS_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:critical reason:data-parser
|
||||
|
||||
#ifndef QDOUBLESCANPRINT_P_H
|
||||
#define QDOUBLESCANPRINT_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:critical reason:data-parser
|
||||
|
||||
#ifndef QSTRINGALGORITHMS_H
|
||||
#define QSTRINGALGORITHMS_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 Intel Corporation.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:critical reason:data-parser
|
||||
|
||||
#ifndef QSTRINGALGORITHMS_P_H
|
||||
#define QSTRINGALGORITHMS_P_H
|
||||
|
|
|
@ -234,11 +234,17 @@ static int qt_gl_resolve_features()
|
|||
QOpenGLFunctions::CompressedTextures |
|
||||
QOpenGLFunctions::Multisample |
|
||||
QOpenGLFunctions::StencilSeparate;
|
||||
if (extensions.match("GL_IMG_texture_npot"))
|
||||
features |= QOpenGLFunctions::NPOTTextures;
|
||||
if (extensions.match("GL_OES_texture_npot"))
|
||||
|
||||
if (ctx->format().majorVersion() >= 3) {
|
||||
features |= QOpenGLFunctions::NPOTTextures |
|
||||
QOpenGLFunctions::NPOTTextureRepeat;
|
||||
} else {
|
||||
if (extensions.match("GL_IMG_texture_npot"))
|
||||
features |= QOpenGLFunctions::NPOTTextures;
|
||||
if (extensions.match("GL_OES_texture_npot"))
|
||||
features |= QOpenGLFunctions::NPOTTextures |
|
||||
QOpenGLFunctions::NPOTTextureRepeat;
|
||||
}
|
||||
if (ctx->format().majorVersion() >= 3 || extensions.match("GL_EXT_texture_rg"))
|
||||
features |= QOpenGLFunctions::TextureRGFormats;
|
||||
if (ctx->format().majorVersion() >= 3) {
|
||||
|
|
|
@ -44,7 +44,6 @@
|
|||
#include <QtCore/qoperatingsystemversion.h>
|
||||
|
||||
#include <dwmapi.h>
|
||||
#include <gdiplus.h>
|
||||
|
||||
#if QT_CONFIG(vulkan)
|
||||
#include "qwindowsvulkaninstance.h"
|
||||
|
|
|
@ -255,7 +255,8 @@ public:
|
|||
|
||||
void setup(const QWizardLayoutInfo &info, const QString &title,
|
||||
const QString &subTitle, const QPixmap &logo, const QPixmap &banner,
|
||||
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat);
|
||||
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat,
|
||||
QWizard::BannerSizePolicy bannerSizePolicy);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
|
@ -269,6 +270,7 @@ private:
|
|||
QLabel *logoLabel;
|
||||
QGridLayout *layout;
|
||||
QPixmap bannerPixmap;
|
||||
QWizard::BannerSizePolicy wizardBannerSizePolicy;
|
||||
};
|
||||
|
||||
QWizardHeader::QWizardHeader(QWidget *parent)
|
||||
|
@ -323,7 +325,8 @@ bool QWizardHeader::vistaDisabled() const
|
|||
|
||||
void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
|
||||
const QString &subTitle, const QPixmap &logo, const QPixmap &banner,
|
||||
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat)
|
||||
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat,
|
||||
QWizard::BannerSizePolicy bannerSizePolicy)
|
||||
{
|
||||
bool modern = ((info.wizStyle == QWizard::ModernStyle)
|
||||
#if QT_CONFIG(style_windowsvista)
|
||||
|
@ -331,6 +334,8 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
|
|||
#endif
|
||||
);
|
||||
|
||||
wizardBannerSizePolicy = bannerSizePolicy;
|
||||
|
||||
layout->setRowMinimumHeight(0, modern ? ModernHeaderTopMargin : 0);
|
||||
layout->setRowMinimumHeight(1, modern ? info.topLevelMarginTop - ModernHeaderTopMargin - 1 : 0);
|
||||
layout->setRowMinimumHeight(6, (modern ? 3 : GapBetweenLogoAndRightEdge) + 2);
|
||||
|
@ -356,7 +361,7 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
|
|||
bannerPixmap = QPixmap();
|
||||
}
|
||||
|
||||
if (bannerPixmap.isNull()) {
|
||||
if (bannerPixmap.isNull() || wizardBannerSizePolicy != QWizard::BannerSizePolicy::NoStretch) {
|
||||
/*
|
||||
There is no widthForHeight() function, so we simulate it with a loop.
|
||||
*/
|
||||
|
@ -384,7 +389,15 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
|
|||
void QWizardHeader::paintEvent(QPaintEvent * /* event */)
|
||||
{
|
||||
QStylePainter painter(this);
|
||||
painter.drawPixmap(0, 0, bannerPixmap);
|
||||
switch (wizardBannerSizePolicy) {
|
||||
case QWizard::BannerSizePolicy::Stretch:
|
||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||
painter.drawPixmap(0, 0, width(), height(), bannerPixmap);
|
||||
break;
|
||||
case QWizard::BannerSizePolicy::NoStretch:
|
||||
painter.drawPixmap(0, 0, bannerPixmap);
|
||||
break;
|
||||
}
|
||||
|
||||
int x = width() - 2;
|
||||
int y = height() - 2;
|
||||
|
@ -566,6 +579,7 @@ public:
|
|||
QList<QWizard::WizardButton> buttonsCustomLayout;
|
||||
Qt::TextFormat titleFmt = Qt::AutoText;
|
||||
Qt::TextFormat subTitleFmt = Qt::AutoText;
|
||||
QWizard::BannerSizePolicy bannerSizePolicy = QWizard::BannerSizePolicy::NoStretch;
|
||||
mutable QPixmap defaultPixmaps[QWizard::NPixmaps];
|
||||
|
||||
union {
|
||||
|
@ -1221,7 +1235,7 @@ void QWizardPrivate::updateLayout()
|
|||
Q_ASSERT(page);
|
||||
headerWidget->setup(info, page->title(), page->subTitle(),
|
||||
page->pixmap(QWizard::LogoPixmap), page->pixmap(QWizard::BannerPixmap),
|
||||
titleFmt, subTitleFmt);
|
||||
titleFmt, subTitleFmt, bannerSizePolicy);
|
||||
}
|
||||
|
||||
if (info.watermark || info.sideWidget) {
|
||||
|
@ -2079,6 +2093,15 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *)
|
|||
\sa setWizardStyle(), WizardOption, {Wizard Look and Feel}
|
||||
*/
|
||||
|
||||
/*!
|
||||
\enum QWizard::BannerSizePolicy
|
||||
|
||||
This enum specifies the banner size policy when there is a banner.
|
||||
|
||||
\value NoStretch Do not stretch the banner (default)
|
||||
\value Stretch Stretch the banner
|
||||
*/
|
||||
|
||||
/*!
|
||||
\enum QWizard::WizardOption
|
||||
|
||||
|
@ -2773,6 +2796,28 @@ Qt::TextFormat QWizard::subTitleFormat() const
|
|||
return d->subTitleFmt;
|
||||
}
|
||||
|
||||
/*!
|
||||
\property QWizard::bannerSizePolicy
|
||||
\brief the banner size policy
|
||||
|
||||
The default policy is \l{QWizard::}{NoStretch}
|
||||
*/
|
||||
void QWizard::setBannerSizePolicy(QWizard::BannerSizePolicy bannerSizePolicy)
|
||||
{
|
||||
Q_D(QWizard);
|
||||
if (d->bannerSizePolicy == bannerSizePolicy)
|
||||
return;
|
||||
|
||||
d->bannerSizePolicy = bannerSizePolicy;
|
||||
d->updateLayout();
|
||||
}
|
||||
|
||||
QWizard::BannerSizePolicy QWizard::bannerSizePolicy() const
|
||||
{
|
||||
Q_D(const QWizard);
|
||||
return d->bannerSizePolicy;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the pixmap for role \a which to \a pixmap.
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ class Q_WIDGETS_EXPORT QWizard : public QDialog
|
|||
Q_PROPERTY(Qt::TextFormat subTitleFormat READ subTitleFormat WRITE setSubTitleFormat)
|
||||
Q_PROPERTY(int startId READ startId WRITE setStartId)
|
||||
Q_PROPERTY(int currentId READ currentId WRITE setCurrentId NOTIFY currentIdChanged)
|
||||
Q_PROPERTY(BannerSizePolicy bannerSizePolicy READ bannerSizePolicy WRITE setBannerSizePolicy REVISION(6, 11))
|
||||
|
||||
public:
|
||||
enum WizardButton {
|
||||
|
@ -61,6 +62,12 @@ public:
|
|||
};
|
||||
Q_ENUM(WizardStyle)
|
||||
|
||||
enum class BannerSizePolicy {
|
||||
NoStretch,
|
||||
Stretch,
|
||||
};
|
||||
Q_ENUM(BannerSizePolicy)
|
||||
|
||||
enum WizardOption {
|
||||
IndependentPages = 0x00000001,
|
||||
IgnoreSubTitles = 0x00000002,
|
||||
|
@ -124,6 +131,8 @@ public:
|
|||
Qt::TextFormat titleFormat() const;
|
||||
void setSubTitleFormat(Qt::TextFormat format);
|
||||
Qt::TextFormat subTitleFormat() const;
|
||||
void setBannerSizePolicy(BannerSizePolicy bannerSizePolicy);
|
||||
QWizard::BannerSizePolicy bannerSizePolicy() const;
|
||||
void setPixmap(WizardPixmap which, const QPixmap &pixmap);
|
||||
QPixmap pixmap(WizardPixmap which) const;
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2020 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include <QtGui/QAction>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2020 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qaction.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2020 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QACTION_WIDGETS_P_H
|
||||
#define QACTION_WIDGETS_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2020 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include <QtGui/QActionGroup>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qapplication.h"
|
||||
#include "qboxlayout.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QBOXLAYOUT_H
|
||||
#define QBOXLAYOUT_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qapplication.h"
|
||||
#include "qdebug.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QFORMLAYOUT_H
|
||||
#define QFORMLAYOUT_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qgesture.h"
|
||||
#include "private/qgesture_p.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QGESTURE_H
|
||||
#define QGESTURE_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QGESTURE_P_H
|
||||
#define QGESTURE_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "private/qgesturemanager_p.h"
|
||||
#include "private/qstandardgestures_p.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QGESTUREMANAGER_P_H
|
||||
#define QGESTUREMANAGER_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qgesturerecognizer.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QGESTURERECOGNIZER_H
|
||||
#define QGESTURERECOGNIZER_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qapplication.h"
|
||||
#include "qgridlayout.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QGRIDLAYOUT_H
|
||||
#define QGRIDLAYOUT_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qlayout.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QLAYOUT_H
|
||||
#define QLAYOUT_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QLAYOUT_P_H
|
||||
#define QLAYOUT_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qlayout.h"
|
||||
#include "private/qlayoutengine_p.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QLAYOUTENGINE_P_H
|
||||
#define QLAYOUTENGINE_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qlayout.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QLAYOUTITEM_H
|
||||
#define QLAYOUTITEM_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qmacgesturerecognizer_p.h"
|
||||
#include "qgesture.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QMACSWIPEGESTURERECOGNIZER_MAC_P_H
|
||||
#define QMACSWIPEGESTURERECOGNIZER_MAC_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qrhiwidget_p.h"
|
||||
#include <private/qguiapplication_p.h>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QRHIWIDGET_H
|
||||
#define QRHIWIDGET_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QRHIWIDGET_P_H
|
||||
#define QRHIWIDGET_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2020 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include <QtGui/QShortcut>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qshortcut.h"
|
||||
#include "private/qshortcut_p.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qstackedlayout.h"
|
||||
#include "qlayout_p.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QSTACKEDLAYOUT_H
|
||||
#define QSTACKEDLAYOUT_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qstandardgestures_p.h"
|
||||
#include "qgesture.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QSTANDARDGESTURES_P_H
|
||||
#define QSTANDARDGESTURES_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
/*
|
||||
* This is a precompiled header file for use in Xcode / Mac GCC /
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2018 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qtestsupport_widgets.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2018 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QTESTSUPPORT_WIDGETS_H
|
||||
#define QTESTSUPPORT_WIDGETS_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include <QtWidgets/private/qtwidgetsglobal_p.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QTOOLTIP_H
|
||||
#define QTOOLTIP_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QTWIDGETSGLOBAL_H
|
||||
#define QTWIDGETSGLOBAL_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QTWIDGETSGLOBAL_P_H
|
||||
#define QTWIDGETSGLOBAL_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qwhatsthis.h"
|
||||
#include "qpointer.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QWHATSTHIS_H
|
||||
#define QWHATSTHIS_H
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (C) 2017 The Qt Company Ltd.
|
||||
// Copyright (C) 2016 Intel Corporation.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qapplication.h"
|
||||
#include "qapplication_p.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QWIDGET_H
|
||||
#define QWIDGET_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2020 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QWIDGET_P_H
|
||||
#define QWIDGET_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qwidgetaction.h"
|
||||
#include "qwidget.h"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QWIDGETACTION_H
|
||||
#define QWIDGETACTION_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QWIDGETACTION_P_H
|
||||
#define QWIDGETACTION_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qplatformdefs.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#ifndef QWIDGETREPAINTMANAGER_P_H
|
||||
#define QWIDGETREPAINTMANAGER_P_H
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "qvariant.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2020 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
// Qt-Security score:significant reason:default
|
||||
|
||||
#include "private/qwindow_p.h"
|
||||
#include "qwidgetwindow_p.h"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue