QtNovelUI/DesParser/StoryChainDocumentParser.h

145 lines
3.1 KiB
C++

#pragma once
/**
* StoryChain文件定义.
*/
#include <QString>
#include <QList>
#include "ParseFrame.h"
#include "XSyntaxBase.h"
#include "ComnDef.h"
namespace Parse
{
class NodeStoryPoint;
/**
* 故事脉络节点定义.
*/
class NodeStoryChain : public Result::NamedNode
{
public:
/**
* 构建一个新的脉络节点.
*
* \param src_path 源文件路径
*/
explicit NodeStoryChain(Result::DocCore *doc, const QString &name);
virtual ~NodeStoryChain() = default;
/**
* 获取此解析节点关联的源文件路径.
*
* \return 路径字符串
*/
virtual QString srcPath() const;
// 通过 NamedNode 继承
virtual bool check(QList<QString>& reasons) const override;
virtual QString toString() const override;
};
/**
* 故事脉络定制解析器.
*/
class NodeStoryChainParser : public Syntax::XSyntaxBase
{
public:
NodeStoryChainParser(Result::ParseCore *core);
virtual ~NodeStoryChainParser() = default;
Result::ParseCore* project() const;
private:
Result::ParseCore *pjt_ref;
};
/**
* 故事节点.
*/
class NodeStoryPoint : public Result::NamedNode
{
public:
explicit NodeStoryPoint(NodeStoryChain *chain, const QString &name);
virtual ~NodeStoryPoint() = default;
/**
* 获取此解析节点依附的脉络节点
*
* \return 脉络节点
*/
virtual NodeStoryChain* storyChain() const;
// 通过 NamedNode 继承
virtual bool check(QList<QString>& reasons) const override;
virtual QString toString() const override;
};
/**
* 故事节点定制解析器.
*/
class NodeStoryPointParser : public Syntax::XSyntaxBase
{
public:
explicit NodeStoryPointParser(NodeStoryChainParser *chain);
virtual ~NodeStoryPointParser() = default;
NodeStoryChainParser* storyChainParser() const;
virtual Result::DocCore* docRef() const override;
private:
NodeStoryChainParser *const parent_parser;
};
/**
* 节点描述内容节点.
*/
class NodeStoryDesGroup : public Result::DesNode
{
public:
NodeStoryDesGroup(DesNode *parent_refer);
virtual ~NodeStoryDesGroup() = default;
// 通过 DesNode 继承
virtual bool check(QList<QString>&) const override;
virtual QString toString() const override;
};
class NodeStoryPureTextDesGroupParser : public Syntax::XSyntaxBase
{
public:
explicit NodeStoryPureTextDesGroupParser(XSyntaxBase *pparser);
virtual ~NodeStoryPureTextDesGroupParser() = default;
private:
XSyntaxBase *const parent_parser;
};
/**
* 描述内容文字块.
*/
class NodeStoryDesBlock : public Result::DesNode
{
public:
explicit NodeStoryDesBlock(DesNode *parent_node, const QString &text);
virtual ~NodeStoryDesBlock() = default;
// 通过 DesNode 继承
virtual bool check(QList<QString>&) const override;
virtual QString toString() const override;
private:
QString text_block;
};
class StoryChainDocumentParser : public Syntax::ParseFrame
{
public:
StoryChainDocumentParser(Result::ParseCore *pjt);
virtual ~StoryChainDocumentParser() = default;
};
}