ASERStudio::AStorySyntax::AStoryXControllerParseData Class
class ASERStudio::AStorySyntax::AStoryXControllerParseDataAStoryXControllerParseData记录由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 开始支持。