Scintilla 编辑器多语法高亮

Ahm*_*mad 5 c# scintilla

我正在使用 scintilla Editor 为 MarkDown Editor 进行语法高亮显示。

        scintilla.Styles[Style.Markdown.Default].ForeColor = Color.Blue;
        scintilla.Styles[Style.Html.Comment].ForeColor = Color.Gray;
        scintilla.Styles[Style.Markdown.Header1].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header2].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header3].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header4].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.Header6].ForeColor = Color.Green;
        scintilla.Styles[Style.Markdown.HRule].ForeColor = Color.Purple;
        scintilla.Styles[Style.Markdown.Header5].ForeColor = Color.Green;

        scintilla.Lexer = Lexer.Markdown;
Run Code Online (Sandbox Code Playgroud)

显然,它不支持 Markdown.Comment,我希望它是灰色的。在评论中,我什至可能想要 CSS 或 Xml 代码。无论如何,我想使用两种类型的突出显示。一个用于 Markdown 原样,另一个用于评论或评论内部。

我没有找到任何指示多重语法高亮的来源。但是,有自定义语法突出显示的文档。我需要自定义设置,还是可以使用设置组合来实现我的目标?

Jan*_*ann 2

不幸的是,您需要实现自定义词法分析器,或使用整个不同的库,因为内置 Markdown 词法分析器支持注释或多重语法突出显示(如源文件顶部的注释所示,它不支持甚至支持嵌入 HTML 的着色)。由于在这种情况下,Scintilla.NET 只是本机库的包装器,因此它不会公开 Markdown 的其他功能。

如果你看一下内置的 HTML 词法分析器,你会发现它实现了对 PHP 和 JavaScript 等各种嵌入式语言的多重突出显示支持;Markdown 的实现也需要同样的方法。


您有一些解决此问题的选项:

  • 按照 HTML 词法分析器的方法实现自定义词法分析器,也许从内置 Markdown 词法分析器的源代码开始
  • 使用不同的、更容易定制的框架来进行语法突出显示,例如AvalonEdit ( ICSharpCode.TextEditor的 WPF 继承者)。