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

ASERStudio::AStorySyntax::AStoryXDocument Class

class ASERStudio::AStorySyntax::AStoryXDocument

AStoryXDocument是对整个AStoryX文档的封装,包含了对文档内容的解析和诊断信息的存储. 详情...

头文件: #include <AStoryXDocument>
自以下版本: ASERStudio 2.0

公开成员函数

(自 ASERStudio 2.0 引入) AStoryXDocument()
(自 ASERStudio 2.0 引入) ~AStoryXDocument()
(自 ASERStudio 2.0 引入) QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> getAllDiagnostics() const
(自 ASERStudio 2.0 引入) QList<ASERStudio::AStorySyntax::AStoryXControllerParseData> getAllParseData() const
(自 ASERStudio 2.0 引入) ASERStudio::AStorySyntax::AStoryXRule *getCurrentRule() const
(自 ASERStudio 2.0 引入) QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> getDiagnostics(qint32 lineNumber) const
(自 ASERStudio 2.0 引入) QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> getGlobalDiagnostics() const
(自 ASERStudio 2.2 引入) QStringList getLines() const
(自 ASERStudio 2.0 引入) ASERStudio::AStorySyntax::AStoryXControllerParseData getParseData(qint32 lineNumber) const
(自 ASERStudio 2.0 引入) bool isDiagnosticEnabled() const
(自 ASERStudio 2.2 引入) void onLinesAdded(qint32 startLine, qint32 count)
(自 ASERStudio 2.2 引入) void onLinesRemoved(qint32 startLine, qint32 count)
(自 ASERStudio 2.2 引入) void onManualParse(qint32 lineIndex, const QString &text, qint32 cursorPosition = -1)
(自 ASERStudio 2.0 引入) void onSyntaxHighlighter(QTextBlock currentBlock, const QString &text)
(自 ASERStudio 2.0 引入) void setEnableDiagnostic(bool enable)

详细说明

AStoryXDocument是对整个AStoryX文档的封装,包含了对文档内容的解析和诊断信息的存储。

你可以在你的SyntaxHighlighter中调用AStoryXDocument的onSyntaxHighlighter方法来解析每一行的内容,并获取相应的诊断信息

请注意,这个类获取信息依赖于通过setTextDocument方法设置的QTextDocument, 以及通过setSyntaxHighlighter方法设置的QSyntaxHighlighter。确保在使用这些功能之前正确设置这些组件。 这个类通过QTextDocument获取静态信息,通过QSyntaxHighlighter感知文档的动态变化, 从而实时刷新解析结果。

请注意,即使设置了QSyntaxHighlighter,AStoryXDocument也不会自动解析文档内容。它只用于在必须情况下 触发你设置的QSyntaxHighlighterQSyntaxHighlighter::rehighlight方法刷新全文档信息。 如果你需要完全动态更新解析结果,就需要在你的SyntaxHighlighter的highlightBlock方法 中调用AStoryXDocument的onSyntaxHighlighter方法来触发解析过程。

值得一提的是,大部分与QTextDocument相关的类的生命周期都被设计为受到QTextDocument控制, 例如QTextBlockQSyntaxHighlighter等。但此类没有遵循这个设计原则,它的生命周期完全由用户控制, 以便用户在QTextDocument的生命周期之外也能使用它来存储和管理解析结果和诊断信息。

但如果你确定你的AStoryXDocument的生命周期完全可以由QTextDocument控制,那么你只需要在 你的SyntaxHighlighter析构时顺手析构此类即可。

此外,这个类没有专为复用设计,因此一般也建议在QTextDocument销毁时将其销毁,而且也不要尝试 重新设置QTextDocumentQSyntaxHighlighter来复用此类,因为这可能会导致一些意想不到的问题,例如诊断信息无法正确更新等。

成员函数文档

[since ASERStudio 2.0] AStoryXDocument::AStoryXDocument()

构造函数。

这个function 从 ASERStudio 2.0 开始支持。

[noexcept, since ASERStudio 2.0] AStoryXDocument::~AStoryXDocument()

析构函数。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> AStoryXDocument::getAllDiagnostics() const

获取文档的所有诊断信息,返回一个AStoryXDiagnosticData的列表,包括全局诊断和每行的诊断。

它不保证非空。如果没有任何诊断信息,则返回一个空的列表。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QList<ASERStudio::AStorySyntax::AStoryXControllerParseData> AStoryXDocument::getAllParseData() const

获取文档的所有解析数据,返回一个AStoryXControllerParseData的列表,每个元素对应一行的解析数据。 如果某行没有解析数据,则对应的元素将是一个无效的AStoryXControllerParseData对象。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] ASERStudio::AStorySyntax::AStoryXRule *AStoryXDocument::getCurrentRule() const

获取当前选定的规则,返回一个指向AStoryXRule对象的指针。

请注意,请把这个指针视为弱指针,即用即弃。不要在外部 持久化存储它,因为它随时可能因为选定的规则变更而失效。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> AStoryXDocument::getDiagnostics(qint32 lineNumber) const

获取指定行的诊断信息,返回一个AStoryXDiagnosticData的列表。 如果lineNumber 为-1,则返回全局诊断信息;否则返回指定行的诊断信息。

要获取全局诊断信息,也可以用getGlobalDiagnostics方法。

全局诊断指的是某些不特定于具体某一行的信息,例如当前没有选定任何规则等。 这些信息通常会影响整个文档的解析和行为,因此被归类为全局诊断。

它不保证非空。如果没有任何诊断信息,则返回一个空的列表。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> AStoryXDocument::getGlobalDiagnostics() const

获取全局诊断信息,返回一个AStoryXDiagnosticData的列表。 全局诊断指的是某些不特定于具体某一行的信息,例如当前没有选定任何规则等。 这些信息通常会影响整个文档的解析和行为,因此被归类为全局诊断。

它不保证非空。如果没有任何全局诊断信息,则返回一个空的列表。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.2] QStringList AStoryXDocument::getLines() const

获取文档的所有行,返回一个QStringList,每个元素对应一行的文本内容。

这个函数只在手动模式下有效。如果是SyntaxHighlighter模式,则返回一个空的QStringList, 因为在这种模式下,行内容是通过QTextDocument动态获取的,而不是预先存储在AStoryXDocument中的。

要在SyntaxHighlighter下访问相关信息,你应该直接使用驱动了该AStoryXDocumentQTextDocument来获取行内容。

这个function 从 ASERStudio 2.2 开始支持。

[since ASERStudio 2.0] ASERStudio::AStorySyntax::AStoryXControllerParseData AStoryXDocument::getParseData(qint32 lineNumber) const

获取指定行的解析数据,返回一个AStoryXControllerParseData对象。 如果lineNumber 对应的行没有解析数据,则返回一个无效的AStoryXControllerParseData对象。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] bool AStoryXDocument::isDiagnosticEnabled() const

return 是否启用诊断功能,返回一个布尔值,true表示启用,false表示禁用。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.2] void AStoryXDocument::onLinesAdded(qint32 startLine, qint32 count)

当行被添加时调用此方法,startLine 为添加的起始行号,count 为添加的行数。

这个方法在两种模式下都需要调用,用于为新添加的行初始化内容和用户状态,以及更新诊断信息等。

这个function 从 ASERStudio 2.2 开始支持。

[since ASERStudio 2.2] void AStoryXDocument::onLinesRemoved(qint32 startLine, qint32 count)

当行被删除时调用此方法,startLine 为删除的起始行号,count 为删除的行数。

这个方法在两种模式下都需要调用,用于清除多余的行内容和用户状态,以及更新诊断信息等。

这个function 从 ASERStudio 2.2 开始支持。

[since ASERStudio 2.2] void AStoryXDocument::onManualParse(qint32 lineIndex, const QString &text, qint32 cursorPosition = -1)

在Manual模式下调用此方法来解析每一行的内容,并获取相应的诊断信息。 lineIndex 为行号,从0开始;text 为该行的文本内容;cursorPosition 为光标在该行中的位置,如果不需要可以传递-1。

调用这个函数时,会自动将模式切换到Manual模式。

这个function 从 ASERStudio 2.2 开始支持。

[since ASERStudio 2.0] void AStoryXDocument::onSyntaxHighlighter(QTextBlock currentBlock, const QString &text)

在SyntaxHighlighter中调用此方法来解析每一行的内容,并获取相应的诊断信息。 对于currentBlock ,可以用QSyntaxHighlighter::currentBlock()获取。 text 则为QSyntaxHighlighter::highlightBlock方法的参数,直接传递即可。

调用这个函数时,会自动将模式切换到SyntaxHighlighter模式,并清除之前在Manual模式下存储的行内容和用户状态。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] void AStoryXDocument::setEnableDiagnostic(bool enable)

设置是否启用诊断功能,enable 为true表示启用,false表示禁用。

在不启用诊断时,所有解析过程都不会产生任何诊断信息,有关诊断信息的函数 将永远返回空的结果,例如getDiagnosticsgetAllDiagnosticsgetGlobalDiagnostics等。

这个function 从 ASERStudio 2.0 开始支持。