QtNovelUI/DesParser/StoryUnitDocumentParser.h

184 lines
4.5 KiB
C
Raw Normal View History

2022-11-06 00:37:50 +00:00
#pragma once
#include "XSyntaxBase.h"
#include "ParseFrame.h"
2022-11-15 08:07:02 +00:00
#include "SyntaxBase.h"
2022-11-06 00:37:50 +00:00
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;
2022-11-15 08:07:02 +00:00
// 通过 DesNode 继承
2022-11-06 00:37:50 +00:00
virtual bool check(QList<QString>& reasons) const override;
virtual QString toString() const override;
};
/** 故事单元解析器 */
class NodeStoryUnitParser : public Syntax::XSyntaxBase
{
public:
2022-11-15 08:07:02 +00:00
NodeStoryUnitParser(Result::ParseCore *core);
2022-11-06 00:37:50 +00:00
2022-11-15 08:07:02 +00:00
Result::ParseCore* project() const;
2022-11-06 00:37:50 +00:00
private:
2022-11-15 08:07:02 +00:00
Result::ParseCore *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;
2022-11-15 08:07:02 +00:00
// 通过 NamedNode 继承
2022-11-06 00:37:50 +00:00
virtual bool check(QList<QString>& reasons) const override;
2022-11-15 08:07:02 +00:00
virtual QString toString() const override;
2022-11-06 00:37:50 +00:00
};
/**
* .
*/
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
2022-11-15 08:07:02 +00:00
QString chainName() const;
QString pointName() const;
// 通过 DesNode 继承
2022-11-06 00:37:50 +00:00
virtual bool check(QList<QString>& reasons) const override;
virtual QString toString() const override;
2022-11-15 08:07:02 +00:00
private:
2022-11-06 00:37:50 +00:00
QString chain_name;
QString point_name;
};
/**
* @brief
*/
class NodeStoryLinePrefixParser : public Syntax::XSyntaxBase
{
public:
NodeStoryLinePrefixParser(SyntaxParser* pparent);
void setMatchEnable(bool v);
private:
Syntax::ParseRule *critical_rule;
};
class NodeStoryMixedDesGroupParser : public Syntax::XSyntaxBase
2022-11-06 00:37:50 +00:00
{
public:
NodeStoryMixedDesGroupParser(Syntax::XSyntaxBase * parent);
virtual void reset() override;
2022-11-06 00:37:50 +00:00
private:
Syntax::XSyntaxBase *const parent_parser;
NodeStoryLinePrefixParser *const unique_tidy;
2022-11-06 00:37:50 +00:00
};
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-15 08:07:02 +00:00
// /**
// * 故事情节有序注释,单独解析
// * #注解 注解名 序列名 值 {
// * 注解段落
// * 注解段落
// * }
// */
// 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<DesNode*> children() const override;
// virtual bool check(QList<QString>& 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<DesNode*> children_nodes;
// };
// class NodeStoryFragmentCommentParser : public Syntax::XSyntaxBase
// {
// public:
// NodeStoryFragmentCommentParser(Syntax::SyntaxParser* pparser);
// private:
// Syntax::SyntaxParser *const pparser;
// };
2022-11-07 05:12:31 +00:00
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-15 08:07:02 +00:00
StoryUnitDocumentParser(Result::ParseCore *ins);
2022-11-06 00:37:50 +00:00
};
2022-11-06 10:15:55 +00:00
}