我正在尝试复制Lua的语法高亮样式:
http://oi55.tinypic.com/2h3youe.jpg
我正在使用DScintilla,VLC组件来支持Delphi中的Scintilla。我阅读了Dscintilla的每个模块以查看功能并获得我想要的内容,并且我已经完成了以下操作:
现在的问题是我无法将评论样式更改为斜体,或者将the lexer of Lua that Scintilla has中的条件(if,else,then,while等)着色, 或着色变量。
我当前的代码,有效的代码是:
with EditScript do
begin
SetScrollWidth(430); //so we don't see it
Margins.Right := 1;
Margins.Left := 0;
Margins.Top := 0;
Margins.Bottom := 0;
SetMarginLeft(5);
SetMarginWidthN(0, 40);
SetMarginWidthN(1, 0);
SetExtraAscent(4); //space between lines
//-----------------------margin line numbers
StyleSetFont(STYLE_LINENUMBER, 'Default');
StyleSetBold(STYLE_LINENUMBER, true);
StyleSetBack(STYLE_LINENUMBER, gray);
StyleSetFore(STYLE_LINENUMBER, clWebBlack);
//-----------------------Text
StyleSetFont(STYLE_DEFAULT, 'Courier New');
//TO DO: variables and comments in cursive
SetLexerLanguage('Lua');
SetLexer(SCLEX_LUA);
SetCodePage(CP_UTF8);
//-----------------------Colours
StyleSetFore(SCE_LUA_COMMENTLINE, green_comments);
StyleSetFore(SCE_LUA_NUMBER, blue_numbers);
StyleSetFore(SCE_LUA_CHARACTER, red_strings);
StyleSetFore(SCE_LUA_OPERATOR, green_conditionals);
end;
什么不起作用?这样:
//-----------------------Italics
StyleSetItalic(SCE_LUA_DEFAULT, true);
StyleSetItalic(SCE_LUA_COMMENTLINE, true);
StyleSetItalic(SCE_LUA_COMMENTDOC, true);
或
StyleSetFore(SCE_LUA_COMMENT, clGreen);
StyleSetFore(SCE_LUA_COMMENTDOC, clGreen);
StyleSetFore(SCE_LUA_STRING, clGreen);
StyleSetFore(SCE_LUA_LITERALSTRING, clGreen);
StyleSetFore(SCE_LUA_PREPROCESSOR, clGreen);
// StyleSetFore(SCE_LUA_IDENTIFIER, clGreen); //it highlights everything, wtf?
StyleSetFore(SCE_LUA_STRINGEOL, clGreen);
StyleSetFore(SCE_LUA_WORD, clGreen);
StyleSetFore(SCE_LUA_WORD2, clGreen);
StyleSetFore(SCE_LUA_WORD3, clGreen);
StyleSetFore(SCE_LUA_WORD4, clGreen);
StyleSetFore(SCE_LUA_WORD5, clGreen);
StyleSetFore(SCE_LUA_WORD6, clGreen);
StyleSetFore(SCE_LUA_WORD7, clGreen);
StyleSetFore(SCE_LUA_WORD8, clGreen);
StyleSetFore(SCE_LUA_LABEL, clGreen);
如果我致电ShowMessage(EditScript.DescribeKeyWordSets)
,我会收到以下信息:
Keywords Basic functions String, (table) & math functions (coroutines), I/O & system facilities user1 user2 user3 user4
答案 0 :(得分:1)
如果问题只出现在关键字和变量名称上,那么它似乎归结为两件事:
SetKeyWords
来将您拥有的任何关键字分配给与SCE_LUA_WORD
和SCE_LUA_WORD#
群组相对应的群组。例如,editor:SetKeyWords(0,"if then else")
。SCE_LUA_IDENTIFIER
并以其他颜色为其他所有颜色着色。在我的例子中,设置editor:StyleSetForeground(wxstc.wxSTC_LUA_IDENTIFIER, wx.wxColour(127, 0, 0))
正确地仅为使用的变量着色。答案 1 :(得分:0)
好的,我已经尝试了很多组合,最终得到了这个“半”工作。 在编写setItalic之前,如果我为该样式编写SetFont,它在大多数情况下都会起作用,如下所示:
StyleSetFont(SCE_LUA_COMMENTLINE, 'Courier New');
StyleSetSize(SCE_LUA_COMMENTLINE,10);
StyleSetItalic(SCE_LUA_COMMENTLINE,true); // "--..."
所以现在 ONLY 问题是关键字和变量名称(图中紫色)
<强> @Edited:强> 这是现在的样子:
这是我使用的代码:
with EditScript do
begin
SetScrollWidth(430); //so we don't see it
Margins.Right:=1;
Margins.Left:=0;
Margins.Top:=0;
Margins.Bottom:=0;
SetMarginLeft(5);
SetMarginWidthN(0,40);
SetMarginWidthN(1,0);
SetExtraAscent(4); //space between lines
//-----------------------margin line numbers
StyleSetFont(STYLE_LINENUMBER, 'Default');
StyleSetBold(STYLE_LINENUMBER, true);
StyleSetBack(STYLE_LINENUMBER, gray);
StyleSetFore(STYLE_LINENUMBER,clWebBlack);
//-----------------------Text
SetLexerLanguage('Lua'); //don't work
SetLexer(SCLEX_LUA);
SetCodePage(CP_UTF8);
StyleSetFont(SCE_LUA_DEFAULT, 'Courier New');
StyleSetSize(SCE_LUA_DEFAULT,10);
StyleSetFont(SCE_LUA_IDENTIFIER, 'Courier New');
StyleSetSize(SCE_LUA_IDENTIFIER,10);
StyleSetFont(SCE_LUA_COMMENTLINE, 'Courier New');
StyleSetSize(SCE_LUA_COMMENTLINE,10);
StyleSetFont(SCE_LUA_WORD, 'Courier New');
StyleSetSize(SCE_LUA_WORD,10);
StyleSetFont(SCE_LUA_LITERALSTRING, 'Courier New');
StyleSetSize(SCE_LUA_LITERALSTRING,10);
StyleSetFont(SCE_LUA_COMMENTDOC, 'Courier New');
//-----------------------Italics
StyleSetItalic(SCE_LUA_COMMENTLINE,true); // "--..."
StyleSetItalic(SCE_LUA_LITERALSTRING,true); // "[[...]]"
StyleSetItalic(SCE_LUA_IDENTIFIER,true); // "variables"
StyleSetBold(SCE_LUA_IDENTIFIER,true);
StyleSetBold(SCE_LUA_WORD,true); //init start/end true false
StyleSetItalic(SCE_LUA_COMMENTDOC,true); //don't work
//-----------------------KeyWords
SetKeyWords(0, 'if then else init start end true false');
//-----------------------Colours
StyleSetFore(SCE_LUA_COMMENTLINE, green_comments);
StyleSetFore(SCE_LUA_COMMENTDOC, green_comments);
StyleSetFore(SCE_LUA_NUMBER, blue_numbers);
StyleSetFore(SCE_LUA_CHARACTER, red_strings);
StyleSetFore(SCE_LUA_OPERATOR, green_conditionals);
StyleSetFore(SCE_LUA_LITERALSTRING, green_comments);
StyleSetFore(SCE_LUA_IDENTIFIER, purple);
StyleSetFore(SCE_LUA_WORD, blue_strings);
end;