Unicode 的换行规则是否要求最后一个字符必须是强制换行?

Do Unicode's line breaking rules require the last character to be a mandatory break?

我正在尝试使用 libunibreak (https://github.com/adah1972/libunibreak) 来标记某些给定 unicode 文本中可能的换行符。

Libunibreak 为某些文本中的每个代码单元返回四个可能的选项:

LINEBREAK_MUSTBREAK
LINEBREAK_ALLOWBREAK
LINEBREAK_NOBREAK
LINEBREAK_INSIDEACHAR

希望这些是不言自明的。我希望 MUSTBREAK 对应于像 LF 这样的换行符。但是,对于任何给定的文本,Libunibreak 总是指示最后一个字符是 MUSTBREAK

因此,例如对于字符串 "abc",输出将是 [NOBREAK,NOBREAK,MUSTBREAK]。对于 "abc\n",输出将是 [NOBREAK、NOBREAK、NOBREAK、MUSTBREAK]。我在绘制文本时使用 MUSTBREAK 属性开始新行,因此第一种情况 ("abc") 创建了一个不应该存在的额外换行符。

这是 Unicode 指定的行为还是我正在使用的库实现的怪癖?

是的,这是Unicode换行算法规定的。 UAX #14: Unicode Line Breaking Algorithm, section 6.1 "Non-tailorable Line Breaking Rules" 中的规则 LB3 说:

Always break at the end of text.

规范进一步解释:

[This rule is] designed to deal with degenerate cases, so that there is [...] at least one line break for the whole text.