片段注解解析
This commit is contained in:
parent
53afe58730
commit
65fa0a8ede
|
@ -183,7 +183,7 @@ bool NodeStoryFragmentComment::check(QList<QString>& reasons) const
|
||||||
|
|
||||||
QString NodeStoryFragmentComment::toString() const
|
QString NodeStoryFragmentComment::toString() const
|
||||||
{
|
{
|
||||||
auto xrets = QString(depth(), ' ') + "#注解 " + name() + "{";
|
auto xrets = QString(depth(), ' ') + "#注解 " + name() +" "+ order() +" "+ orderValue() + "{";
|
||||||
for (auto it : children_nodes)
|
for (auto it : children_nodes)
|
||||||
xrets += "\n" + QString(depth(), ' ') + it->toString();
|
xrets += "\n" + QString(depth(), ' ') + it->toString();
|
||||||
xrets += "\n" + QString(depth(), ' ') + "}";
|
xrets += "\n" + QString(depth(), ' ') + "}";
|
||||||
|
@ -193,7 +193,17 @@ QString NodeStoryFragmentComment::toString() const
|
||||||
|
|
||||||
QString NodeStoryFragmentComment::name() const
|
QString NodeStoryFragmentComment::name() const
|
||||||
{
|
{
|
||||||
return name_store;
|
return name_store;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString NodeStoryFragmentComment::orderValue() const
|
||||||
|
{
|
||||||
|
return order_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NodeStoryFragmentComment::resetValue(const QString &value)
|
||||||
|
{
|
||||||
|
this->order_value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeStoryUnitParser::NodeStoryUnitParser(ProjectCore * core)
|
NodeStoryUnitParser::NodeStoryUnitParser(ProjectCore * core)
|
||||||
|
@ -308,7 +318,7 @@ NodeStoryFragmentParser::NodeStoryFragmentParser(NodeStoryUnitParser * pparser)
|
||||||
rule->addExpression("基础跳出情节解析", { Elm("{右界限}", true) });
|
rule->addExpression("基础跳出情节解析", { Elm("{右界限}", true) });
|
||||||
rule->addExpression("拓展跳出情节解析", { Exp("::换行前缀"),Exp("基础跳出情节解析", true) });
|
rule->addExpression("拓展跳出情节解析", { Exp("::换行前缀"),Exp("基础跳出情节解析", true) });
|
||||||
|
|
||||||
addChild(QList<SyntaxParser*>() << new NodeStoryDesGroupParser(this));
|
addChild(QList<SyntaxParser*>() << new NodeStoryDesGroupParser(this) << new NodeStoryFragmentCommentParser(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeStoryUnitParser * NodeStoryFragmentParser::nodeStoryUnitParser() const
|
NodeStoryUnitParser * NodeStoryFragmentParser::nodeStoryUnitParser() const
|
||||||
|
@ -398,3 +408,74 @@ NodeStoryPointReferParser::NodeStoryPointReferParser(XSyntaxBase *parent)
|
||||||
rule->addExpression("基础引用定义", { Elm("{节点引用}"),Elm("{描述文本}1"), Elm("{描述文本}2"), Elm("{右界限}", true) });
|
rule->addExpression("基础引用定义", { Elm("{节点引用}"),Elm("{描述文本}1"), Elm("{描述文本}2"), Elm("{右界限}", true) });
|
||||||
rule->addExpression("拓展引用定义", {Exp("::换行前缀"), Exp("基础引用定义",true)});
|
rule->addExpression("拓展引用定义", {Exp("::换行前缀"), Exp("基础引用定义",true)});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 故事情节有序注释,单独解析
|
||||||
|
* #注解 注解名 序列名 值 {
|
||||||
|
* 注解段落
|
||||||
|
* 注解段落
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
NodeStoryFragmentCommentParser::NodeStoryFragmentCommentParser(Syntax::SyntaxParser *pparser)
|
||||||
|
: Syntax::XSyntaxBase("有序注解", MatchType::Entirely), pparser(pparser)
|
||||||
|
{
|
||||||
|
set_common_expression("::换行前缀", {Elm("{换行符}"),Elm("{换行符}", true)});
|
||||||
|
auto rule = this->addRule("进入注解", 0, [this](const QList<LexResult> &seqs, int cnt)->ParseResult{
|
||||||
|
auto nmidx = cnt - 3;
|
||||||
|
auto oridx = cnt - 2;
|
||||||
|
auto vidx = cnt - 1;
|
||||||
|
|
||||||
|
auto pnode = this->pparser->currNode();
|
||||||
|
auto comment = new NodeStoryFragmentComment(pnode, seqs[oridx].Text, seqs[nmidx].Text);
|
||||||
|
comment->resetValue(seqs[vidx].Text);
|
||||||
|
pnode->appendChild(comment);
|
||||||
|
refocusNode(comment);
|
||||||
|
|
||||||
|
auto word0 = new Words(comment, docRef(), seqs[cnt-4].Text, seqs[cnt-4].StartRow, seqs[cnt-4].StartCol);
|
||||||
|
auto word1 = new Words(comment, docRef(), seqs[nmidx].Text, seqs[nmidx].StartRow, seqs[nmidx].StartCol);
|
||||||
|
auto word2 = new Words(comment, docRef(), seqs[oridx].Text, seqs[oridx].StartRow, seqs[oridx].StartCol);
|
||||||
|
auto word3 = new Words(comment, docRef(), seqs[vidx].Text, seqs[vidx].StartRow, seqs[vidx].StartCol);
|
||||||
|
|
||||||
|
docRef()->append(word0);
|
||||||
|
docRef()->append(word1);
|
||||||
|
docRef()->append(word2);
|
||||||
|
docRef()->append(word3);
|
||||||
|
|
||||||
|
return ParseResult::SelfManipulate;
|
||||||
|
});
|
||||||
|
rule->addExpression("基础注解定义", {Elm("{注解定义}"), Elm{"{描述文本}1"}, Elm{"{描述文本}2"}, Elm{"{描述文本}3", true}});
|
||||||
|
rule->addExpression("拓展注解定义", {Exp("::换行前缀"), Exp("基础注解定义", true)});
|
||||||
|
|
||||||
|
|
||||||
|
rule = addRule("进入成分解析", 1, [this](const QList<LexResult> &seqs, int cnt)->ParseResult {
|
||||||
|
auto node = currNode();
|
||||||
|
|
||||||
|
auto word = new Words(node, docRef(), seqs[cnt - 1].Text, seqs[cnt - 1].StartRow, seqs[cnt - 1].StartCol);
|
||||||
|
docRef()->append(word);
|
||||||
|
|
||||||
|
return ParseResult::EnterNext;
|
||||||
|
});
|
||||||
|
rule->addExpression("成分解析", { Elm("{左界限}", true) });
|
||||||
|
rule->addExpression("拓展成分解析", { Exp("::换行前缀"), Exp("成分解析", true) });
|
||||||
|
|
||||||
|
rule = addRule("跳出成分解析", 2, [this](const QList<LexResult> &seqs, int cnt)->ParseResult {
|
||||||
|
auto node = currNode();
|
||||||
|
|
||||||
|
auto word = new Words(node, docRef(), seqs[cnt - 1].Text, seqs[cnt - 1].StartRow, seqs[cnt - 1].StartCol);
|
||||||
|
docRef()->append(word);
|
||||||
|
|
||||||
|
return ParseResult::Completed;
|
||||||
|
});
|
||||||
|
rule->addExpression("基础跳出成分解析", { Elm("{右界限}", true) });
|
||||||
|
rule->addExpression("拓展跳出成分解析", { Exp("::换行前缀"),Exp("基础跳出成分解析", true) });
|
||||||
|
|
||||||
|
addChild(QList<SyntaxParser*>() << new NodeStoryDesGroupParser(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -135,8 +135,6 @@ namespace Parse {
|
||||||
Syntax::XSyntaxBase *const parent_parser;
|
Syntax::XSyntaxBase *const parent_parser;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class NodeStoryPointReferParser : public Syntax::XSyntaxBase
|
class NodeStoryPointReferParser : public Syntax::XSyntaxBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -174,14 +172,27 @@ namespace Parse {
|
||||||
virtual bool check(QList<QString>& reasons) const override;
|
virtual bool check(QList<QString>& reasons) const override;
|
||||||
virtual QString toString() const override;
|
virtual QString toString() const override;
|
||||||
virtual QString name() const override;
|
virtual QString name() const override;
|
||||||
|
|
||||||
|
QString orderValue() const;
|
||||||
|
void resetValue(const QString &value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DesNode *const parent_ins;
|
DesNode *const parent_ins;
|
||||||
QString name_store;
|
QString name_store;
|
||||||
QString order_name;
|
QString order_name;
|
||||||
|
QString order_value;
|
||||||
|
|
||||||
QList<DesNode*> children_nodes;
|
QList<DesNode*> children_nodes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NodeStoryFragmentCommentParser : public Syntax::XSyntaxBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NodeStoryFragmentCommentParser(Syntax::SyntaxParser* pparser);
|
||||||
|
private:
|
||||||
|
Syntax::SyntaxParser *const pparser;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class StoryUnitDocumentParser : public Syntax::ParseFrame
|
class StoryUnitDocumentParser : public Syntax::ParseFrame
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue