QtNovelUI/DesParser/StoryUnitDocumentParser.h

168 lines
4.1 KiB
C
Raw Normal View History

2022-11-06 00:37:50 +00:00
#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;
// 通过 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<DesNode*> children() const override;
virtual bool check(QList<QString>& reasons) const override;
virtual QString toString() const override;
private:
DocCore *doc_ref;
QString name_store;
QList<DesNode*> 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<DesNode*> children() const override;
virtual bool check(QList<QString>& reasons) const override;
virtual QString toString() const override;
virtual QString name() const override;
private:
NodeStoryUnit *const unit_ins;
QString name_store;
QList<DesNode*> children_nodes;
};
/**
* .
*/
class NodeStoryFragmentParser : public Syntax::XSyntaxBase
{
public:
NodeStoryFragmentParser(NodeStoryUnitParser *pparser);
NodeStoryUnitParser * nodeStoryUnitParser() const;
DocCore * docRef() const;
private:
NodeStoryUnitParser *const parent_parser;
};
/**
* .
*/
class NodeStoryPointReference : public DesNode
{
public:
explicit NodeStoryPointReference(DesNode *parent, const QString &chain, const QString &point);
virtual ~NodeStoryPointReference() = 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<DesNode*> children() const override;
virtual bool check(QList<QString>& reasons) const override;
virtual QString toString() const override;
private:
DesNode *const parent_ins;
QString chain_name;
QString point_name;
};
class NodeStoryUnitDesGroupParser : public Syntax::XSyntaxBase
{
public:
NodeStoryUnitDesGroupParser(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<DesNode*> children() const override;
virtual bool check(QList<QString>& 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<DesNode*> children_nodes;
};
class StoryUnitDocumentParser : public ParseFrame
{
public:
StoryUnitDocumentParser(ProjectCore *ins);
};
}