2

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

我有一个使用 AvalonEdit 项目的项目(通过源代码,而不是 Nuget 包) - 我完全按照我的意愿设置了编辑器 - 然后当我意识到荧光笔只支持时,我开始编写语法高亮 XSHD 文件字体颜色、斜体、粗体等格式,而不是字体大小、下划线等...

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

我已经对源文件 (TextEditor.xaml) 中的一个文件进行了一些小的更改,并且我愿意进行更多更改以完成这项工作 - 尽管当我开始时我希望尽可能少地接触源文件。 ..

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

4

1 回答 1

2

语法高亮文档

文本渲染扩展点之一是对“视觉线转换器”的支持,它可以在“视觉元素生成器”构建视觉线后更改其显示。DocumentColorizingTransformer 是实现 IVisualLineTransformer 以突出语法的有用基类。查看该类的文档以了解如何编写完全自定义的语法荧光笔。本文只讨论 XML 驱动的内置突出显示引擎。

多次阅读和/或扫描该页面后,我无法完全理解这一点,直到我进一步查看代码,阅读SharpDevelop 论坛上的一些帖子等。

如果你和我处于同一阶段(并且不能完全理解那句话),要点是编辑器做了这两件事(当然是简化了):

  1. 它生成可见文本行(出于性能原因,它只影响屏幕上当前可见的行)
  2. 然后它在所述生成的文本上运行各种转换器,以各种方式对其进行样式设置

因此,“XML 驱动的内置突出显示引擎”只是查找和设置文本样式的一种方式——一种更“高级”方式的简单实现,即构建自定义文本转换器,如 DocumentColorizingTransformer .

这里有一些关于 DocumentColorizingTransformer 的信息,您可能会觉得有用(除了他们指向您的 API 文档):

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

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

于 2014-05-25T22:32:48.473 回答