Add BOT/EOT to Shaper.
This informs HarfBuzz when we are at the beginning or end of a
paragraph so that it can handle a few rules in a special way.
Change-Id: I66a306f1ff7ddb2c1546b0fd9c0cee94cb9f7006
Reviewed-on: https://skia-review.googlesource.com/c/189850
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/modules/skshaper/src/SkShaper_harfbuzz.cpp b/modules/skshaper/src/SkShaper_harfbuzz.cpp
index 9d52336..a74d0c0 100644
--- a/modules/skshaper/src/SkShaper_harfbuzz.cpp
+++ b/modules/skshaper/src/SkShaper_harfbuzz.cpp
@@ -5,6 +5,7 @@
* found in the LICENSE file.
*/
+#include "SkBitmaskEnum.h"
#include "SkFont.h"
#include "SkFontArguments.h"
#include "SkFontMetrics.h"
@@ -44,6 +45,10 @@
#include "SkLoadICU.h"
#endif
+namespace skstd {
+template <> struct is_bitmask_enum<hb_buffer_flags_t> : std::true_type {};
+}
+
namespace {
template <class T, void(*P)(T*)> using resource = std::unique_ptr<T, SkFunctionWrapper<void, T, P>>;
using HBBlob = resource<hb_blob_t , hb_blob_destroy >;
@@ -1105,7 +1110,7 @@
ShapedRun SkShaper::Impl::shape(const char* utf8,
- size_t utf8Bytes,
+ const size_t utf8Bytes,
const char* utf8Start,
const char* utf8End,
const BiDiRunIterator* bidi,
@@ -1120,6 +1125,9 @@
hb_buffer_set_content_type(buffer, HB_BUFFER_CONTENT_TYPE_UNICODE);
hb_buffer_set_cluster_level(buffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS);
+ // See 763e5466c0a03a7c27020e1e2598e488612529a7 for documentation.
+ hb_buffer_set_flags(buffer, HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
+
// Add precontext.
hb_buffer_add_utf8(buffer, utf8, utf8Start - utf8, utf8Start - utf8, 0);