创建源代码编辑器需要了解什么?

时间:2010-05-05 00:30:56

标签: editor ocaml

说我想为ocaml编程语言创建一个源代码编辑器,我从哪里开始?我希望为Windows平台创建一个编辑器作为业余爱好项目。我的主要技能是网络开发。我很久以前就开发了Windows应用程序。我不知道今天可用的工具是如何完成的。我有visual studio 2008,C#是我选择的语言。

4 个答案:

答案 0 :(得分:2)

如果您对Visual Studio最熟悉,那么您可以使用Visual Studio Shell基于该基础创建自己的IDE。

这是一个播客,提供了一个很好的概述: http://www.code-magazine.com/codecast/index.aspx?messageid=32b9401a-140d-4acb-95bb-6accd3a3dafc

此外,作为参考,IronPython Studio是使用Visual Studio 2008 Shell创建的: http://ironpythonstudio.codeplex.com/

浏览该源代码应该为您提供一个良好的起点。

答案 1 :(得分:2)

你需要知道:

  • OCAML语法,功能,关键字,功能等......
  • C#因为这是你的母语我猜
  • 您需要了解要实施的功能
  • ...如果它使用的是GUI,或者只是来自像nano / vim这样的终端
  • 语法突出显示如何工作
  • 如何打开和保存文件
  • 自动完成的工作原理
  • 等。

您可能需要查看一些开源编辑器,例如dev-c ++或gedit

此外,由于您亲自参与更多网络活动,您可能希望开始创建一个在Web浏览器中运行的网站。这通常更容易,并帮助您了解创建代码编辑器的基础知识。稍后您可以随时为桌面编写一个。

答案 2 :(得分:2)

较轻的替代方法是使用RichEdit control

例如:
http://www.codeproject.com/Messages/3401956/NET-Richedit-Control.aspx

// http://www.codeproject.com/Messages/3401956/NET-Richedit-Control.aspx

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace RichEditor
{
    public class RichTextBoxEx : RichTextBox    
    {
        IntPtr mHandle = IntPtr.Zero;

        protected override CreateParams CreateParams        
        {
            get
            {
                // Prevent module being loaded multiple times.
                if (this.mHandle == IntPtr.Zero)                
                {
                    // load the library to obtain an instance of the RichEdit50 class.
                    this.mHandle = LoadLibrary("msftedit.dll");                
                }
                // If module loaded, reset ClassName.
                if (this.mHandle != IntPtr.Zero)                 
                {
                    CreateParams cParams = base.CreateParams;
                    // Check Unicode or ANSI system and set appropriate ClassName.
                    if (Marshal.SystemDefaultCharSize == 1)                     
                    {
                        cParams.ClassName = "RichEdit50A";                    
                    }
                    else
                    {
                        cParams.ClassName = "RichEdit50W";                    
                    }
                    return cParams;                
                }
                else // Module wasnt loaded, return default .NET RichEdit20 CreateParams.                
                {
                    return base.CreateParams;                
                }
            }
        }

        ~RichTextBoxEx()        
        {
            //Free loaded Library.
            if (mHandle != IntPtr.Zero)            
            {
                FreeLibrary(mHandle);            
            }
        }

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr LoadLibrary(String lpFileName);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool FreeLibrary(IntPtr hModule);    
    }

}

答案 3 :(得分:1)

您可以使用Scintilla。它具有语法突出显示和一些其他功能。此外,它还有一个.NET版本here

另一个好工具是Alsing Syntax Box

  

强大的语法突出显示Windows   Microsoft.NET的Forms控件   平台。用100%管理的C#编写。   支持语法高亮和代码   折叠几乎任何编程   语言。

使用Alsing Syntax Box,您可以定义语法文件(就像this one for C#),稍后会有intellisense like feature

您可以从其中一个开始为您的编辑。