From f67b7cd8e4b2e872d9a3a6692d672089119af0bf Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 14 Sep 2024 11:56:38 +0200 Subject: [PATCH] unilbrk/tables: Fix table (regression yesterday). Reported by Collin Funk in . * lib/gen-uni-tables.c (output_lbrk_rules_as_tables): Use LBP_AL1 as array index instead of LBP_AL. Update comments. * lib/unilbrk/lbrktables.c: Regenerated. --- ChangeLog | 9 +++++ lib/gen-uni-tables.c | 21 +++++++++--- lib/unilbrk/lbrktables.c | 74 ++++++++++++++++++++-------------------- 3 files changed, 63 insertions(+), 41 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d3c66d510..2b35fe2905 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2024-09-14 Bruno Haible + + unilbrk/tables: Fix table (regression yesterday). + Reported by Collin Funk in + . + * lib/gen-uni-tables.c (output_lbrk_rules_as_tables): Use LBP_AL1 as + array index instead of LBP_AL. Update comments. + * lib/unilbrk/lbrktables.c: Regenerated. + 2024-09-13 Bruno Haible Implement a new property, added by Unicode 16.0.0. diff --git a/lib/gen-uni-tables.c b/lib/gen-uni-tables.c index c27f870bd1..dac7715f55 100644 --- a/lib/gen-uni-tables.c +++ b/lib/gen-uni-tables.c @@ -9480,10 +9480,10 @@ output_lbrk_rules_as_tables (const char *filename, const char *version) /* (LB10) Treat any remaining combining mark or ZWJ as AL. */ /* We resolve LBP_CM at runtime, before accessing the table. */ for (before = 0; before < NLBP; before++) - table[before][LBP_ZWJ] = table[before][LBP_AL]; + table[before][LBP_ZWJ] = table[before][LBP_AL1]; for (after = 0; after < NLBP; after++) - table[LBP_ZWJ][after] = table[LBP_AL][after]; - table[LBP_ZWJ][LBP_ZWJ] = table[LBP_AL][LBP_AL]; + table[LBP_ZWJ][after] = table[LBP_AL1][after]; + table[LBP_ZWJ][LBP_ZWJ] = table[LBP_AL1][LBP_AL1]; /* (LB8a) Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier. */ @@ -9495,12 +9495,25 @@ output_lbrk_rules_as_tables (const char *filename, const char *version) (LB30a) Break between two regional indicator symbols if and only if there are an even number of regional indicators preceding the position of the break. - (LB21a) Don't break after Hebrew + Hyphen. + (LB28a) Don't break inside orthographic syllables of Brahmic scripts, lines + 3 and 4. + (LB25) Do not break between the following pairs of classes relevant to + numbers, lines with NU (SY|IS)* or OP NU or OP IS NU. + (LB21a) Don't break after Hebrew + Hyphen/Break-After, before non-Hebrew. + (LB20a) Don't break after a word-initial hyphen. (LB20) Break before and after unresolved CB. We resolve LBP_CB at runtime, before accessing the table. + (LB19a) Don't break on either side of ambiguous quotation marks, except next + to an EastAsian character. + (LB15c) Break before a decimal mark that follows a space. + Part of (LB15b) Do not break before an ambiguous quotation that is a final + punctuation, even after spaces. + Part of (LB15a) Do not break before an ambiguous quotation that is an initial + punctuation, even after spaces. (LB9) Do not break a combining character sequence; treat it as if it has the line breaking class of the base character in all of the following rules. Treat ZWJ as if it were CM. + Part of (LB8a) Don't break right after a zero-width joiner. (LB8) Break before any character following a zero-width space, even if one or more spaces intervene. We handle LBP_ZW at runtime, before accessing the table. diff --git a/lib/unilbrk/lbrktables.c b/lib/unilbrk/lbrktables.c index 30b0761927..2494c5c87f 100644 --- a/lib/unilbrk/lbrktables.c +++ b/lib/unilbrk/lbrktables.c @@ -37,46 +37,46 @@ const unsigned char unilbrk_table[41][41] = { /* after */ /* WJ GL B2 BA BB HY CL CP1 CP2 EX IN NS OP1 OP2 QU1 QU2 QU3 IS NU PO PR SY AL1 AL2 H2 H3 ID1 ID2 JL JV JT HL AP AK AS VI VF RI ZWJ EB EM */ -/* WJ */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, P, I, I, }, -/* GL */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, P, I, I, }, -/* B2 */ { P, I, P, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* BA */ { P, D, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* BB */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, P, I, I, }, -/* HY */ { P, D, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* CL */ { P, I, D, I, D, I, P, P, P, P, I, P, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* CP1 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, P, D, D, }, -/* CP2 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* EX */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* IN */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* NS */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, +/* WJ */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, }, +/* GL */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, }, +/* B2 */ { P, I, P, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* BA */ { P, D, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* BB */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, }, +/* HY */ { P, D, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* CL */ { P, I, D, I, D, I, P, P, P, P, I, P, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* CP1 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, I, D, D, }, +/* CP2 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* EX */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* IN */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* NS */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, /* OP1 */ { P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, }, /* OP2 */ { P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, }, -/* QU1 */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, P, I, I, }, +/* QU1 */ { P, I, I, I, I, I, P, P, P, P, I, I, I, I, I, I, P, P, I, I, I, P, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, }, /* QU2 */ { P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, }, -/* QU3 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* IS */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* NU */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, D, D, D, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, P, D, D, }, -/* PO */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, P, D, D, }, -/* PR */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, I, I, I, I, I, I, I, I, I, I, D, D, D, D, D, D, P, I, I, }, -/* SY */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, D, D, D, D, P, D, D, }, -/* AL1 */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, I, I, I, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, P, D, D, }, -/* AL2 */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, I, I, I, P, I, I, D, D, D, D, D, D, D, I, D, D, D, I, I, D, P, D, D, }, -/* H2 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, I, I, D, D, D, D, D, D, D, P, D, D, }, -/* H3 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, I, D, D, D, D, D, D, D, P, D, D, }, -/* ID1 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* ID2 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, I, }, -/* JL */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, I, I, D, D, I, I, D, D, D, D, D, D, D, D, P, D, D, }, -/* JV */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, I, I, D, D, D, D, D, D, D, P, D, D, }, -/* JT */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, I, D, D, D, D, D, D, D, P, D, D, }, -/* HL */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, I, I, I, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, P, D, D, }, -/* AP */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, I, D, D, D, D, D, D, D, D, D, I, I, D, D, D, P, D, D, }, -/* AK */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, I, I, D, P, D, D, }, -/* AS */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, I, I, D, P, D, D, }, -/* VI */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* VF */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* RI */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, D, }, -/* ZWJ */ { D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, I, I, D, D, D, D, D, D, D, D, D, D, D, I, I, }, -/* EB */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, P, D, I, }, +/* QU3 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* IS */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* NU */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, D, D, D, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, I, D, D, }, +/* PO */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, I, D, D, }, +/* PR */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, I, D, D, P, I, I, I, I, I, I, I, I, I, I, D, D, D, D, D, D, I, I, I, }, +/* SY */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, I, D, D, D, D, D, D, D, D, D, }, +/* AL1 */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, I, I, I, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, I, D, D, }, +/* AL2 */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, I, I, I, P, I, I, D, D, D, D, D, D, D, I, D, D, D, I, I, D, I, D, D, }, +/* H2 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, I, I, D, D, D, D, D, D, D, D, D, D, }, +/* H3 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, I, D, D, D, D, D, D, D, D, D, D, }, +/* ID1 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* ID2 */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, I, }, +/* JL */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, I, I, D, D, I, I, D, D, D, D, D, D, D, D, D, D, D, }, +/* JV */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, I, I, D, D, D, D, D, D, D, D, D, D, }, +/* JT */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, I, D, D, D, D, D, D, D, D, D, D, }, +/* HL */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, I, I, I, P, I, I, D, D, D, D, D, D, D, I, D, D, D, D, D, D, I, D, D, }, +/* AP */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, I, D, D, D, D, D, D, D, D, D, I, I, D, D, D, D, D, D, }, +/* AK */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, I, I, D, D, D, D, }, +/* AS */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, I, I, D, D, D, D, }, +/* VI */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* VF */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* RI */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, D, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, +/* ZWJ */ { P, I, D, I, D, I, P, P, P, P, I, I, I, D, I, D, P, P, I, I, I, P, I, I, D, D, I, I, D, D, D, I, D, D, D, D, D, D, I, I, I, }, +/* EB */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, I, }, /* EM */ { P, I, D, I, D, I, P, P, P, P, I, I, D, D, I, D, P, P, D, I, D, P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, }, /* "" */ /* before */ -- 2.39.5