红孩儿编辑器的详细设计

红孩儿编辑器的详细设计

1。输入子系统
第一个设计问题是编辑器是采用多模式切换的方式,还是单模式的方式。本次开发采用了单模式的方式
多模式是指像linux操作系统下的vim编辑器那样分成编辑模式,命令模式,单行模式等。
单模式只有一种编辑模式。符合绝大多数的用户的使用习惯,开发会复杂一些。
多模式有利于开发实践,有利于纯键盘操作,和执行性能等,是适合系统管理员与程序员使用的方式。
多模式切换的概念会让普通用户一头雾水,增加学习使用编辑器的成本。
以易用性为第一的原则,因此选择单模式。

系统对键盘和鼠标的响应依赖于html的事件响应机制。
键盘的响应如下:
对字符,数字和符号,以及箭头等控制键有响应,F1到F12等键无响应
对键盘的响应分成按下和按键弹起两个动作分别响应。
鼠标响应的是单点击操作。

键值映射模块的设计是主要为了程序的可读性,可维护性的考虑。
把按键的键值码与字符对应起来。例如数字0-9的键值码就是它的ascii码。

2。核心控制子系统
二级的控制逻辑
第一级的配置信息主要有输入语言的设置例如中文或者是英语,输入法的设置例如
五笔或者是拼音等,现在的默认是五笔。

第二级的控制是字符分成英语字母,数字,空格,标点符号。
在输入的语言设置为英语的情况下,第二级不区分字符,直接显示在屏幕上。
在设置为汉语的情况下,分成多种输入法的情况,现在专门分析五笔输入法的情况。
第一种情况是多个英语字母加上一个数字或者是一个空格,打出一个汉字
第二种情况是仅有数字,空格,标点符号时直接打印在屏幕上。

配置模块
它的信息的数据结构目前设计为键值对
例如 config.is_auto_newline    是否自动换新行
        config.is_show_linenum  是否显示行号
        config.is_insert_mode     是否是插入模式
        config.font_size   字体的大小
        config.encode      字的编码方式
这些定义会随着需求和开发过程的迭代,进而修改与追加,没必要也不可能在初始时一次定义全面。

输入法模块
以五笔输入法为例子,该模块实现了 一个汉字的五笔字型的编码到这个汉字的区位码的转换。
还有区位码与unicode码和UTF-8的转换。
编码的对应关系存储在表格中,由查找的方式得到相应的转换。
以下的二行的代码注释,表达了输入法模块的最主要的接口。
//输入的是一个英语字符串,输出是一个以区位码为元素的二维矩阵。
// lookup_table('wwww') ---> [[4043],[4043,4043],[2222,4043][]]

光标控制模块
这是一个与其它的模块交互很多的模块,也是特别容易出逻辑错误的地方。
它的内容有定位到行首,行尾,页首,页尾等。
前进一格,后退一格。换行的定位

3缓存子系统

数据结构的设计,现在设计为二维的数组,这部分还得详细得考虑

4渲染
字库的模块
现在采用的是16*16的点阵方式。扩展的情况有32*32点阵和64*64点阵。
矢量的方式,在未来会扩展到。

状态栏模块 现在显示的信息有当前光标所在的位置,包括行和列。当前的文件名。
当前屏幕的左上边的顶点在文件中的行数与列数。默认值为0和0,当有滚动屏幕的操作时
它们才有修改。

编辑主区域的显示模块
分成两种情况,一种是英语字符的显示和汉字的显示。
在系统的底层是通过二重的循环来把字库中的点阵打印在屏幕上。

猜你喜欢

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