【问题标题】:Do Unicode's line breaking rules require the last character to be a mandatory break?Unicode 的换行规则是否要求最后一个字符是强制换行符?
【发布时间】:2016-03-09 23:56:23
【问题描述】:

我正在尝试使用 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 line-breaks


    【解决方案1】:

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

    总是在文本末尾换行。

    规范进一步解释:

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

    【讨论】:

    • 感谢您快速准确的回答!
    • 所以由于 libunibreak 采用语言参数,这是否意味着它不支持在单行文本中使用多种语言?见stackoverflow.com/questions/56917389
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    相关资源
    最近更新 更多