我正在尝试使用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指定的行为,还是我正在使用的库实现的怪癖?
答案 0 :(得分:5)
是的,这是Unicode换行算法指定的内容。 UAX #14: Unicode Line Breaking Algorithm, section 6.1 "Non-tailorable Line Breaking Rules"中的规则LB3说:
总是在文字末尾打破。
规范进一步解释:
[此规则]旨在处理退化案例,因此整个文本至少有一个换行符。