提交 70fe9e73 编写于 作者: B Behdad Esfahbod

Fix moreeeeeeeeeee

上级 68e12e68
...@@ -49,6 +49,8 @@ ...@@ -49,6 +49,8 @@
* Functions for using HarfBuzz with the ICU library to provide Unicode data. * Functions for using HarfBuzz with the ICU library to provide Unicode data.
**/ **/
/* ICU doesn't do-while(0) around their statements. Ouch! */
#define HB_ICU_STMT(S) do { S } while (0)
hb_script_t hb_script_t
hb_icu_script_to_script (UScriptCode script) hb_icu_script_to_script (UScriptCode script)
...@@ -183,9 +185,9 @@ hb_icu_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -183,9 +185,9 @@ hb_icu_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
len = 0; len = 0;
err = false; err = false;
U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), a, err); HB_ICU_STMT (U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), a, err));
if (err) return false; if (err) return false;
U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), b, err); HB_ICU_STMT (U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), b, err));
if (err) return false; if (err) return false;
icu_err = U_ZERO_ERROR; icu_err = U_ZERO_ERROR;
...@@ -193,7 +195,7 @@ hb_icu_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -193,7 +195,7 @@ hb_icu_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
if (U_FAILURE (icu_err)) if (U_FAILURE (icu_err))
return false; return false;
if (u_countChar32 (normalized, len) == 1) { if (u_countChar32 (normalized, len) == 1) {
U16_GET_UNSAFE (normalized, 0, *ab); HB_ICU_STMT (U16_GET_UNSAFE (normalized, 0, *ab));
ret = true; ret = true;
} else { } else {
ret = false; ret = false;
...@@ -221,13 +223,13 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -221,13 +223,13 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
len = u_countChar32 (decomposed, len); len = u_countChar32 (decomposed, len);
if (len == 1) { if (len == 1) {
U16_GET_UNSAFE (decomposed, 0, *a); HB_ICU_STMT (U16_GET_UNSAFE (decomposed, 0, *a));
*b = 0; *b = 0;
return *a != ab; return *a != ab;
} else if (len == 2) { } else if (len == 2) {
len =0; len =0;
U16_NEXT_UNSAFE (decomposed, len, *a); HB_ICU_STMT (U16_NEXT_UNSAFE (decomposed, len, *a));
U16_NEXT_UNSAFE (decomposed, len, *b); HB_ICU_STMT (U16_NEXT_UNSAFE (decomposed, len, *b));
} }
return true; return true;
} }
...@@ -247,7 +249,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -247,7 +249,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
len = 0; len = 0;
err = false; err = false;
U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), ab, err); HB_ICU_STMT (U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), ab, err));
if (err) return false; if (err) return false;
icu_err = U_ZERO_ERROR; icu_err = U_ZERO_ERROR;
...@@ -258,13 +260,13 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -258,13 +260,13 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
len = u_countChar32 (normalized, len); len = u_countChar32 (normalized, len);
if (len == 1) { if (len == 1) {
U16_GET_UNSAFE (normalized, 0, *a); HB_ICU_STMT (U16_GET_UNSAFE (normalized, 0, *a));
*b = 0; *b = 0;
ret = *a != ab; ret = *a != ab;
} else if (len == 2) { } else if (len == 2) {
len =0; len =0;
U16_NEXT_UNSAFE (normalized, len, *a); HB_ICU_STMT (U16_NEXT_UNSAFE (normalized, len, *a));
U16_NEXT_UNSAFE (normalized, len, *b); HB_ICU_STMT (U16_NEXT_UNSAFE (normalized, len, *b));
/* Here's the ugly part: if ab decomposes to a single character and /* Here's the ugly part: if ab decomposes to a single character and
* that character decomposes again, we have to detect that and undo * that character decomposes again, we have to detect that and undo
...@@ -275,7 +277,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -275,7 +277,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
if (U_FAILURE (icu_err)) if (U_FAILURE (icu_err))
return false; return false;
hb_codepoint_t c; hb_codepoint_t c;
U16_GET_UNSAFE (recomposed, 0, c); HB_ICU_STMT (U16_GET_UNSAFE (recomposed, 0, c));
if (c != *a && c != ab) { if (c != *a && c != ab) {
*a = c; *a = c;
*b = 0; *b = 0;
...@@ -284,7 +286,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -284,7 +286,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
} else { } else {
/* If decomposed to more than two characters, take the last one, /* If decomposed to more than two characters, take the last one,
* and recompose the rest to get the first component. */ * and recompose the rest to get the first component. */
U16_PREV_UNSAFE (normalized, len, *b); /* Changes len in-place. */ HB_ICU_STMT (U16_PREV_UNSAFE (normalized, len, *b)); /* Changes len in-place. */
UChar recomposed[18 * 2]; UChar recomposed[18 * 2];
icu_err = U_ZERO_ERROR; icu_err = U_ZERO_ERROR;
len = unorm2_normalize (unorm2_getNFCInstance (&icu_err), normalized, len, recomposed, ARRAY_LENGTH (recomposed), &icu_err); len = unorm2_normalize (unorm2_getNFCInstance (&icu_err), normalized, len, recomposed, ARRAY_LENGTH (recomposed), &icu_err);
...@@ -293,7 +295,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, ...@@ -293,7 +295,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
/* We expect that recomposed has exactly one character now. */ /* We expect that recomposed has exactly one character now. */
if (unlikely (u_countChar32 (recomposed, len) != 1)) if (unlikely (u_countChar32 (recomposed, len) != 1))
return false; return false;
U16_GET_UNSAFE (recomposed, 0, *a); HB_ICU_STMT (U16_GET_UNSAFE (recomposed, 0, *a));
ret = true; ret = true;
} }
......
...@@ -176,7 +176,7 @@ _create_old_gid_to_new_gid_map (const hb_face_t *face, ...@@ -176,7 +176,7 @@ _create_old_gid_to_new_gid_map (const hb_face_t *face,
| hb_map ([=] (hb_codepoint_t _) { | hb_map ([=] (hb_codepoint_t _) {
return hb_pair_t<hb_codepoint_t, hb_codepoint_t> (_, _); return hb_pair_t<hb_codepoint_t, hb_codepoint_t> (_, _);
}) })
| hb_sink (reverse_glyph_map); | hb_sink (reverse_glyph_map)
; ;
// TODO(grieger): Should we discard glyphs past the max glyph to keep? // TODO(grieger): Should we discard glyphs past the max glyph to keep?
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册