QtNovelUI/libParse/libParse.h

345 lines
8.9 KiB
C
Raw Normal View History

2022-11-17 08:26:05 +00:00
#ifndef LIBPARSE_H
#define LIBPARSE_H
#include "libParse_global.h"
#include "ComnDef.h"
#include <QFileInfo>
#include <QList>
#include <QString>
namespace Parse
{
2022-12-08 19:43:42 +00:00
namespace Result
{
class DesNode;
}
class ErrorMessage
2022-11-17 08:26:05 +00:00
{
2022-12-08 19:43:42 +00:00
public:
ErrorMessage(const Result::DesNode *obj);
2022-11-17 08:26:05 +00:00
QString Reason;
QString Text;
QString FilePath;
int CodeRow;
int CodeCol;
2022-12-08 19:43:42 +00:00
const Result::DesNode *const object;
2022-11-17 08:26:05 +00:00
};
2022-12-08 19:43:42 +00:00
namespace Result{
2022-11-17 08:26:05 +00:00
class ParseCore;
class DocCore;
enum class DocType
{
STORYBOARD = DOC_STORYBOARD,
STORYUNIT = DOC_STORYUNIT,
STORYCHAIN = DOC_STORYCHAIN,
2022-11-25 01:18:54 +00:00
STORYOUTLINES = DOC_VOLUMEOUTLINE,
STORYCONCEPTS = DOC_STORYCONCEPT
2022-11-17 08:26:05 +00:00
};
/**
* .
*/
class LIBPARSE_EXPORT Words
{
public:
explicit Words(Result::DesNode* host, Result::DocCore *doc, const QString &value, int row, int col);
virtual ~Words() = default;
/**
* .
*
* \return
*/
virtual int row() const;
/**
* .
*
* \return
*/
virtual int column() const;
/**
2022-12-31 05:27:42 +00:00
* .
2022-11-17 08:26:05 +00:00
*
* \return
*/
virtual int length() const;
/**
* nullptr.
*
* \return
*/
virtual Result::DesNode* host() const;
/**
* .
*
* \return
*/
virtual Result::DocCore* doc() const;
/**
* .
*
* \return
*/
virtual QString toString() const;
private:
QString value_store;
int row_store, col_store;
Result::DesNode *desnode_store;
Result::DocCore *docpresent_store;
};
/**
* .
*/
2023-03-20 13:19:46 +00:00
class LIBPARSE_EXPORT DesNode {
public:
2022-11-17 08:26:05 +00:00
DesNode(DocCore *core, int type_value, DesNode *pnode = nullptr);
virtual ~DesNode();
/**
* 0
*
* \return
*/
int depth() const;
/**
* .
*
* \return
*/
DocCore* doc() const;
/**
* .
*
* \return
*/
int typeValue() const;
/**
* .
*
* \return
*/
2023-03-20 13:19:46 +00:00
DesNode *parent() const;
2022-11-17 08:26:05 +00:00
/**
*
*
* \param ins
*/
void appendChild(DesNode *ins);
/**
*
*
* \return
*/
2023-03-20 13:19:46 +00:00
QList<DesNode *> children() const;
2022-11-17 08:26:05 +00:00
/**
* @brief
* @param ins
*/
void registerWords(Words *ins);
/**
* @brief
* @return
*/
QList<Words*> refered() const;
/**
* .
*
* \return true
*/
virtual bool check(QList<ErrorMessage> &reasons) const = 0;
/**
* .
*
* \return
*/
virtual QString toString() const = 0;
protected:
void clear_refers();
private:
DocCore *const doc_store;
int type_value;
DesNode *const parent_node;
QList<DesNode*> children_nodes;
QList<Words*> words_collection;
};
/**
* .
*/
class LIBPARSE_EXPORT NamedNode : public Result::DesNode
{
public:
NamedNode(const QString &name, DocCore *core, int type, DesNode *pnode = nullptr);
virtual ~NamedNode() = default;
/**
* .
*
* \return
*/
2022-11-25 01:18:54 +00:00
virtual QList<QString> name() const;
2022-11-17 08:26:05 +00:00
private:
QString name_store;
};
/**
* .
*/
class LIBPARSE_EXPORT DocCore
{
public:
explicit DocCore(ParseCore* core, DocType type, const QFileInfo &path, const QString &doc_name);
2022-11-17 08:26:05 +00:00
virtual ~DocCore() = default;
/**
* .
*
* \return
*/
Result::DesNode* unknowns() const;
/**
* .
*
* \return
*/
ParseCore* core() const;
/**
* @brief
* @return
*/
DocType docType() const;
/**
* .
*
* \return
*/
QString filePath() const;
/**
* .
*
* \return
*/
QString docName() const;
2022-11-17 08:26:05 +00:00
/**
* .
*/
void clear();
/**
* .
*
* \param ins
* \return 0 -
*/
int append(Words *ins);
/**
* .
*
* \param row
* \param col
* \return
*/
QList<Words *> getWords(int row, int col=-1) const;
2022-12-31 13:05:58 +00:00
int append(DesNode *ins);
QList<DesNode*> syntaxNodes() const;
2022-11-17 08:26:05 +00:00
private:
Result::DesNode *const unknown_host;
ParseCore *const core_store;
QString doc_name;
2022-11-17 08:26:05 +00:00
QString file_path_store;
DocType type_store;
QList<Words*> words_store;
2022-12-31 13:05:58 +00:00
QList<DesNode*> root_nodes;
2022-11-17 08:26:05 +00:00
};
/**
* .
*/
class LIBPARSE_EXPORT ParseCore
{
private:
2022-12-31 13:05:58 +00:00
QList<DocCore*> doc_nodes;
2022-11-17 08:26:05 +00:00
public:
explicit ParseCore();
virtual ~ParseCore() = default;
virtual void registerDoc(DocCore *ins);
virtual QList<DocCore *> allDocuments() const;
/**
* nullptr.
*
* \param file_path
* \return
*/
virtual Result::DocCore* queryDocument(const QFileInfo &file_src) const;
virtual void deleteDocument(Result::DocCore *ins);
2022-12-31 13:05:58 +00:00
virtual void clear();
2022-11-17 08:26:05 +00:00
2022-11-18 05:43:27 +00:00
virtual QList<Result::DesNode*> allStoryChains() const;
2022-11-17 08:26:05 +00:00
virtual QList<Result::DesNode*> queryStoryChain(const QString & name) const;
virtual QList<Result::DesNode*> queryStoryPoint(Result::DesNode* chain, const QString &name) const;
2022-11-18 23:47:32 +00:00
virtual QList<Result::DesNode*> allStoryUnits() const;
2022-11-17 08:26:05 +00:00
virtual QList<Result::DesNode*> queryStoryUnit(const QString &name) const;
virtual QList<Result::DesNode*> queryStoryFragment(Result::DesNode *unit, const QString &name) const;
2022-12-08 19:43:42 +00:00
virtual QList<std::pair<Result::NamedNode*, double>> queryOrdersFragment() const;
2022-11-17 08:26:05 +00:00
2022-11-25 01:18:54 +00:00
virtual QList<Result::DesNode*> allStoryBoards() const;
2022-11-17 08:26:05 +00:00
virtual QList<Result::DesNode*> queryStoryBoard(const QString &name) const;
2022-11-25 01:18:54 +00:00
virtual QList<Result::DesNode*> queryStoryFragmentRefer(Result::DesNode *unit, const QString &name) const;
virtual QList<Result::DesNode*> allStoryConcept() const;
virtual QList<Result::DesNode*> queryStoryConcept(const QString &name) const;
virtual QList<Result::DesNode*> queryStoryStrongPoint(Result::DesNode *concept, const QString &name) const;
2022-11-17 08:26:05 +00:00
/**
* @brief
* @param name
* @return
*/
virtual QList<Result::DesNode*> queryStoryDepiction(const QString &name) const;
};
}
}
#endif // LIBPARSE_H