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

ASERStudio::AStorySyntax::AStoryXControllerParseData Class

class ASERStudio::AStorySyntax::AStoryXControllerParseData

AStoryXControllerParseData记录由AStoryXController解析AStoryX时得到的数据. 详情...

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

公开成员函数

(自 ASERStudio 2.0 引入) AStoryXControllerParseData()
(自 ASERStudio 2.0 引入) AStoryXControllerParseData(const ASERStudio::AStorySyntax::AStoryXControllerParseData &other)
(自 ASERStudio 2.0 引入) AStoryXControllerParseData(ASERStudio::AStorySyntax::AStoryXControllerParseData &&other)
(自 ASERStudio 2.0 引入) ~AStoryXControllerParseData()
(自 ASERStudio 2.1 引入) QStringList blockParameters() const
(自 ASERStudio 2.0 引入) ASERStudio::AStorySyntax::AStoryXController::ControllerType getControllerType() const
(自 ASERStudio 2.0 引入) QString getCursorInWhichParameter(qint32 cursorPosition) const
(自 ASERStudio 2.0 引入) ASERStudio::AStorySyntax::AStoryXParameter getCursorParameter(qint32 cursorPosition) const
(自 ASERStudio 2.0 引入) QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> getDiagnostics() const
(自 ASERStudio 2.0 引入) ASERStudio::AStorySyntax::AStoryXParameter getRequiredParameter() const
(自 ASERStudio 2.0 引入) QString getStartSign() const
(自 ASERStudio 2.0 引入) bool isDiagnosticAvailable() const
(自 ASERStudio 2.0 引入) bool isValid() const
(自 ASERStudio 2.0 引入) QStringList referenceVariables() const
(自 ASERStudio 2.0 引入) QString toString() const
(自 ASERStudio 2.0 引入) ASERStudio::AStorySyntax::AStoryXControllerParseData &operator=(ASERStudio::AStorySyntax::AStoryXControllerParseData &&other)
(自 ASERStudio 2.0 引入) ASERStudio::AStorySyntax::AStoryXControllerParseData &operator=(const ASERStudio::AStorySyntax::AStoryXControllerParseData &other)

详细说明

这个类是由AStoryXController解析AStoryX时得到的数据的载体。它包含了控制器类型、必选参数、可选参数等信息。

这个类是只读的,一旦AStoryXController创建它,就不能再更改。

值得指出的是,由于解析时的设置,getDiagnostics可能不会包含诊断信息。 只有在isDiagnosticAvailable返回true,且getDiagnostics为空时,才保证没有语法错误。 其他注意事项请参见AStoryXController::parseAStoryX的说明。

无序的可选参数

由于AStoryX相对AStory,允许在其满足称作“独一性”前缀定义的时候(即所有可选参数的前缀都不相同), 可选参数可以以任意顺序出现。因此,AStoryXControllerParseData中的OptionalParameters和 OptionalParameterStringIndex的顺序可能与定义顺序不同,用户不该假定它们是按照定义顺序排列的。 用户应该根据OptionalParameterNames中的名称来获取对应参数的实际含义。

Note: AStoryX的”独一性“定义在ASE-Remake和ASERStudio中保持相同行为,但实际称谓略有不同。 在代码实现中,ASE-Ramake将其称作”高级参数“(Advanced),而ASERStudio将其称作 ”单调参数“(Monotonic)。但它们的行为是完全相同的,只是叫法不同而已。

单调性产生的解析行为

例如,如果有一个控制器定义:

  • 行首标识符:EG
  • 必选参数内部分隔符:空格
  • 必选参数:param1
  • 可选参数:opt1(前缀/),opt2(前缀/),opt3(前缀/)

那么对于以下AStoryX字符串

EGp1 p2/rp1//rp3

其中,必须参数param1的值为"p1 p2"(解析结果不自动切分,可根据返回值手动切分), 而由于可选参数前缀有所重复(这个例子甚至完全相同),因此不满足单调性要求,所以只能按照定义顺序解析, 于是可选参数opt1的值为"rp1",opt3的值为"rp3",而opt2位置的前缀之后没有值,因此opt2没有值。 如果我们删掉opt2位置的前缀斜杠,即:

EGp1 p2/rp1/rp3

当中间缺少一个斜杠后,则可选参数op1的值为"rp1",op2的值为"rp3",而因为第三个斜杠缺失, 因此opt3没有值。

但假如控制器定义满足单调性要求(即前缀各不相同),则对于控制器:

  • 行首标识符:EG2
  • 必选参数内部分隔符:&
  • 必选参数:param1
  • 可选参数:opt1(前缀-@opt1:),opt2(前缀-@opt2:),opt3(前缀-@opt3:)

则对于AStoryX字符串

EG2p1&p2-@opt2:rp2-@opt1:rp1-@opt3:rp3

其中,必选参数param1的值为"p1&p2",而由于满足单调性要求,所以可选参数的解析不受定义顺序限制, 因此opt1的值为"rp1",opt2的值为"rp2",opt3的值为"rp3",而其实际书写顺序则是opt2、opt1、opt3。

预处理器的特殊情况

由于AStoryX相对AStory增加了预处理器机制,因此这个类返回的结果严格意义上不总是 代表AStoryXController。如果parseAStoryX时发现是预处理器(即控制器类型是Preprocessor), 则如下看待返回结果:

  • ControllerType恒为Preprocessor
  • RequiredParameter为预处理器的类型(不带#)
  • OptionalParameters为预处理器的参数列表

譬如,对于AStroyX的预处理器

#useRule:BaseRule

那么返回的ControllerType为Preprocessor,RequiredParameter为"useRule",OptionalParameters为["BaseRule"]。

再例如,对于AStroyX的预处理器

#block 文本块1(参数1, 参数2)
...
#endblock

那么文本块开头的返回结果为ControllerType为Preprocessor,RequiredParameter为"block",OptionalParameters为["文本块1", "参数1", "参数2"]。 文本块结束则返回ControllerType为Preprocessor,RequiredParameter为"endblock",OptionalParameters为[]。

成员函数文档

[since ASERStudio 2.0] AStoryXControllerParseData::AStoryXControllerParseData()

构造函数。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] AStoryXControllerParseData::AStoryXControllerParseData(const ASERStudio::AStorySyntax::AStoryXControllerParseData &other)

other 另一个AStoryXControllerParseData对象。

复制构造函数。

这个function 从 ASERStudio 2.0 开始支持。

[noexcept, since ASERStudio 2.0] AStoryXControllerParseData::AStoryXControllerParseData(ASERStudio::AStorySyntax::AStoryXControllerParseData &&other)

other 另一个AStoryXControllerParseData对象。

移动构造函数。

这个function 从 ASERStudio 2.0 开始支持。

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

析构函数。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.1] QStringList AStoryXControllerParseData::blockParameters() const

return 文本块参数列表。

请注意和referenceVariable进行区分。 blockPara指的是block中用于替换的占位参数,而refVar只包括那些可以用于判定的变量。

这个function 从 ASERStudio 2.1 开始支持。

[since ASERStudio 2.0] ASERStudio::AStorySyntax::AStoryXController::ControllerType AStoryXControllerParseData::getControllerType() const

return 控制器类型。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QString AStoryXControllerParseData::getCursorInWhichParameter(qint32 cursorPosition) const

cursorPosition 光标位置。 return 给定光标位置所在的参数名称。

如果光标位置不在任何参数内,则返回空字符串。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] ASERStudio::AStorySyntax::AStoryXParameter AStoryXControllerParseData::getCursorParameter(qint32 cursorPosition) const

cursorPosition 光标位置。 return 给定光标位置所在的参数解析结果。

如果光标位置不在任何参数内,则返回一个无效的AStoryXParameter对象。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QList<ASERStudio::AStorySyntax::AStoryXDiagnosticData> AStoryXControllerParseData::getDiagnostics() const

return 诊断信息列表。

如果isDiagnosticAvailable返回false,则这个返回值不具有任何意义。 如果isDiagnosticAvailable返回true,且这个返回值为空列表,则保证没有语法错误。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] ASERStudio::AStorySyntax::AStoryXParameter AStoryXControllerParseData::getRequiredParameter() const

return 必选参数的解析结果

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QString AStoryXControllerParseData::getStartSign() const

return 行首标识符。

对于预处理器来说,这个行首标识符永远是#。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] bool AStoryXControllerParseData::isDiagnosticAvailable() const

return 解析是否启用了诊断。

为false时,getDiagnostics的返回值不具有任何意义; 为true时,getDiagnostics的返回值可能包含诊断信息,也可能不包含诊断信息(如果没有语法错误的话)。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] bool AStoryXControllerParseData::isValid() const

return 这个解析结果是否有效。

无效的解析结果代表它是创建即返回的,没有包含任何有效数据。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QStringList AStoryXControllerParseData::referenceVariables() const

return文本中引用的变量列表。

请注意和blockParameter进行区分。 refVar只包括那些可以用于判定的变量,而blockPara指的是block中用于替换的占位参数。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] QString AStoryXControllerParseData::toString() const

return 这个解析结果的字符串表示。

这个字符串表示不具有任何特定格式,仅供调试使用。

这个function 从 ASERStudio 2.0 开始支持。

[noexcept, since ASERStudio 2.0] ASERStudio::AStorySyntax::AStoryXControllerParseData &AStoryXControllerParseData::operator=(ASERStudio::AStorySyntax::AStoryXControllerParseData &&other)

other 另一个AStoryXControllerParseData对象。

移动赋值运算符。

这个function 从 ASERStudio 2.0 开始支持。

[since ASERStudio 2.0] ASERStudio::AStorySyntax::AStoryXControllerParseData &AStoryXControllerParseData::operator=(const ASERStudio::AStorySyntax::AStoryXControllerParseData &other)

other 另一个AStoryXControllerParseData对象。

复制赋值运算符。

这个function 从 ASERStudio 2.0 开始支持。