AvalonEdit - 语法突出显示 - 如何添加下划线,更改字体大小等?

时间:2014-05-25 05:07:35

标签: avalonedit

我正在尝试构建一个基本的,Markdown风格的普通/富文本编辑器。 (其中一个文本是内联样式,而不是像大多数Markdown编辑那样并排放置两个面板)(我也不会支持完整的Markdown规范 - 没有列表或表格,主要是富文本格式像粗体,斜体,下划线等)

我有一个使用AvalonEdit项目的项目(通过源代码,而不是Nuget包) - 我让编辑器完全按照我想要的方式进行设置 - 然后我开始写一个突出显示XSHD文件的语法,当我意识到荧光笔只支持字体颜色,斜体,粗体等格式,而不支持字体大小,下划线和其他格式......

如何添加其他字体格式?我是否必须编写一个全新的解析器/荧光笔/其他什么?是否有一种简单的方法来连接和扩展现有的荧光笔?

我已经对源代码中的一个文件做了一些小改动(TextEditor.xaml),并且我愿意更改更多以使其工作 - 尽管当我开始时我希望尽可能少地触及源代码尽可能......

如果有人能指出我正确的方向,我会很感激 - 谢谢!

1 个答案:

答案 0 :(得分:2)

来自the syntax highlighting documentation

  

在文本渲染扩展点中,支持“视觉”   线变换器“可以改变后视线的显示   它是由“视觉元素发生器”构建的。一个有用的   实现IVisualLineTransformer的基类   语法高亮是DocumentColorizingTransformer。看一眼   该类的文档,以了解如何编写完全自定义语法   荧光笔。本文仅讨论XML驱动的内置函数   突出引擎。

多次阅读和/或浏览过该页面后,我不能完全理解这一点,直到我仔细查看代码,阅读the SharpDevelop forums上的一些帖子等。

如果你处于我所处的同一阶段(并且不能完全围绕这句话),那么要点就是编辑做了这两件事(当然是简化的):

  1. 它生成可见文本行(它只与行有关 出于性能原因,目前在屏幕上可见)
  2. 然后它会在所生成的文本上运行各种变换器,以各种方式设置样式
  3. 因此,“XML驱动的内置突出显示引擎”只是查找和设置文本样式的一种方式 - 这意味着要实现更“先进”的方式,即构建自定义文本转换器,像DocumentColorizingTransformer。

    这里有一些关于DocumentColorizingTransformer的信息,你可能会发现它们很有用(除了他们指向你的API文档):

    https://stackoverflow.com/a/23251990/859833

    http://danielgrunwald.de/coding/AvalonEdit/rendering.php