【发布时间】:2013-05-24 19:41:34
【问题描述】:
我正在尝试复制此处显示的 Lua 语法突出显示样式:
我正在使用 DScintilla,它是在 Delphi 中支持 Scintilla 的 VLC 组件。我阅读了 Dscintilla 的每个模块以查看功能并获得所需的内容,并且我已经完成了以下操作:
- 边距(颜色、数字、宽度等)
- 着色 =、>、
- 为数字着色
- 为 cmets 着色
- 使用“...”为字符串着色
现在的问题是我无法将注释样式更改为斜体,或对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),我会得到以下信息:
【问题讨论】:
-
我刚刚使用 wxlua 进行了尝试,并且设置样式颜色和设置斜体属性都可以工作。您使用的是哪个版本的 Scintilla?您是否收到任何错误或没有明显差异?
-
我没有收到任何错误,因为 Scintilla 有一个很好的“如果值无效,则结束时没有错误”,但我看不到明显的差异。我正在使用来自code.google.com/p/dscintilla 的最新 DScintilla 和最后一个 SciLexer.dll(版本 3.3.2)
-
这是最近的。我已经看到一些绑定采用 1/0 而不是真/假。此外,如果您无法使用 Italic 属性,您始终可以将 StyleSetFont 与具有 Italic 样式的字体一起使用。
-
虽然我可以做到,但我无法用这些特殊的词“while,else,if,begin,end,etc.”来解决词法分析器的问题。在我发布的链接中(在 Scintilla 内)
-
@PaulKulchenko
标签: delphi colors lua scintilla