[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