ASERStudio::AStorySyntax::AStoryXDocument Class
class ASERStudio::AStorySyntax::AStoryXDocumentAStoryXDocument是对整个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也不会自动解析文档内容。它只用于在必须情况下 触发你设置的QSyntaxHighlighter的QSyntaxHighlighter::rehighlight方法刷新全文档信息。 如果你需要完全动态更新解析结果,就需要在你的SyntaxHighlighter的highlightBlock方法 中调用AStoryXDocument的onSyntaxHighlighter方法来触发解析过程。
值得一提的是,大部分与QTextDocument相关的类的生命周期都被设计为受到QTextDocument控制, 例如QTextBlock、QSyntaxHighlighter等。但此类没有遵循这个设计原则,它的生命周期完全由用户控制, 以便用户在QTextDocument的生命周期之外也能使用它来存储和管理解析结果和诊断信息。
但如果你确定你的AStoryXDocument的生命周期完全可以由QTextDocument控制,那么你只需要在 你的SyntaxHighlighter析构时顺手析构此类即可。
此外,这个类没有专为复用设计,因此一般也建议在QTextDocument销毁时将其销毁,而且也不要尝试 重新设置QTextDocument和QSyntaxHighlighter来复用此类,因为这可能会导致一些意想不到的问题,例如诊断信息无法正确更新等。
成员函数文档
[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下访问相关信息,你应该直接使用驱动了该AStoryXDocument的QTextDocument来获取行内容。
这个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表示禁用。
在不启用诊断时,所有解析过程都不会产生任何诊断信息,有关诊断信息的函数 将永远返回空的结果,例如getDiagnostics、getAllDiagnostics、getGlobalDiagnostics等。
这个function 从 ASERStudio 2.0 开始支持。