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

时间:2015-12-04 22:40:48

标签: unicode line-breaks

我正在尝试使用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指定的行为,还是我正在使用的库实现的怪癖?

1 个答案:

答案 0 :(得分:5)

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

  

总是在文字末尾打破。

规范进一步解释:

  

[此规则]旨在处理退化案例,因此整个文本至少有一个换行符。