From: Bruno Haible Date: Mon, 12 Feb 2024 17:50:13 +0000 (+0100) Subject: uniwidth/width: Assign width 1 to prepended concatenation marks. X-Git-Tag: v1.0~432 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=30f438045052a6e35335efdeaa84ba54748e46df;p=gnulib.git uniwidth/width: Assign width 1 to prepended concatenation marks. Suggested by Jules Bertholet in . * lib/gen-uni-tables.c (is_nonspacing): For characters with property Prepended_Concatenation_Mark, return false instead of true. * lib/uniwidth/width0.h: Regenerated. This assigns width 1 to the characters U+0600..U+0605, U+06DD, U+070F, U+0890..U+0891, U+08E2, U+110BD, U+110CD. * modules/uniwidth/width (configure.ac): Bump required libunistring version. * modules/uniwidth/u8-width (configure.ac): Likewise. * modules/uniwidth/u8-strwidth (configure.ac): Likewise. * modules/uniwidth/u16-width (configure.ac): Likewise. * modules/uniwidth/u16-strwidth (configure.ac): Likewise. * modules/uniwidth/u32-width (configure.ac): Likewise. * modules/uniwidth/u32-strwidth (configure.ac): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 019ccf0c7b..80d3ec562f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2024-02-12 Bruno Haible + + uniwidth/width: Assign width 1 to prepended concatenation marks. + Suggested by Jules Bertholet in + . + * lib/gen-uni-tables.c (is_nonspacing): For characters with property + Prepended_Concatenation_Mark, return false instead of true. + * lib/uniwidth/width0.h: Regenerated. This assigns width 1 to the + characters U+0600..U+0605, U+06DD, U+070F, U+0890..U+0891, U+08E2, + U+110BD, U+110CD. + * modules/uniwidth/width (configure.ac): Bump required libunistring + version. + * modules/uniwidth/u8-width (configure.ac): Likewise. + * modules/uniwidth/u8-strwidth (configure.ac): Likewise. + * modules/uniwidth/u16-width (configure.ac): Likewise. + * modules/uniwidth/u16-strwidth (configure.ac): Likewise. + * modules/uniwidth/u32-width (configure.ac): Likewise. + * modules/uniwidth/u32-strwidth (configure.ac): Likewise. + 2024-02-12 Bruno Haible Implement a new property, added by Unicode 9.0.0. diff --git a/lib/gen-uni-tables.c b/lib/gen-uni-tables.c index bc228105b4..c73ce06d64 100644 --- a/lib/gen-uni-tables.c +++ b/lib/gen-uni-tables.c @@ -6669,8 +6669,13 @@ fill_width (const char *width_filename) /* The non-spacing attribute table consists of: * Non-spacing characters; generated from PropList.txt or "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" - * Format control characters; generated from - "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" + * Format control characters, except for characters with property + Prepended_Concatenation_Mark; generated from + "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" and from + "grep Prepended_Concatenation_Mark PropList.txt". + Rationale for the Prepended_Concatenation_Mark exception: + The Unicode standard says "Unlike most other format characters, + however, they should be rendered with a visible glyph". * Zero width characters; generated from "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" * Hangul Jamo characters that have conjoining behaviour: @@ -6695,7 +6700,9 @@ is_nonspacing (unsigned int ch) { return (unicode_attributes[ch].name != NULL && (get_bidi_category (ch) == UC_BIDI_NSM - || is_category_Cc (ch) || is_category_Cf (ch) + || is_category_Cc (ch) + || (is_category_Cf (ch) + && !is_property_prepended_concatenation_mark (ch)) || strncmp (unicode_attributes[ch].name, "ZERO WIDTH ", 11) == 0 || (ch >= 0x1160 && ch <= 0x11A7) || (ch >= 0xD7B0 && ch <= 0xD7C6) /* jungseong */ || (ch >= 0x11A8 && ch <= 0x11FF) || (ch >= 0xD7CB && ch <= 0xD7FB) /* jongseong */ diff --git a/lib/uniwidth/width0.h b/lib/uniwidth/width0.h index 77954eb4d8..6cc35536ad 100644 --- a/lib/uniwidth/width0.h +++ b/lib/uniwidth/width0.h @@ -46,19 +46,19 @@ static const unsigned char nonspacing_table_data[48*64] = { 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ /* 0x0600-0x07ff */ - 0x3f, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ + 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ - 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ - 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ + 0x00, 0x00, 0xc0, 0x9f, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x20, /* 0x07c0-0x07ff */ /* 0x0800-0x09ff */ 0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ - 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ - 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */ + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ + 0x00, 0xfc, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */ 0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ @@ -273,8 +273,8 @@ static const unsigned char nonspacing_table_data[48*64] = { /* 0x11000-0x111ff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, /* 0x11040-0x1107f */ - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */ - 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x06, /* 0x11080-0x110bf */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ 0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */ diff --git a/modules/uniwidth/u16-strwidth b/modules/uniwidth/u16-strwidth index 1a4ea001e9..f7ceb9272c 100644 --- a/modules/uniwidth/u16-strwidth +++ b/modules/uniwidth/u16-strwidth @@ -10,7 +10,7 @@ uniwidth/u16-width unistr/u16-strlen configure.ac: -gl_LIBUNISTRING_MODULE([1.1], [uniwidth/u16-strwidth]) +gl_LIBUNISTRING_MODULE([1.2], [uniwidth/u16-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U16_STRWIDTH diff --git a/modules/uniwidth/u16-width b/modules/uniwidth/u16-width index 161898c93e..dfd08e3fec 100644 --- a/modules/uniwidth/u16-width +++ b/modules/uniwidth/u16-width @@ -10,7 +10,7 @@ uniwidth/width unistr/u16-mbtouc-unsafe configure.ac: -gl_LIBUNISTRING_MODULE([1.1], [uniwidth/u16-width]) +gl_LIBUNISTRING_MODULE([1.2], [uniwidth/u16-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U16_WIDTH diff --git a/modules/uniwidth/u32-strwidth b/modules/uniwidth/u32-strwidth index 9c36df422a..a13836f1cc 100644 --- a/modules/uniwidth/u32-strwidth +++ b/modules/uniwidth/u32-strwidth @@ -10,7 +10,7 @@ uniwidth/u32-width unistr/u32-strlen configure.ac: -gl_LIBUNISTRING_MODULE([1.1], [uniwidth/u32-strwidth]) +gl_LIBUNISTRING_MODULE([1.2], [uniwidth/u32-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U32_STRWIDTH diff --git a/modules/uniwidth/u32-width b/modules/uniwidth/u32-width index 34f25fea76..d90d9b9a20 100644 --- a/modules/uniwidth/u32-width +++ b/modules/uniwidth/u32-width @@ -9,7 +9,7 @@ uniwidth/base uniwidth/width configure.ac: -gl_LIBUNISTRING_MODULE([1.1], [uniwidth/u32-width]) +gl_LIBUNISTRING_MODULE([1.2], [uniwidth/u32-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U32_WIDTH diff --git a/modules/uniwidth/u8-strwidth b/modules/uniwidth/u8-strwidth index 303ee5c010..26857ae4b0 100644 --- a/modules/uniwidth/u8-strwidth +++ b/modules/uniwidth/u8-strwidth @@ -10,7 +10,7 @@ uniwidth/u8-width unistr/u8-strlen configure.ac: -gl_LIBUNISTRING_MODULE([1.1], [uniwidth/u8-strwidth]) +gl_LIBUNISTRING_MODULE([1.2], [uniwidth/u8-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U8_STRWIDTH diff --git a/modules/uniwidth/u8-width b/modules/uniwidth/u8-width index 36df3afe3f..46f5e4e014 100644 --- a/modules/uniwidth/u8-width +++ b/modules/uniwidth/u8-width @@ -10,7 +10,7 @@ uniwidth/width unistr/u8-mbtouc-unsafe configure.ac: -gl_LIBUNISTRING_MODULE([1.1], [uniwidth/u8-width]) +gl_LIBUNISTRING_MODULE([1.2], [uniwidth/u8-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U8_WIDTH diff --git a/modules/uniwidth/width b/modules/uniwidth/width index 30973445b0..dc028317a1 100644 --- a/modules/uniwidth/width +++ b/modules/uniwidth/width @@ -13,7 +13,7 @@ uniwidth/base streq configure.ac: -gl_LIBUNISTRING_MODULE([1.1], [uniwidth/width]) +gl_LIBUNISTRING_MODULE([1.2], [uniwidth/width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH