#pragma once #include "XSyntaxBase.h" #include "ParseFrame.h" namespace Parse { /** * 故事单元. */ class NodeStoryUnit : public NamedNode { public: explicit NodeStoryUnit(DocCore *doc, const QString &name); virtual ~NodeStoryUnit() = default; // 通过 NamedNode virtual QString name() const override; // 通过 DesNode 继承 inline virtual int depth() const override { return 0; } virtual 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: DocCore *doc_ref; QString name_store; QList children_nodes; }; /** 故事单元解析器 */ class NodeStoryUnitParser : public Syntax::XSyntaxBase { public: NodeStoryUnitParser(ProjectCore *core); ProjectCore* project() const; private: ProjectCore *const pjt_core; }; /** * 故事情节节点. */ class NodeStoryFragment : public 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 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; DocCore * docRef() const; private: NodeStoryUnitParser *const parent_parser; }; /** * 故事脉络节点引用. */ class NodeStoryPointRefer : public 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 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 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 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: DesNode *const parent_ins; QString name_store; QString order_name; QList children_nodes; }; class StoryUnitDocumentParser : public ParseFrame { public: StoryUnitDocumentParser(ProjectCore *ins); }; }