Editor 创建源代码编辑器需要知道什么?

Editor 创建源代码编辑器需要知道什么?,editor,ocaml,Editor,Ocaml,假设我想为ocaml编程语言创建一个源代码编辑器,从哪里开始?我希望创建一个Windows平台的编辑器作为一个爱好项目。我的主要技能是网络开发。我很久以前就开发了windows应用程序。我不知道今天可用的工具是如何完成的。我有VisualStudio 2008和C是我选择的语言。如果您在VisualStudio中最舒服,那么您可以使用VisualStudio shell创建基于该基础的IDE。 下面是一个播客,提供了一个很好的概述: 此外,作为参考,IronPython Studio是使用Vi

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

如果您在VisualStudio中最舒服,那么您可以使用VisualStudio shell创建基于该基础的IDE。

下面是一个播客,提供了一个很好的概述:

此外,作为参考,IronPython Studio是使用Visual Studio 2008 Shell创建的:

浏览这些源代码可以为您提供一个良好的起点。

您需要知道:

  • OCAML语法、功能、关键字、函数等
  • 我想这是你的母语
  • 您需要知道要实现哪些功能
  • …如果它使用GUI或仅从nano/vim这样的终端
  • 语法突出显示的工作原理
  • 如何打开和保存文件
  • 自动完成的工作原理
  • 等等
您可能希望了解一些开源编辑器,如dev-c++或gedit

此外,由于您本人更喜欢web,您可能希望开始创建一个在web浏览器中运行的浏览器。这通常更容易,并帮助您了解创建代码编辑器的基础知识。以后您可以为台式机编写一个。它具有语法突出显示和一些其他功能。此外,它还有一个.NET版本

另一个好工具是:

强大的语法突出显示窗口 Microsoft.NET的窗体控件 站台。用100%托管C#编写。 支持语法突出显示和代码 几乎任何编程都可以折叠 语言

使用Alsing Syntax Box,您可以定义一个语法文件(就像)并在以后创建一个


您可以从编辑器中的一个开始使用。

更轻的替代方法是使用

示例:


源代码编辑器只是一个记事本,它是所有额外的功能,如智能感知、代码突出显示等,构成了一个IDE(我猜这真的是你想要的吗?),是的,IDE,但并不是像eclipse或visual studio这样的重量级IDE。类似记事本的东西,但可以编译和执行代码。它们不能编译和执行代码。编译器(如GCC)编译,处理器执行。IDE只启动编译器。是的,是的,我知道我的程序将调用编译器(ocamlc)。一个键盘快捷键将启动它。我的意思是在外观和感觉上像记事本一样简单。听起来你想要vim或emacs…非常感谢你的回答Ben。我一定会看一看vs外壳和ironpython工作室的概述。谢谢科宁。谢谢你的回答。这正是我要找的。我需要一个开始的地方。就是这样。谢谢,没问题。大多数人不知道的是,科宁是荷兰国王。这里的每个人都不知道我是国王。顺便说一句,thx我现在几乎有2000rep了^^^^ SciTE是我第二喜欢的编辑器。我会看看你提到的两种工具。谢谢这看起来与我的能力格格不入。但我会在舒服的时候再看一看。谢谢
// 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);    
    }

}