您的位置:首页 > 编程语言

自己动手设计代码编辑器——(二)导入源代码

2013-06-26 19:15 591 查看
今天去上课时

老师居然说,课程设计目前只注重界面上的设计。。。我去。。。谁一开始就设计界面,不注重逻辑???我又不是美工

所以果断下了第三方库

目前用了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()中要用到的类都分析了,接下来就是分析下函数本身了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: