红孩儿编辑器模块设计7
首次明确一下如下的相关的概念
屏幕 与屏幕的可见区,缓存与文件
屏幕与屏幕的可见区的关系,就好像是拿着放大镜看地图。
地图很大,用放大镜来移动着,看一个部分。
转换公式是
屏幕的可见区的相对的行号+左上角的顶点在屏幕中的行数=屏幕中的绝对的行号
屏幕的可见区的相对的列号+左上角的顶点在屏幕中的列数=屏幕中的绝对的列号
屏幕与缓存都可以看成是两维的数组,如果没有自动换行,
它们一行与一行一一对应。如果是有自动换行,它的对应关系
在模块设计3中有比较详细的介绍 ,这里不写了。
屏幕与缓存的列号的对应逻辑描述如下:
分成如下的四种情况:
1 显示行号,自动换行
缓存中的列号=屏幕上的可见区的相对的列号-行号占用的字符数
+(缓存中该行的序列号-1)*(单行的字符总数 -行号占用的字符数)
2 显示行号,不自动换行
缓存中的列号=屏幕上的绝对的列号 -行号占用的字符数
3 不显示行号,自动换行
缓存中的列号=屏幕上的可见区的相对的列号+(缓存中该行的序列号-1)*单行的字符总数
4 不显示行号,不自动换行
缓存中的列号=屏幕上的绝对的列号
缓存与文件 是二维与一维的关系,把缓存写入文件是序列化的操作过程,
把文件读入缓存是反序列化的操作过程。序列化与反序列化的逻辑,
在下一次文档中详细描述。