自己动手设计代码编辑器——(二)导入源代码
2013-06-26 19:15
591 查看
今天去上课时
老师居然说,课程设计目前只注重界面上的设计。。。我去。。。谁一开始就设计界面,不注重逻辑???我又不是美工
所以果断下了第三方库
目前用了Neoforce界面库,如下
![](http://img.blog.csdn.net/20130626190327296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVW5Ta3lUb28=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
实现了一些东西,还是很炫的。。
代码编辑器基本功能都完成了
代码渲染器也完成了代码库虚线的渲染
相关的代码分析器里也完成了查找、括号匹配检查、自动缩进等等等等功能。
下面来说说今天的主题:代码的导入
其实导入很简单
直接调用了LoadFile
LoadFile也非常简单,只是负责把源代码装入到CodeList中,并且每一行加一个换行符
接下来就要分析代码了,最主要的函数是
GetNextCut(),这个函数返回一个CodeCut类型的变量,保存分析后的东西
而在这个函数中,最重要的是
这个函数负责在代码流中读出一个字符。并且自己管理代码流的指针
居然GetNextCut()返回的是一个CodeCut,那么我们就来看看这个
非常简单,就是简单的保存代码块的实际内容(CutString)和代码块的类型(UCutType)
UCutType的部分代码如上,就是简单的设别一个代码块的类型以及颜色
好了,GetNextCut()中要用到的类都分析了,接下来就是分析下函数本身了
老师居然说,课程设计目前只注重界面上的设计。。。我去。。。谁一开始就设计界面,不注重逻辑???我又不是美工
所以果断下了第三方库
目前用了Neoforce界面库,如下
实现了一些东西,还是很炫的。。
代码编辑器基本功能都完成了
代码渲染器也完成了代码库虚线的渲染
相关的代码分析器里也完成了查找、括号匹配检查、自动缩进等等等等功能。
下面来说说今天的主题:代码的导入
其实导入很简单
public void ParseFromFile(string filePath) { try { LoadFile(filePath); Reset(); } catch (Exception ex) { UDebug.Log(ex.Message); } }
直接调用了LoadFile
private void LoadFile(string filePath) { try { CodeList.Clear(); StreamReader fp = new StreamReader(filePath, Encoding.Default); while (!fp.EndOfStream) { CodeList.Add(fp.ReadLine() + '\n'); } fp.Close(); } catch (Exception ex) { throw ex; } }
LoadFile也非常简单,只是负责把源代码装入到CodeList中,并且每一行加一个换行符
接下来就要分析代码了,最主要的函数是
GetNextCut(),这个函数返回一个CodeCut类型的变量,保存分析后的东西
而在这个函数中,最重要的是
// 读取下一个字符 private char GetNextChar() { try { if (EndOfCode) { return (char)0; } OldListIndex = ListIndex; OldLineOffset = LineOffset; if (LineOffset >= CodeList[ListIndex].Length) { ListIndex++; LineOffset = 0; } if ( ListIndex >= CodeList.Count ) { EndOfCode = true; return (char)0; } return CodeList[ListIndex][LineOffset++]; } catch(Exception ex) { throw ex; } }
这个函数负责在代码流中读出一个字符。并且自己管理代码流的指针
居然GetNextCut()返回的是一个CodeCut,那么我们就来看看这个
public class UCodeCut { /// <summary> /// 代码片段的文本内容 /// </summary> public string CutString; /// <summary> /// 片段的类型 /// </summary> public UCutType CutType; public UCodeCut() { CutString = string.Empty; CutType = UCutType.Normal; } }
非常简单,就是简单的保存代码块的实际内容(CutString)和代码块的类型(UCutType)
public class UCutType {
private int TypeId;
private string Name; public UColor CutColor; public UCutType(int id, UColor color, string name) { this.TypeId = id; this.CutColor = color; this.Name = name; }
}
UCutType的部分代码如上,就是简单的设别一个代码块的类型以及颜色
好了,GetNextCut()中要用到的类都分析了,接下来就是分析下函数本身了
相关文章推荐
- 自己动手设计代码编辑器——(五)分析源代码
- 自己动手设计代码编辑器——(一)源代代码分析
- 自己动手设计代码编辑器——(三)撤销与重做
- 自己动手设计代码编辑器——(六)自己写XML管理类
- 自己动手设计代码编辑器——(四)代码智能提示(自动完成功能)
- 自己动手,结合javascript和dhtml做一个ubb编辑器(附例子代码)
- [导入]自己动手实现 lucene 搜索代码高亮显示
- 《自己动手打造“超高精度浮点数类”》源代码简要导读
- 52.自己动手封装Android6.0运行时权限相关代码
- 记录eclipse 外部导入的工程无法使用自己定义的代码风格问题
- 《自己动手写框架2》:用200行的DBF解析器来展示良好架构设计
- 《自己动手写框架3》:业务流程引擎设计
- 自己动手设计ESB(1)
- 自己动手设计ESB(1)
- 自己动手设计ESB(2)
- 自己动手设计ESB(3)
- 自己动手设计ESB(5)
- 自己动手实现jQuery Callbacks完整功能代码详解
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
- 编程精粹--编写高质量的C语言代码(2):自己设计并使用断言(一)