QtNovelUI/DesParser/StoryUnitDocumentParser.h

203 lines
5.2 KiB
C
Raw Normal View History

2022-11-06 00:37:50 +00:00
#pragma once
#include "XSyntaxBase.h"
#include "ParseFrame.h"
namespace Parse {
/**
* .
*/
2022-11-06 11:40:11 +00:00
class NodeStoryUnit : public Result::NamedNode
2022-11-06 00:37:50 +00:00
{
public:
2022-11-06 11:40:11 +00:00
explicit NodeStoryUnit(Result::DocCore *doc, const QString &name);
2022-11-06 00:37:50 +00:00
virtual ~NodeStoryUnit() = default;
// 通过 NamedNode
2022-11-06 10:15:55 +00:00
virtual QString name() const override;
2022-11-06 00:37:50 +00:00
// 通过 DesNode 继承
inline virtual int depth() const override {
return 0;
}
2022-11-06 11:40:11 +00:00
virtual Result::DocCore * document() const override;
2022-11-06 00:37:50 +00:00
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:
2022-11-06 11:40:11 +00:00
Result::DocCore *doc_ref;
2022-11-06 00:37:50 +00:00
QString name_store;
QList<DesNode*> children_nodes;
};
/** 故事单元解析器 */
class NodeStoryUnitParser : public Syntax::XSyntaxBase
{
public:
2022-11-06 11:40:11 +00:00
NodeStoryUnitParser(Result::ProjectCore *core);
2022-11-06 00:37:50 +00:00
2022-11-06 11:40:11 +00:00
Result::ProjectCore* project() const;
2022-11-06 00:37:50 +00:00
private:
2022-11-06 11:40:11 +00:00
Result::ProjectCore *const pjt_core;
2022-11-06 00:37:50 +00:00
};
/**
* .
*/
2022-11-06 11:40:11 +00:00
class NodeStoryFragment : public Result::NamedNode
2022-11-06 00:37:50 +00:00
{
public:
explicit NodeStoryFragment(NodeStoryUnit* unit, const QString &name);
virtual ~NodeStoryFragment() = default;
// 通过 NamedNode 继承
inline virtual int depth() const override {
return unit_ins->depth() + 1;
}
2022-11-06 11:40:11 +00:00
virtual Result::DocCore * document() const override;
2022-11-06 00:37:50 +00:00
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;
2022-11-06 11:40:11 +00:00
Result::DocCore * docRef() const;
2022-11-06 00:37:50 +00:00
private:
NodeStoryUnitParser *const parent_parser;
};
/**
* .
*/
2022-11-06 11:40:11 +00:00
class NodeStoryPointRefer : public Result::DesNode
2022-11-06 00:37:50 +00:00
{
public:
2022-11-06 10:15:55 +00:00
explicit NodeStoryPointRefer(DesNode *parent, const QString &chain, const QString &point);
virtual ~NodeStoryPointRefer() = default;
2022-11-06 00:37:50 +00:00
// 通过 DesNode 继承
inline virtual int depth() const override {
return parent_ins->depth() + 1;
}
2022-11-06 11:40:11 +00:00
virtual Result::DocCore * document() const override;
2022-11-06 00:37:50 +00:00
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;
};
2022-11-06 10:15:55 +00:00
class NodeStoryDesGroupParser : public Syntax::XSyntaxBase
2022-11-06 00:37:50 +00:00
{
public:
2022-11-06 10:15:55 +00:00
NodeStoryDesGroupParser(Syntax::XSyntaxBase * parent);
2022-11-06 00:37:50 +00:00
private:
Syntax::XSyntaxBase *const parent_parser;
};
2022-11-06 10:15:55 +00:00
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;
};
2022-11-06 00:37:50 +00:00
/**
*
2022-11-06 11:40:11 +00:00
* # {
*
*
* }
2022-11-06 00:37:50 +00:00
*/
2022-11-06 11:40:11 +00:00
class NodeStoryFragmentComment : public Result::NamedNode
2022-11-06 00:37:50 +00:00
{
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;
}
2022-11-06 11:40:11 +00:00
virtual Result::DocCore * document() const override;
2022-11-06 00:37:50 +00:00
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;
2022-11-07 05:12:31 +00:00
QString orderValue() const;
void resetValue(const QString &value);
2022-11-06 00:37:50 +00:00
private:
DesNode *const parent_ins;
QString name_store;
QString order_name;
2022-11-07 05:12:31 +00:00
QString order_value;
2022-11-06 00:37:50 +00:00
QList<DesNode*> children_nodes;
};
2022-11-07 05:12:31 +00:00
class NodeStoryFragmentCommentParser : public Syntax::XSyntaxBase
{
public:
NodeStoryFragmentCommentParser(Syntax::SyntaxParser* pparser);
private:
Syntax::SyntaxParser *const pparser;
};
2022-11-06 00:37:50 +00:00
2022-11-06 11:40:11 +00:00
class StoryUnitDocumentParser : public Syntax::ParseFrame
2022-11-06 00:37:50 +00:00
{
public:
2022-11-06 11:40:11 +00:00
StoryUnitDocumentParser(Result::ProjectCore *ins);
2022-11-06 00:37:50 +00:00
};
2022-11-06 10:15:55 +00:00
}