如何用Scintilla开始一个项目?

时间:2012-04-29 12:00:37

标签: .net scintilla

我一直在努力做一个基于Scintilla编辑器的项目,因为我是一个新手,我不知道如何实际开始一个项目。我按照自述文件中的步骤操作,并且能够在Windows上构建Scintilla,现在试图找出接下来应该做什么。

非常感谢任何类型的答案/建议/建议。感谢。

3 个答案:

答案 0 :(得分:1)

当我开始使用词法分析器时,我发现它有点令人生畏,但所有内容归结为一些重要的想法:

  • 将lexer放入lexer文件夹
  • 告诉scintilla关于你添加的词法分析器
  • 将常量添加到scintilla.iface
  • 告诉scintilla你自己的常数(如果你使用的话)
  • 代码/编译+重复直至满意

一个实际的例子是:

创建Lexer模板后,将其命名为LexNEW.cxx

  • 将LexNew.cxx放入/lexers文件夹
  • 输入/src并运行LexGen.py,这告诉scintilla将新的词法分析器添加到Scintilla.h中

现在将常量添加到.iface文件中。最重要的是:val SCLEX_NEW=108其中108是未使用的ID号,lex new=SCLEX_NEW SCE_NEW_其中new是词法分析器的有效唯一短标识符。

将它们放在与其他部分相同的部分(以避免以后混淆),如果有疑问则使用其他定义之一作为模板!

现在,在您的lex new=行下方,您可以定义自己的常量值,如:

val SCE_NEW_DEFAULT=0
val SCE_NEW_COMMENTLINE=1
val SCE_NEW_COMMENTBLOCK=2
val SCE_NEW_ERROR=31

完成此步骤后,您几乎准备好了。

  • 输入/include并运行Hface.py,告诉scintilla您的新常量。

如果您的lex代码有效,那么您就可以编译了。

每次创建新常量时,请记住重复最后一步。 HFace.py脚本将这些值添加到SciLexer.h,如果您不想每次都执行两个步骤,可以手动执行这些操作。

这就是我的朋友编译后确保你的程序设置你的词法分析器:sci.SetLexer(108)并为每个状态设置一些颜色,如sci.StyleSetFore(01, 0x008800) // SCE_NEW_COMMENTLINE等等。

您要使用的最后一件事SciLexer.dll,其中包含的所有词法分析器都不是scintilla.dll 祝你好运!

答案 1 :(得分:0)

您可能会发现Scintilla for .NET为您提供了一个良好的开端......

答案 2 :(得分:0)

我正在研究基于Scintilla的项目,并与您分享我的一些经验。 要启动项目,首先下载SciLexer.dll,SciLexer.h和Scintilla.h。

然后基于框架构建您的演示项目:

   #include "Scintilla.h"
   #include "SciLexer.h" 
   static HWND global_editor_win = NULL;

      int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
       {            
           HMODULE hmod = ::LoadLibrary(_T("SciLexer.dll"));       
           //other winmain code.
       }

      LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
       {
        RECT rc;       
        switch (message)   {
           case WM_CREATE:
                GetClientRect(hWnd, &rc);
                global_editor_win = ::CreateWindow(_T("Scintilla"), "Source",
                              WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_CLIPCHILDREN,
                              rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
                              hWnd, (HMENU)1001, hInst, 0); 

               ::SendMessage(global_editor_win , SCI_SETTEXT, 0, (LPARAM)"hello, world");   
                ShowWindow(global_editor_win , SW_SHOW);
               break;   
          }
       }

享受!