Scintilla笔记(2)
Scintilla支持语法高亮
要支持语法高亮,分为三个步骤:
一、选定语法解析器
语法解析器用于把代码分为一个个单词(token),另外,还用于代码折叠控制等。
Scintilla作为源码编辑器支持非常多的语言,如C/C++、Java、SQL、HTML、Structured Text(ST)等等。
//Setup the Lexer,非常重要,否则会影响折叠,高亮等等功能。
std::string st_keywords = ui_st_driver::GetStLanguageKeywordStr();
m_ScintillaEdit.SetLexer(SCLEX_CPP); //设置语言,此处设置为C++语言
m_ScintillaEdit.SetKeyWords(0, U8ToU16(st_keywords).c_str());//设置Scintilla的语言关键字
|
除了使用SCI_SETLEXER外,还可以使用SCI_SETLEXERLANGUAGE命令,如:
m_ScintillaEdit.SetLexerLanguage("cpp");
接受一个字符串参数,这个字符串定义于代码解析器源码(src\lexcpp.cxx)。
二、设置关键字
语法解析只负责把代码拆分开,至于哪些是关键字,还得我们来指定。
这种方式带来了些许的灵活性,比如我们要高亮一种自定义的语言,这种语言的风格与C++类似(如Java、C#、php等),我们也 可以选定SCLEX_CPP作为语法解析器,然后定义自己的关键字。(所以不需要把各种解析器都编译进DLL文件里)