电子病历文本编辑器中文字断行及排版算法研究(3)
- 2013-04-17 10:47
- 作者:袁永福
- 来源:中国数字医疗网
前置标点和后置标点
不能出现在行尾的符号称为前置标点,例如“([{•‘“〈《「『【〔〖(.[{£¥”;不能出现在行首的符号称为后置标点,例如“!),.:;?]}¨•ˇˉ―‖’”…∶、。〃々〉》」』】〕〗!"'),.:;?]`|}~¢”。
比如一个文本行内容为“?张三李四王五【”,这就是一种不和规范的文本行,需要避免这种情况。
在进行文字断行时,若这个文档行的最后一个字符时前置标点时,需要进行提前断行;如果断行后第一个要排版的字符为后置标点时,也需要进行提前断行。
在进行断行的时候,对于段落符号要进行一些特殊处理。段落符号本身是有一定的宽度的,但当文档行要执行断行时,参与计算时的宽度就可以当做零了。
在排版的编程实践中,笔者采用堆栈的方式实现断行。首先将所有要排版的字符压入一个堆栈中,然后循环从堆栈中Peek获得一个字符元素,然后试图添加到当前文档行中,若文档行剩余空间足够容纳新字符,则将该新字符添加到文档行中,同时堆栈执行Pop操作。若文档行剩余空间不够,则不执行Pop操作,新建一个文档行,从而开始新的循环。如果出现提前断行,则需要将当前文档行中的若干个字符元素移出来,并压入堆栈中等着下一次循环中使用。
当堆栈内容为空时,就跳出循环,完成文档的断行操作。
共6页: 上一页 [1][2]3 [4][5][6]下一页 [查看全文] |