很多情况下,平台只支持单行文本的渲染(如HTML5 Canvas),这时就需要手动按照一定的规则对文本进行换行处理。
具体规则如下:
1、分组
该过程稍类似于词法分析过程和LL(1)语法分析过程,每次读取一个字符(每个汉字算一个字符),根据当前字符和上一个字符的类型,决定将该字符插入到上一个字符所在组的末尾,还是新建一个组并将该字符插入到新建的分组中。
以下情况当前字符将被添加到上一个字符所在的组中:
- 上一个字符是不能出现在行尾的标点。
- 当前字符是不能出现在行首的标点。
- 当前字符是字母/数字,且上一个字符也是字母/数字。
- 当前字符是空白字符(如半角空格、全角空格、tab字符),且上一个字符不是空白字符。
一般情况下,以下标点是不能出现在行首的(Word中称为“后置标点”):
!),.:;?]}¨·ˇˉ―‖’”…∶、。〃々〉》」』】〕〗!"'),.:;?]`|}~¢
以下标点是不能出现在行尾的(Word中称为“前置标点”):
([{·‘“〈《「『【〔〖(.[{£¥
举个栗子:对以下文本进行分组
HTML5 的 canva