红孩儿编辑器的模块设计3

红孩儿编辑器的模块设计3

 编辑器的主显示区域的显示行号的逻辑
首先需要明确的是行号的概念,有文件中的行号和屏幕上相对于屏幕左上角顶点的屏幕的行号。
需要需要的是文件中的行号,这是用户更关心的行号。这也意味着在上下翻页,或者滚动一行时,
行号与显示内容要一起刷新。

逻辑上分成两种情况来讨论。
一种是不自动换行的情况,意味着屏幕上的每一行都有一个行号,这个文件行号=
屏幕上的相对行号+屏幕上左上角的位置在文件中的行号。

另一种是自动换行的情况,意味着可能有屏幕上的好几行对应于文件中的一行。
例如在屏幕上的第三到第五行显示的是文件中的第三行。那么在屏幕上的第三行显示文件的行号3,
第四行和第五行显示文件行号的位置为空,表示,这也是文件第3行的部分。

在这种情况下,屏幕行号与文件的行号需要进行相互的转换。
逻辑如下:
屏幕的行号 转成 文件的行号的逻辑
屏幕的第一行的情况下,是文件的第一行,并且是序号第一号
非首行的情况下  如果关联表中的上一条记录中的占用行数与序列号一致    文件的行号增加一,序列为1
                         如果关联表中的上一条记录中的占用行数与序列号不一致 文件的行号不变,序列增加一。

文件的行号 转成 屏幕的行号的逻辑
文件的第一行,对应的屏幕的开始的行号是1,屏幕的结束行号是开始行号+占用的行数-1
文件的非首行 ,对应的屏幕的开始行号是关联表中上一条记录的结束的行号+1

编辑器的主显示区域新增一个字符的逻辑
分成两种情况
一是非插入模式
显示这个字符,然后光标右移一个字符的位置
二是插入字符模式
显示这个字符,然后光标右移一个字符的位置,
再显示出本行的剩余的字符。

编辑器的主显示区域删除一个字符的逻辑
1、光标向左移动一个字符的位置,
2、在缓存中删除相应的字符,
3、在屏幕上显示出本行的剩余的字符。

编辑器的主显示区域新增一行字符的逻辑
1。在缓存中插入一行
2。在屏幕上刷新显示
3。光标移动到新增的一行的行尾

编辑器的主显示区域删除一行字符的逻辑
1。在缓存中删除一行
2。在屏幕上刷新显示
3。光标移动到删除的一行的行首

猜你喜欢

转载自blog.csdn.net/gggwfn1982/article/details/83961945