diff options
author | Daiki Ueno <ueno@gnu.org> | 2017-11-27 11:34:25 +0100 |
---|---|---|
committer | Daiki Ueno <dueno@redhat.com> | 2017-11-27 11:34:25 +0100 |
commit | 19f18ecffa68391c6d0babc3568672108884bbc0 (patch) | |
tree | eb1b23f3ce024c42df42a33ab8deb052856f6cc7 /tests/unigbrk/test-uc-is-grapheme-break.c | |
parent | d5aa1da12243e1ac20800b9ffc1be93b13fe2f5b (diff) | |
download | gnulib-19f18ecffa68391c6d0babc3568672108884bbc0.tar.gz |
libunistring: update to Unicode 9.0.0
* lib/gen-uni-tables.c (fill_properties): Recognize
Sentence_Terminal and Prepended_Concatenation_Mark.
(is_property_default_ignorable_code_point): Exclude U+08E2.
(fill_arabicshaping): Allow missing whitespace when parsing;
recognize "AFRICAN FEH", "AFRICAN QAF", and "AFRICAN MOON".
(output_blocks): Increase the element size of the level1 table to
accommodate more blocks.
(get_lbp): Recognize ZWJ, E_Base, and E_Modifier characters;
Update each class according to the standard.
(get_wbp): Recognize ZWJ, E_Base, E_Modifier, Glue_After_Zwj, and
E_Base_GAZ characters.
(output_gbp_table): Recognize ZWJ, E_Base, E_Modifier,
Glue_After_Zwj, and E_Base_GAZ characters.
* lib/unictype.in.h (UC_JOINING_GROUP_AFRICAN_FEH)
(UC_JOINING_GROUP_AFRICAN_QAF, UC_JOINING_GROUP_AFRICAN_MOON): New
enum value.
* lib/unilbrk/lbrktables.h (LBP_ZWJ, LBP_EB, LBP_EM): New enum
value.
* lib/unilbrk/lbrktables.c (unilbrk_table): Extend the table with
LBP_ZWJ, LBP_EB, and LBP_EM.
* lib/uniwbrk.in.h (WBP_ZWJ, WBP_EB, WBP_EM, WBP_GAZ, WBP_EBG): New
enum value.
* lib/uniwbrk/u-wordbreaks.h: Implement WB3c, WB15, and WB16.
* lib/uniwbrk/wbrktable.h (uniwbrk_prop_index): New variable
declaration.
* lib/uniwbrk/wbrktable.c (uniwbrk_prop_index): New variable.
(uniwbrk_table): Implement WB14.
* tests/uniwbrk/test-uc-wordbreaks.c (wordbreakproperty_to_string):
Check WBP_ZWJ, WBP_EB, WBP_EM, WBP_GAZ, and WBP_EBG.
* modules/unigbrk/u{32,16,8}-grapheme-breaks: No longer depend on
uc-is-grapheme-break.
* modules/unigbrk/uc-grapheme-breaks: New module.
* modules/unigbrk/uc-grapheme-breaks-tests: New module.
* lib/unigbrk.in.h (GBP_ZWJ, GBP_EB, GBP_EM, GBP_GAZ, GBP_EBG): New
enum value.
(uc_grapheme_breaks): New function, replacing uc_is_grapheme_break.
* lib/unigbrk/u-grapheme-breaks.h: New file.
* lib/unigbrk/u{32,16,8}-grapheme-breaks.c: Rewrite using
u-grapheme-breaks.h instead of uc_is_grapheme_break.
* lib/unigbrk/uc-grapheme-breaks.c: New file.
* lib/unigbrk/uc-is-grapheme-break.c: Partially update to TR29 rev
29.
* tests/unigbrk/test-uc-gbrk-prop.c
(graphemebreakproperty_to_string): Check GBP_ZWJ, GBP_EB, GBP_EM,
GBP_GAZ, and GBP_EBG.
* tests/unigbrk/test-uc-grapheme-breaks.c: New test.
* tests/unigbrk/test-uc-is-grapheme-break.c
(graphemebreakproperty_to_string): Check GBP_ZWJ, GBP_EB, GBP_EM,
GBP_GAZ, and GBP_EBG.
(main): Skip unsupported rules involving 3 or more characters,
namely GB10, GB12, and GB13.
* lib/uniwidth/width.c (nonspacing_table_data): Update.
* all generated files under lib/uni* and tests/uni*: Regenerate.
* all the dependant modules: Bump version.
Diffstat (limited to 'tests/unigbrk/test-uc-is-grapheme-break.c')
-rw-r--r-- | tests/unigbrk/test-uc-is-grapheme-break.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/tests/unigbrk/test-uc-is-grapheme-break.c b/tests/unigbrk/test-uc-is-grapheme-break.c index 6795db16aa..3bf92eeead 100644 --- a/tests/unigbrk/test-uc-is-grapheme-break.c +++ b/tests/unigbrk/test-uc-is-grapheme-break.c @@ -45,6 +45,11 @@ graphemebreakproperty_to_string (int gbp) CASE(LV) CASE(LVT) CASE(RI) + CASE(ZWJ) + CASE(EB) + CASE(EM) + CASE(GAZ) + CASE(EBG) } abort (); } @@ -81,6 +86,8 @@ main (int argc, char *argv[]) char *comment; const char *p; ucs4_t prev; + int last_compchar_prop; + size_t ri_count; lineno++; @@ -90,6 +97,8 @@ main (int argc, char *argv[]) if (line[strspn (line, " \t\r\n")] == '\0') continue; + last_compchar_prop = -1; + ri_count = 0; prev = 0; p = line; do @@ -135,7 +144,30 @@ main (int argc, char *argv[]) next = next_int; } - if (uc_is_grapheme_break (prev, next) != should_break) + if ((last_compchar_prop == GBP_EB + || last_compchar_prop == GBP_EBG) + && uc_graphemeclusterbreak_property (next) == GBP_EM) + { + int prev_gbp = uc_graphemeclusterbreak_property (prev); + int next_gbp = uc_graphemeclusterbreak_property (next); + fprintf (stderr, "%s:%d: skipping GB10: should join U+%04X (%s) " + "and U+%04X (%s)\n", + filename, lineno, + prev, graphemebreakproperty_to_string (prev_gbp), + next, graphemebreakproperty_to_string (next_gbp)); + } + else if (uc_graphemeclusterbreak_property (next) == GBP_RI + && ri_count % 2 != 0) + { + int prev_gbp = uc_graphemeclusterbreak_property (prev); + int next_gbp = uc_graphemeclusterbreak_property (next); + fprintf (stderr, "%s:%d: skipping GB12: should join U+%04X (%s) " + "and U+%04X (%s)\n", + filename, lineno, + prev, graphemebreakproperty_to_string (prev_gbp), + next, graphemebreakproperty_to_string (next_gbp)); + } + else if (uc_is_grapheme_break (prev, next) != should_break) { int prev_gbp = uc_graphemeclusterbreak_property (prev); int next_gbp = uc_graphemeclusterbreak_property (next); @@ -150,6 +182,16 @@ main (int argc, char *argv[]) p += strspn (p, " \t\r\n"); prev = next; + + if (!(uc_graphemeclusterbreak_property (next) == GBP_EXTEND + && (last_compchar_prop == GBP_EB + || last_compchar_prop == GBP_EBG))) + last_compchar_prop = uc_graphemeclusterbreak_property (next); + + if (uc_graphemeclusterbreak_property (next) == GBP_RI) + ri_count++; + else + ri_count = 0; } while (*p != '\0'); } |