c# - 闪烁编辑器多语法突出显示
问题描述
我正在使用 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,另一个用于评论或评论内。
我没有找到任何表明多重语法突出显示的来源。然而,有自定义语法高亮的文档。我需要自定义设置,还是可以使用设置组合来实现我的目标?
解决方案
不幸的是,您需要实现自定义词法分析器,或使用完全不同的库,因为内置的 Markdown 词法分析器不支持注释或多语法突出显示(如源文件顶部的注释所示,它不支持甚至支持嵌入 HTML 的着色)。而且由于在这种情况下 Scintilla.NET只是对原生库的包装,它不会为 Markdown 公开额外的功能。
如果您看一下内置的 HTML 词法分析器,您会发现它实现了对各种嵌入式语言(如 PHP 和 JavaScript)的多种突出显示支持;Markdown 实现也需要相同的方法。
解决此问题的一些选项:
- 按照 HTML 词法分析器的方法实现自定义词法分析器,可能从内置 Markdown 词法分析器的源代码开始
- 使用不同的、更容易定制的语法高亮框架,例如AvalonEdit ( ICSharpCode.TextEditor的 WPF 继承者)。
推荐阅读
- python - Matplotlib plt.text() fails to iterate over loop
- python - 通过对象引用和 pandas DataFrame 传递
- python - 为什么我的 pip install 请求在我安装它时给我一个错误?
- math - 沿向量的一点到另一条线的距离
- c - 堆栈切换的 TSS 表项
- r - R中的mem_change,在删除向量时应该是负数
- sql - SQL - 根据条件填充列值
- python - 在 Python 中迭代大列表的更快方法
- swift - 在 Swift 中解码无效的 UTF-8 时保持二进制表示
- python - Keras LSTM ValueError:检查目标时出错:预期dense_23具有形状(1,)但得到形状为(70,)的数组