片段注解解析
This commit is contained in:
parent
53afe58730
commit
65fa0a8ede
|
@ -183,7 +183,7 @@ bool NodeStoryFragmentComment::check(QList<QString>& reasons) const
|
|||
|
||||
QString NodeStoryFragmentComment::toString() const
|
||||
{
|
||||
auto xrets = QString(depth(), ' ') + "#注解 " + name() + "{";
|
||||
auto xrets = QString(depth(), ' ') + "#注解 " + name() +" "+ order() +" "+ orderValue() + "{";
|
||||
for (auto it : children_nodes)
|
||||
xrets += "\n" + QString(depth(), ' ') + it->toString();
|
||||
xrets += "\n" + QString(depth(), ' ') + "}";
|
||||
|
@ -196,6 +196,16 @@ QString NodeStoryFragmentComment::name() const
|
|||
return name_store;
|
||||
}
|
||||
|
||||
QString NodeStoryFragmentComment::orderValue() const
|
||||
{
|
||||
return order_value;
|
||||
}
|
||||
|
||||
void NodeStoryFragmentComment::resetValue(const QString &value)
|
||||
{
|
||||
this->order_value = value;
|
||||
}
|
||||
|
||||
NodeStoryUnitParser::NodeStoryUnitParser(ProjectCore * core)
|
||||
: XSyntaxBase("故事单元"), pjt_core(core)
|
||||
{
|
||||
|
@ -308,7 +318,7 @@ NodeStoryFragmentParser::NodeStoryFragmentParser(NodeStoryUnitParser * pparser)
|
|||
rule->addExpression("基础跳出情节解析", { Elm("{右界限}", 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
|
||||
|
@ -398,3 +408,74 @@ NodeStoryPointReferParser::NodeStoryPointReferParser(XSyntaxBase *parent)
|
|||
rule->addExpression("基础引用定义", { Elm("{节点引用}"),Elm("{描述文本}1"), Elm("{描述文本}2"), Elm("{右界限}", 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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class NodeStoryPointReferParser : public Syntax::XSyntaxBase
|
||||
{
|
||||
public:
|
||||
|
@ -174,14 +172,27 @@ namespace Parse {
|
|||
virtual bool check(QList<QString>& reasons) const override;
|
||||
virtual QString toString() const override;
|
||||
virtual QString name() const override;
|
||||
|
||||
QString orderValue() const;
|
||||
void resetValue(const QString &value);
|
||||
|
||||
private:
|
||||
DesNode *const parent_ins;
|
||||
QString name_store;
|
||||
QString order_name;
|
||||
QString order_value;
|
||||
|
||||
QList<DesNode*> children_nodes;
|
||||
};
|
||||
|
||||
class NodeStoryFragmentCommentParser : public Syntax::XSyntaxBase
|
||||
{
|
||||
public:
|
||||
NodeStoryFragmentCommentParser(Syntax::SyntaxParser* pparser);
|
||||
private:
|
||||
Syntax::SyntaxParser *const pparser;
|
||||
};
|
||||
|
||||
|
||||
class StoryUnitDocumentParser : public Syntax::ParseFrame
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue