红孩儿编辑器的模块设计15
查找功能的逻辑
需要配置的信息有查找目标是多个还是一个,查找方向是向前还是向后,查找范围是全文还是选中范围,查找使用语言是英语还是汉语,在英语的情况下,大小写字母是否敏感,在汉语的情况下,简体字与繁体字是否敏感。查找是否支持正则表达式。在支持正则表达式的情况下,正则表达式的写法支持哪一种规范呢?因为几乎各种高级的编程语言都内在默认支持了正则表达式,但遗憾的是正则表达式的写法没有标准化,各种语言支持的正则表达式的写法规范有差异。本系统支持的正则表达式形如
[0-9]{m,n}这是一个位数为m到n位的每位都是0到9的任何一个数的数。
(1|2)这是一位数,是1或2。
后缀符号有三个?,*,+分别代表零个到一个,零个到多个,一个到多个。/是分界符,\是转义符。
正则表达式内容很多,详细情况这里不描述了。
查找的实现过程:
1读取配置信息
2分析查找的目标字符串
3逐行对比分析是否存在目标字符串,如果找到了,记录位置,在行末尸毛检查英语单词或者汉语词语是否跨行,如果有跨行,调查跨行查找子程序进行处理。
4如果未找到,返回未找到的消息,如果有找到,对相应目标位置进行渲染,例如找到的位置背景色变成淡黄色。
替换功能与查找非常相似,值得注意的一点是它对文件有修改,要有一键恢复的功能。替换是比查找更有实用价值的功能,但为了保险起见,我们几乎都会先执行查找操作,提前预览一下,将要被替换的位置。再执行等效的替换操作。这与我们对数据库的操作类似,在执行更新与删除数据库记录之前,总要查出相关记录进行确认。
|