YSSCore::Editor::SyntaxHighlighter Class
class YSSCore::Editor::SyntaxHighlighterSyntaxHighlighter是一个基于QSyntaxHighlighter的抽象类,用于实现文本编辑器中的语法高亮和错误提示功能. 详情...
| 头文件: | #include <SyntaxHighlighter> |
| 自以下版本: | YSS 0.13.0 |
- 所有成员列表(包含继承成员)
- SyntaxHighlighter 是该集合的一部分:语言服务框架.
公开成员函数
(自 YSS 0.13.0 引入) | SyntaxHighlighter(YSSCore::Editor::TextEdit *parent = nullptr) |
(自 YSS 0.13.0 引入) virtual | ~SyntaxHighlighter() |
(自 YSS 0.13.0 引入) void | autoRenderMessageWaveLine(bool autoRender) |
(自 YSS 0.13.0 引入) void | createErrorMessage(const QString &message, int columnNumber = -1, int length = -1, const QString &code = "", const QUrl &helpUrl = QUrl(), const QString &fixeAdvice = "") |
(自 YSS 0.13.0 引入) void | createInfoMessage(const QString &message, int columnNumber = -1, int length = -1, const QString &code = "", const QUrl &helpUrl = QUrl(), const QString &fixeAdvice = "") |
(自 YSS 0.13.0 引入) void | createWarningMessage(const QString &message, int columnNumber = -1, int length = -1, const QString &code = "", const QUrl &helpUrl = QUrl(), const QString &fixeAdvice = "") |
(自 YSS 0.15.0 引入) virtual void | onBlockAdded(qint32 startBlockNumber, qint32 count) |
(自 YSS 0.13.0 引入) virtual void | onBlockChanged(const QString &text, int blockNumber) = 0 |
(自 YSS 0.15.0 引入) virtual void | onBlockRemoved(qint32 startBlockNumber, qint32 count) |
(自 YSS 0.14.0 引入) void | rehighlight_s() |
详细说明
SyntaxHighlighter是在YSS语言服务架构理念下强化的QSyntaxHighlighter,提供了与编辑器文本块关联的错误、 警告和信息消息的创建和管理功能。它通过DocumentMessageManager将这些消息与文档和文本块关联起来,供编辑器界面显示和用户交互使用。
你在这类里面仍然可以使用继承自QSyntaxHighlighter的函数,但你不能使用 QSyntaxHighlighter::highlightBlock(),这函数已经为此类重写了,你需要重写onBlockChanged()来实现你的语法高亮和消息创建逻辑。
成员函数文档
[since YSS 0.13.0] SyntaxHighlighter::SyntaxHighlighter(YSSCore::Editor::TextEdit *parent = nullptr)
parent 关联的TextEdit对象,不能为空。
这个function 从 YSS 0.13.0 开始支持。
[virtual noexcept, since YSS 0.13.0] SyntaxHighlighter::~SyntaxHighlighter()
析构函数,清除与当前文件相关的所有消息。
这个function 从 YSS 0.13.0 开始支持。
[since YSS 0.13.0] void SyntaxHighlighter::autoRenderMessageWaveLine(bool autoRender)
设置是否自动为消息创建波浪线下划线。默认为true。 autoRender 是否自动渲染消息的波浪线下划线。 如果设置为true,当你创建错误、警告或信息消息时,SyntaxHighlighter会自动在相关文本下添加波浪线下划线来提示用户。你可以通过VISTM->getColor("ErrorLine")、VISTM->getColor("WarningLine")和VISTM->getColor("InfoLine")来获取不同类型消息的下划线颜色。 如果设置为false,你需要自己在onBlockChanged()中使用setFormat()来设置相关文本的格式来提示用户。
这个function 从 YSS 0.13.0 开始支持。
[since YSS 0.13.0] void SyntaxHighlighter::createErrorMessage(const QString &message, int columnNumber = -1, int length = -1, const QString &code = "", const QUrl &helpUrl = QUrl(), const QString &fixeAdvice = "")
创建一个错误消息,并关联到当前文本块。你可以在onBlockChanged()中调用这个函数来为当前文本块创建错误提示。 message 消息文本内容。 columnNumber 消息所在的列号(从0开始),默认为-1表示未知。 length 消息相关文本的长度,默认为-1表示未知。 code 消息的代码标识符,默认为空字符串。 helpUrl 与消息相关的帮助链接,默认为空URL。 fixeAdvice 修复建议文本,默认为空字符串。
这个function 从 YSS 0.13.0 开始支持。
[since YSS 0.13.0] void SyntaxHighlighter::createInfoMessage(const QString &message, int columnNumber = -1, int length = -1, const QString &code = "", const QUrl &helpUrl = QUrl(), const QString &fixeAdvice = "")
创建一个信息消息,并关联到当前文本块。你可以在onBlockChanged()中调用这个函数来为当前文本块创建信息提示。 message 消息文本内容。 columnNumber 消息所在的列号(从0开始),默认为-1表示未知。 length 消息相关文本的长度,默认为-1表示未知。 code 消息的代码标识符,默认为空字符串。 helpUrl 与消息相关的帮助链接,默认为空URL。 fixeAdvice 修复建议文本,默认为空字符串。
这个function 从 YSS 0.13.0 开始支持。
[since YSS 0.13.0] void SyntaxHighlighter::createWarningMessage(const QString &message, int columnNumber = -1, int length = -1, const QString &code = "", const QUrl &helpUrl = QUrl(), const QString &fixeAdvice = "")
创建一个警告消息,并关联到当前文本块。你可以在onBlockChanged()中调用这个函数来为当前文本块创建警告提示。 message 消息文本内容。 columnNumber 消息所在的列号(从0开始),默认为-1表示未知。 length 消息相关文本的长度,默认为-1表示未知。 code 消息的代码标识符,默认为空字符串。 helpUrl 与消息相关的帮助链接,默认为空URL。 fixeAdvice 修复建议文本,默认为空字符串。
这个function 从 YSS 0.13.0 开始支持。
[virtual, since YSS 0.15.0] void SyntaxHighlighter::onBlockAdded(qint32 startBlockNumber, qint32 count)
startBlockNumber 新增的文本块的起始块号, count 新增的文本块的数量。
当每次触发着色时,如果当前文本块的总数大于上次触发时的总数,就会调用这个函数。默认实现为空。 这个函数先于onBlockChanged()被调用。
这个function 从 YSS 0.15.0 开始支持。
[pure virtual, since YSS 0.13.0] void SyntaxHighlighter::onBlockChanged(const QString &text, int blockNumber)
text 当前文本块的内容, blockNumber 当前文本块的块号。
需要实现的纯虚函数,用户在其中实现具体的着色功能。语义上等价于QSyntaxHighlighter::highlightBlock
这个function 从 YSS 0.13.0 开始支持。
[virtual, since YSS 0.15.0] void SyntaxHighlighter::onBlockRemoved(qint32 startBlockNumber, qint32 count)
startBlockNumber 被删除的文本块的起始块号, count 被删除的文本块的数量。
当每次触发着色时,如果当前文本块的总数小于上次触发时的总数,就会调用这个函数。默认实现为空。 这个函数先于onBlockChanged()被调用。
这个function 从 YSS 0.15.0 开始支持。
[since YSS 0.14.0] void SyntaxHighlighter::rehighlight_s()
安全的重新高亮整个文档。
引入这个函数是为了修复QSyntaxHighlighter::rehighlight的至少两个缺陷:
- 1. rehighlight不能在着色触发时立即重新调用,必须在着色结束后 从外部触发,否则会递归爆栈。而这个安全版函数内置了一个定时器,使得你 可以在着色触发时根据需要直接调用全部重新着色函数,而它会自动延迟到 下一个事件循环再触发(而当前这轮着色必然会在本轮事件循环完成)。
- 2. 由于rehighlight内部的实现方式,其在QTextCursor上的操作会 触发QTextEdit::textChanged信号,而YSSCore::Editor::TextEdit通过监听 此信号来感知文件是否已改变,这会导致直接调用rehighlight会使TextEdit错误 的判断文件的改变情况。而此安全版函数会与其对应的TextEdit进行实现协商, 使其自动屏蔽从rehighlight触发的textChanged信号。
这个function 从 YSS 0.14.0 开始支持。