今天去上课时
老师居然说,课程设计目前只注重界面上的设计。。。我去。。。谁一开始就设计界面,不注重逻辑???我又不是美工
所以果断下了第三方库
目前用了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()中要用到的类都分析了,接下来就是分析下函数本身了