频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

代码着色--关于循环与分组

来源:qqread 作者:keith的天… 出处:巧巧读书 2008-04-24 进入讨论组
下一页 1 2 

本来这个功能应该算是编辑器的一个附属功能,本来有一个JS的代码着色器(syntaxhighlighter),现在版本是1.51,但是由于其功能始终是客户端的,有一些服务器操作比较麻烦,于是自己写了一个,当前只是实现了C#版本。
在这里,我讲述一下该代码实现模式,这里主要讲讲循环和分组的机制

主体:

代码着色--关于循环与分组(图一)


HighLightCode:为高亮代码的基类,并抽象,含有抽象方法
通过方法实现实例

代码着色--关于循环与分组(图二)public static HighLightCode CreateHighLightCode(CodeType regexcodetype)
代码着色--关于循环与分组(图三)代码着色--关于循环与分组(图四)        代码着色--关于循环与分组(图五){
代码着色--关于循环与分组(图六)            HighLightCode code = null;
代码着色--关于循环与分组(图六)            if (regexcodetype == CodeType.CSharp)
代码着色--关于循环与分组(图七)代码着色--关于循环与分组(图八)            代码着色--关于循环与分组(图五){
代码着色--关于循环与分组(图六)                code = new RegexCSharp();
代码着色--关于循环与分组(图九)            }
代码着色--关于循环与分组(图六)
代码着色--关于循环与分组(图六)            return code;
代码着色--关于循环与分组(图十)        }


RegexCSharp:实现HighLightCode方法。
当前为C#实现了该方法,如果Java类实现该方法,则可以扩展出Java的着色代码.

思路:
如果我们直接使用正则表达式进行匹配,那么比较麻烦,会出现一些问题,如://string abc = "hello";那么"hello"会被分析为引号部分,而非注释部分。要解决该问题,我们先分析一下代码着色的原理和基础。
特殊的符号包括单引号,双引号,单行注释,多行注释的判断,由于这些情况都是成对的出现,我们需要找出这4个情况前后匹配的数据进行分组处理。
注意,单行注释由//开头,\r\n结尾
如:string abc= "hello!";
那么string abc=作为group1,"hello!"作为group2,;作为group3。那么在group1和group3我们需要的仅仅是对关键字进行匹配,在这里最简单的方法就是正则表达式进行匹配和着色。那么对于group2无非就是添加深红色而已。但是对于分组我们需要找到最先出现的符号位置,如:string abc = "hello // world!";此时的//应该作为字符串而非注释,所以它必须为group2中。

分组方法:
我们先讨论只有一个目标符号的情况。即:string abc= "hello!";
我们首先将4个符号的出现的初始位置找到,进行排序,得到位置最小的符号,那么该组就是以该符号为基准。在这里,我使用了List进行排序。得到位置最小的符号组,那么它就是我们要寻找的目标符号,于是寻找他的结尾符号,则可以得到它具体的字符串。

循环流程:
由于程序不会只有一个目标符号,如:
string a1= "hello!";
string a2= "i love you!";
//string "a3";
上面实例则存在7个组
group1=string a1=
group2="hello!"
group3=;
group4=string a2= 
group5="i love you!"
group6=;
group7=//string "a3";
 
这样的组会存在多个,于是我们从目标字符串的0位置开始到它的长度进行循环(for(int i=0;i<code.length;i++)),得到多个的目标组。

进入讨论组讨论。
下一页 1 2 
收藏此文】【 】【打印】【关闭
较早的文章:ADO.NET参数详解

较新的文章:C#实现3DES加密24位密钥
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章