Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

YSSCore::Editor::SyntaxHighlighter Class

class YSSCore::Editor::SyntaxHighlighter

SyntaxHighlighter是一个基于QSyntaxHighlighter的抽象类,用于实现文本编辑器中的语法高亮和错误提示功能. 详情...

头文件: #include <SyntaxHighlighter>
自以下版本: YSS 0.13.0

公开成员函数

(自 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 开始支持。