[HarfBuzz] harfbuzz: Branch 'master' - 3 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Mon Sep 17 18:28:42 UTC 2018
CMakeLists.txt | 5 ++
src/hb-aat-layout-morx-table.hh | 87 +++++++++++++++-------------------------
src/hb-common.cc | 2
3 files changed, 39 insertions(+), 55 deletions(-)
New commits:
commit 388ab91642734e1ba0d7a4a4f29a17b15f1b249d
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Mon Sep 17 19:29:34 2018 +0200
[morx] Implement InsertionChain
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index 23c9ef2d..5d3b9b14 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -608,80 +608,59 @@ struct InsertionSubtable
hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry->flags;
- if (0)
- c->sanitizer.check_range (nullptr, 0);
-#if 0
- if (flags & SetComponent)
+ if (entry->data.markedInsertIndex != 0xFFFF)
{
- if (unlikely (match_length >= ARRAY_LENGTH (match_positions)))
- return false;
+ unsigned int count = (entry->flags & MarkedInsertCount);
+ unsigned int start = entry->data.markedInsertIndex;
+ const GlyphID *glyphs = &insertionAction[start];
+ if (unlikely (!c->sanitizer.check_array (glyphs, count))) return false;
- /* Never mark same index twice, in case DontAdvance was used... */
- if (match_length && match_positions[match_length - 1] == buffer->out_len)
- match_length--;
+ bool before = entry->flags & MarkedInsertBefore;
- match_positions[match_length++] = buffer->out_len;
- }
+ if (unlikely (!mark_set)) return false;
- if (flags & PerformAction)
- {
unsigned int end = buffer->out_len;
- unsigned int action_idx = entry->data.ligActionIndex;
- unsigned int action;
- unsigned int ligature_idx = 0;
- do
- {
- if (unlikely (!match_length))
- return false;
+ buffer->move_to (mark);
- buffer->move_to (match_positions[--match_length]);
+ if (!before)
+ buffer->copy_glyph ();
+ /* TODO We ignore KashidaLike setting. */
+ for (unsigned int i = 0; i < count; i++)
+ buffer->output_glyph (glyphs[i]);
+ if (!before)
+ buffer->skip_glyph ();
- const HBUINT32 &actionData = ligAction[action_idx];
- if (unlikely (!actionData.sanitize (&c->sanitizer))) return false;
- action = actionData;
-
- uint32_t uoffset = action & LigActionOffset;
- if (uoffset & 0x20000000)
- uoffset += 0xC0000000;
- int32_t offset = (int32_t) uoffset;
- unsigned int component_idx = buffer->cur().codepoint + offset;
+ buffer->move_to (end + count);
+ }
- const HBUINT16 &componentData = component[component_idx];
- if (unlikely (!componentData.sanitize (&c->sanitizer))) return false;
- ligature_idx += componentData;
+ if (entry->data.currentInsertIndex != 0xFFFF)
+ {
+ unsigned int count = (entry->flags & CurrentInsertCount) >> 5;
+ unsigned int start = entry->data.currentInsertIndex;
+ const GlyphID *glyphs = &insertionAction[start];
+ if (unlikely (!c->sanitizer.check_array (glyphs, count))) return false;
- if (action & (LigActionStore | LigActionLast))
- {
- const GlyphID &ligatureData = ligature[ligature_idx];
- if (unlikely (!ligatureData.sanitize (&c->sanitizer))) return false;
- hb_codepoint_t lig = ligatureData;
+ bool before = entry->flags & CurrentInsertBefore;
- match_positions[match_length++] = buffer->out_len;
- buffer->replace_glyph (lig);
+ unsigned int end = buffer->out_len;
- //ligature_idx = 0; // XXX Yes or no?
- }
- else
- {
- buffer->skip_glyph ();
- end--;
- }
- /* TODO merge_clusters / unsafe_to_break */
+ if (!before)
+ buffer->copy_glyph ();
+ /* TODO We ignore KashidaLike setting. */
+ for (unsigned int i = 0; i < count; i++)
+ buffer->output_glyph (glyphs[i]);
+ if (!before)
+ buffer->skip_glyph ();
- action_idx++;
- }
- while (!(action & LigActionLast));
buffer->move_to (end);
}
-#endif
if (flags & SetMark)
{
mark_set = true;
- mark = buffer->idx;
+ mark = buffer->out_len;
}
-
return true;
}
commit d8d1e7df0057c79f54d855b7bfec2d21f59b09e8
Author: David Corbett <corbett.dav at husky.neu.edu>
Date: Mon Sep 17 11:09:51 2018 -0400
Don't enforce a native direction for Old Hungarian
diff --git a/src/hb-common.cc b/src/hb-common.cc
index c1651232..a9c62e80 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -531,7 +531,6 @@ hb_script_get_horizontal_direction (hb_script_t script)
/* Unicode-8.0 additions */
case HB_SCRIPT_HATRAN:
- case HB_SCRIPT_OLD_HUNGARIAN:
/* Unicode-9.0 additions */
case HB_SCRIPT_ADLAM:
@@ -545,6 +544,7 @@ hb_script_get_horizontal_direction (hb_script_t script)
/* https://github.com/harfbuzz/harfbuzz/issues/1000 */
+ case HB_SCRIPT_OLD_HUNGARIAN:
case HB_SCRIPT_OLD_ITALIC:
case HB_SCRIPT_RUNIC:
commit 6a97d0f3d377a35ea691d15ac142ce043f953e71
Author: Simon Hausmann <hausmann at gmail.com>
Date: Mon Sep 17 10:33:34 2018 +0200
Fix installation of cmake config when building with cmake (#1161)
When building with the auto tools, the manually mantained
harfbuzz-config.cmake is installed. When building with cmake, we can use
cmake to generate the correct config files for us and install them.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e881dbd1..69496561 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -761,11 +761,16 @@ endif ()
if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
install(TARGETS harfbuzz
+ EXPORT harfbuzzConfig
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
FRAMEWORK DESTINATION Library/Frameworks
)
+ install(EXPORT harfbuzzConfig
+ NAMESPACE harfbuzz::
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/harfbuzz
+ )
if (HB_BUILD_UTILS)
install(TARGETS hb-view
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
More information about the HarfBuzz
mailing list