我一直在尝试基于 Scintilla 编辑器做一个项目,因为我是新手,所以我不知道如何真正开始一个项目。我按照自述文件中的步骤进行操作,并能够在 Windows 上构建 Scintilla,现在正试图弄清楚我接下来应该做什么。
任何形式的回答/建议/建议都将受到高度赞赏。谢谢。
当我开始使用我的词法分析器时,我发现它有点令人生畏,但一切都归结为一些重要的想法:
一个实际的例子是:
创建 Lexer 模板后,您将其命名为 LexNEW.cxx
/lexers
文件夹/src
并运行LexGen.py
,这告诉 scintilla 有一个新的词法分析器,将其添加到 Scintilla.h现在将常量添加到 .iface 文件中。最重要的是:val SCLEX_NEW=108
where108
是未使用的 id 号,lex new=SCLEX_NEW SCE_NEW_
wherenew
是您的词法分析器的有效唯一短标识符。
将它们放在与其他部分相同的部分(以避免以后混淆),如果有疑问,请使用其他定义之一作为模板!
现在在您的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
它会告诉闪烁你的新常量。如果您的 lex 代码有效,那么您就可以编译了。
记住每次创建新常量时都要重复最后一步。该HFace.py
脚本将这些值添加到 SciLexer.h,如果您不想每次都执行两个步骤,您可以手动执行。
这就是我的朋友编译后确保你的程序设置你的词法分析器的东西:sci.SetLexer(108)
并为每个状态设置一些颜色sci.StyleSetFore(01, 0x008800) // SCE_NEW_COMMENTLINE
,等等。
您将要使用SciLexer.dll
的最后一件事是包含所有词法分析器而不是scintilla.dll
祝您好运!
您可能会发现.NET 的 Scintilla 为您提供了一个良好的开端......
我正在从事基于 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;
}
}
享受!