首页 > 解决方案 > 闪烁编辑器多语法突出显示

问题描述

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

        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;

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

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

标签: c#scintilla

解决方案


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

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


解决此问题的一些选项:

  • 按照 HTML 词法分析器的方法实现自定义词法分析器,可能从内置 Markdown 词法分析器的源代码开始
  • 使用不同的、更容易定制的语法高亮框架,例如AvalonEdit ( ICSharpCode.TextEditor的 WPF 继承者)。

推荐阅读