diff --git a/libSyntax/ast_novel.h b/libSyntax/ast_novel.h index e758a3c..9c512d7 100644 --- a/libSyntax/ast_novel.h +++ b/libSyntax/ast_novel.h @@ -2,8 +2,7 @@ #include "ast_gen.h" -namespace example_novel -{ +namespace example_novel { enum class NovelNode { GlobalElement = 0, TextSection = 1, @@ -50,10 +49,10 @@ namespace example_novel FragmentRefers(std::shared_ptr rule_bind); QString storyRefer() const; - void setStoryRefer(const QString &refer); + void setStoryRefer(const QString& refer); QString fragmentRefer() const; - void setFragmentRefer(const QString &refer); + void setFragmentRefer(const QString& refer); QString referSignature() const; @@ -72,7 +71,7 @@ namespace example_novel FragmentDefine(std::shared_ptr rule_bind); QString name() const; - void setName(const QString &nm); + void setName(const QString& nm); // SyntaxElement interface public: @@ -89,7 +88,7 @@ namespace example_novel ArticleDefine(std::shared_ptr rule_bind); QString name() const; - void setName(const QString &nm); + void setName(const QString& nm); // SyntaxElement interface public: @@ -106,7 +105,7 @@ namespace example_novel VolumeDefine(std::shared_ptr rule_bind); QString name() const; - void setName(const QString &nm); + void setName(const QString& nm); // SyntaxElement interface public: @@ -123,7 +122,7 @@ namespace example_novel StoryDefine(std::shared_ptr rule_bind); QString name() const; - void setName(const QString &nm); + void setName(const QString& nm); void setSort(int value); int sort() const; @@ -170,7 +169,7 @@ namespace lib_syntax { template<> class ElementRule : public ExprRule { public: ElementRule(const QString& rule_name, int expr_mark) - :ExprRule(rule_name, expr_mark) {} + :ExprRule(rule_name, expr_mark) { } // ͨ¹ý ExprRule ¼Ì³Ð virtual std::shared_ptr newEmptyInstance() const { @@ -184,6 +183,7 @@ namespace lib_syntax { virtual std::tuple> parse(std::shared_ptr rt_inst, std::shared_ptr head) const override { + std::shared_ptr elm_ast = this->newEmptyInstance(); auto text_present = this->token_present(); @@ -199,35 +199,36 @@ namespace lib_syntax { rt_inst->popExprInst(); rt_inst->popExprRule(); break; - case IBasicRule::MatchResult::Success: { - if (!std::dynamic_pointer_cast(elm_ast)) { - auto start_pos = tokens_decl.first()->position(); - rt_inst->clearErrors(rt_inst->currentFile(), start_pos); - } + case IBasicRule::MatchResult::Success: + { + if (!std::dynamic_pointer_cast(elm_ast)) { + auto start_pos = tokens_decl.first()->position(); + rt_inst->clearErrors(rt_inst->currentFile(), start_pos); + } - rt_inst->popExprInst(); - rt_inst->popExprRule(); - while (tokens_decl.size()) { - auto text_paragraph = this->newEmptyInstance(); - int row_n = tokens_decl.first()->row(); + rt_inst->popExprInst(); + rt_inst->popExprRule(); + while (tokens_decl.size()) { + auto text_paragraph = this->newEmptyInstance(); + int row_n = tokens_decl.first()->row(); - for (int idx = 0; idx < tokens_decl.size(); ++idx) { - auto target_token = tokens_decl.at(idx); - if (target_token->row() == row_n) { - text_paragraph->addToken(target_token); - tokens_decl.removeAt(idx--); + for (int idx = 0; idx < tokens_decl.size(); ++idx) { + auto target_token = tokens_decl.at(idx); + if (target_token->row() == row_n) { + text_paragraph->addToken(target_token); + tokens_decl.removeAt(idx--); + } + } + + if (rt_inst->currentExprInst()) { + rt_inst->currentExprInst()->addChild(text_paragraph); + } + else { + rt_inst->appendDocInst(text_paragraph); } } - if (rt_inst->currentExprInst()) { - rt_inst->currentExprInst()->addChild(text_paragraph); - } - else { - rt_inst->appendDocInst(text_paragraph); - } - } - - }break; + }break; default: break; }