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

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

核心控制子系统的控制模块

第一层的控制分成三种情况:
以事件类型分为鼠标,键盘按下事件,键盘弹起事件

第二层控制分成语言设置
分成中文和英文

第三层控制为输入字符的分类
分成直接打印的字符,英语小写字母,数字与空格

五笔输入法的控制逻辑
分成四类,有一级简码,二级简码,三级简码,和四个字母的全码。
在三级简码和全码时,
在查找字符串对应区位码时,映射的数据是有序排序的,以字母的升序进行排列。
现在采用的是顺序遍历的查找算法,以后可以优化为折半查找的算法,实现起来稍微
复杂一点。现在的优化是采用了索引的方式,缩小了查找的范围。


在编辑器的复制与粘贴一行,或者是删除一行时,为了提高执行效率,需要把数组的方式,
改成是链表的方式。数组有利于顺序的遍历操作,链表有利于插入和删除的高效率执行,
尤其是在文件有几千行,几万行的情况下。C语言中有指针,javascript语言中没有,
指针的本质就是一个内存的地址或者是偏移量。所以在javascrpt语言中可以设计一个二维数组
来模拟这个指针。用它来存储二维的缓存的数组的元数据。数组中的每个元素是一个子数组,
代表缓存中的一行。这个子数组的第一个元素指出缓存中上一行的下标,第二个元素指出缓存中的
下一行的下标,第三个元素表示缓存的这一行中有多少个字符。

例如 [[0,2,10],[1,3,2],[2,0,5]]
第一行的上一行是空的,以0表示,第一行的下一行为2是第二行,第一行有10个字符。
第二行的上一行是1,下行是3,有2个字符。
第三行的上一行是2,下行是0,表示没有,即这是最后一行。有5个字符。

猜你喜欢

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