#pragma once #include "XSyntaxBase.h" #include "ParseFrame.h" namespace Parse { /** * 故事单元. */ class NodeStoryUnit : public Result::NamedNode { public: explicit NodeStoryUnit(Result::DocCore *doc, const QString &name); virtual ~NodeStoryUnit() = default; // 通过 NamedNode virtual QString name() const override; // 通过 DesNode 继承 inline virtual int depth() const override { return 0; } virtual Result::DocCore * document() const override; virtual int typeValue() const override; virtual DesNode * parent() const override; virtual void appendChild(DesNode * ins) override; virtual QList children() const override; virtual bool check(QList& reasons) const override; virtual QString toString() const override; private: Result::DocCore *doc_ref; QString name_store; QList children_nodes; }; /** 故事单元解析器 */ class NodeStoryUnitParser : public Syntax::XSyntaxBase { public: NodeStoryUnitParser(Result::ProjectCore *core); Result::ProjectCore* project() const; private: Result::ProjectCore *const pjt_core; }; /** * 故事情节节点. */ class NodeStoryFragment : public Result::NamedNode { public: explicit NodeStoryFragment(NodeStoryUnit* unit, const QString &name); virtual ~NodeStoryFragment() = default; // 通过 NamedNode 继承 inline virtual int depth() const override { return unit_ins->depth() + 1; } virtual Result::DocCore * document() const override; virtual int typeValue() const override; virtual DesNode * parent() const override; virtual void appendChild(DesNode * ins) override; virtual QList children() const override; virtual bool check(QList& reasons) const override; virtual QString toString() const override; virtual QString name() const override; private: NodeStoryUnit *const unit_ins; QString name_store; QList children_nodes; }; /** * 故事情节解析器. */ class NodeStoryFragmentParser : public Syntax::XSyntaxBase { public: NodeStoryFragmentParser(NodeStoryUnitParser *pparser); NodeStoryUnitParser * nodeStoryUnitParser() const; Result::DocCore * docRef() const; private: NodeStoryUnitParser *const parent_parser; }; /** * 故事脉络节点引用. */ class NodeStoryPointRefer : public Result::DesNode { public: explicit NodeStoryPointRefer(DesNode *parent, const QString &chain, const QString &point); virtual ~NodeStoryPointRefer() = default; // 通过 DesNode 继承 inline virtual int depth() const override { return parent_ins->depth() + 1; } virtual Result::DocCore * document() const override; virtual int typeValue() const override; virtual DesNode * parent() const override; virtual void appendChild(DesNode * ins) override; virtual QList children() const override; virtual bool check(QList& reasons) const override; virtual QString toString() const override; private: DesNode *const parent_ins; QString chain_name; QString point_name; }; class NodeStoryDesGroupParser : public Syntax::XSyntaxBase { public: NodeStoryDesGroupParser(Syntax::XSyntaxBase * parent); private: Syntax::XSyntaxBase *const parent_parser; }; class NodeStoryTextSpanParser : public Syntax::XSyntaxBase { public: NodeStoryTextSpanParser(Syntax::XSyntaxBase *parent); private: Syntax::XSyntaxBase *const parent_parser; }; class NodeStoryPointReferParser : public Syntax::XSyntaxBase { public: NodeStoryPointReferParser(Syntax::XSyntaxBase *parent); private: Syntax::XSyntaxBase *const parent_parser; }; /** * 故事情节有序注释,单独解析 * #注解 注解名 序列名 值 { * 注解段落 * 注解段落 * } */ class NodeStoryFragmentComment : public Result::NamedNode { public: NodeStoryFragmentComment(DesNode *parent, const QString &order, const QString &name); virtual ~NodeStoryFragmentComment() = default; QString order() const; // 通过 NamedNode 继承 inline virtual int depth() const override { return parent_ins->depth() + 1; } virtual Result::DocCore * document() const override; virtual int typeValue() const override; virtual DesNode * parent() const override; virtual void appendChild(DesNode * ins) override; virtual QList children() const override; virtual bool check(QList& 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 children_nodes; }; class NodeStoryFragmentCommentParser : public Syntax::XSyntaxBase { public: NodeStoryFragmentCommentParser(Syntax::SyntaxParser* pparser); private: Syntax::SyntaxParser *const pparser; }; class StoryUnitDocumentParser : public Syntax::ParseFrame { public: StoryUnitDocumentParser(Result::ProjectCore *ins); }; }