Index: third_party/harfbuzz-ng/src/hb-shape.cc |
diff --git a/third_party/harfbuzz-ng/src/hb-shape.cc b/third_party/harfbuzz-ng/src/hb-shape.cc |
index 67ef7e6a8f56a09714582f4b17b9dc8b4745b21b..c1b752405e1fdc55b8b4515b7e218e130ff90736 100644 |
--- a/third_party/harfbuzz-ng/src/hb-shape.cc |
+++ b/third_party/harfbuzz-ng/src/hb-shape.cc |
@@ -153,6 +153,18 @@ parse_one_feature (const char **pp, const char *end, hb_feature_t *feature) |
*pp == end; |
} |
+/** |
+ * hb_feature_from_string: |
+ * @str: (array length=len): |
+ * @len: |
+ * @feature: (out): |
+ * |
+ * |
+ * |
+ * Return value: |
+ * |
+ * Since: 1.0 |
+ **/ |
hb_bool_t |
hb_feature_from_string (const char *str, int len, |
hb_feature_t *feature) |
@@ -163,6 +175,16 @@ hb_feature_from_string (const char *str, int len, |
return parse_one_feature (&str, str + len, feature); |
} |
+/** |
+ * hb_feature_to_string: |
+ * @feature: |
+ * @buf: (array length=size): |
+ * @size: |
+ * |
+ * |
+ * |
+ * Since: 1.0 |
+ **/ |
void |
hb_feature_to_string (hb_feature_t *feature, |
char *buf, unsigned int size) |
@@ -181,23 +203,23 @@ hb_feature_to_string (hb_feature_t *feature, |
{ |
s[len++] = '['; |
if (feature->start) |
- len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->start); |
+ len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->start)); |
if (feature->end != feature->start + 1) { |
s[len++] = ':'; |
if (feature->end != (unsigned int) -1) |
- len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->end); |
+ len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->end)); |
} |
s[len++] = ']'; |
} |
if (feature->value > 1) |
{ |
s[len++] = '='; |
- len += snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->value); |
+ len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%d", feature->value)); |
} |
assert (len < ARRAY_LENGTH (s)); |
len = MIN (len, size - 1); |
memcpy (buf, s, len); |
- s[len] = '\0'; |
+ buf[len] = '\0'; |
} |
@@ -209,6 +231,15 @@ void free_static_shaper_list (void) |
free (static_shaper_list); |
} |
+/** |
+ * hb_shape_list_shapers: |
+ * |
+ * |
+ * |
+ * Return value: (transfer none): |
+ * |
+ * Since: 1.0 |
+ **/ |
const char ** |
hb_shape_list_shapers (void) |
{ |
@@ -244,6 +275,20 @@ retry: |
} |
+/** |
+ * hb_shape_full: |
+ * @font: a font. |
+ * @buffer: a buffer. |
+ * @features: (array length=num_features): |
+ * @num_features: |
+ * @shaper_list: (array zero-terminated=1): |
+ * |
+ * |
+ * |
+ * Return value: |
+ * |
+ * Since: 1.0 |
+ **/ |
hb_bool_t |
hb_shape_full (hb_font_t *font, |
hb_buffer_t *buffer, |
@@ -265,6 +310,17 @@ hb_shape_full (hb_font_t *font, |
return res; |
} |
+/** |
+ * hb_shape: |
+ * @font: a font. |
+ * @buffer: a buffer. |
+ * @features: (array length=num_features): |
+ * @num_features: |
+ * |
+ * |
+ * |
+ * Since: 1.0 |
+ **/ |
void |
hb_shape (hb_font_t *font, |
hb_buffer_t *buffer, |