2024-03-17 07:58:28 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
#include <QList>
|
|
|
|
|
#include <QFileInfo>
|
2024-04-02 12:39:25 +00:00
|
|
|
|
#include <QDomDocument>
|
2024-03-17 07:58:28 +00:00
|
|
|
|
|
|
|
|
|
#include <ast_gen.h>
|
|
|
|
|
#include <parse_novel.h>
|
|
|
|
|
|
2024-03-28 13:11:12 +00:00
|
|
|
|
namespace printer {
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>пɷ<EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĻ<EFBFBD><EFBFBD>ࣺ<EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
class Access : public std::enable_shared_from_this<Access> {
|
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
Access(std::shared_ptr<const ast_gen::ElementAccess> handle);
|
2024-03-28 13:11:12 +00:00
|
|
|
|
virtual ~Access() = default;
|
2024-03-17 07:58:28 +00:00
|
|
|
|
|
2024-04-02 12:39:25 +00:00
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
|
|
|
|
|
* @return Ԫ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ָ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
2024-03-28 16:16:24 +00:00
|
|
|
|
std::shared_ptr<const ast_gen::ElementAccess> accessPeers() const;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
2024-04-02 12:39:25 +00:00
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
|
|
|
|
|
* @param href ҳ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
void setPageRefers(const QString& href);
|
|
|
|
|
QString pageRefers() const;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HTML
|
|
|
|
|
*/
|
2024-04-02 15:32:48 +00:00
|
|
|
|
virtual void buildPageHTML(QDomElement& doc) const = 0;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
private:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
std::shared_ptr<const ast_gen::ElementAccess> access_handle;
|
2024-04-02 12:39:25 +00:00
|
|
|
|
QString summary_refer_store;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>Ԫ<EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD>α<EFBFBD>ƪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
class Element : public Access {
|
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
Element(std::shared_ptr<const ast_gen::ElementAccess> handle);
|
2024-03-28 13:11:12 +00:00
|
|
|
|
virtual ~Element() = default;
|
|
|
|
|
|
2024-04-02 12:39:25 +00:00
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD><EFBFBD>»<EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>س<EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
2024-04-02 15:23:21 +00:00
|
|
|
|
virtual void setSliceRefer(const QString& href);
|
|
|
|
|
virtual QString sliceRefers() const;
|
2024-04-02 12:39:25 +00:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD>γ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<EFBFBD>HTML
|
|
|
|
|
*/
|
2024-04-02 15:37:40 +00:00
|
|
|
|
virtual void buildSliceHTML(QDomElement &doc) const = 0;
|
2024-04-02 12:39:25 +00:00
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
QString refer_store;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD>ɷ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ϵĻ<EFBFBD><EFBFBD>ࣺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¾<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
class Group : public Access {
|
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
Group(std::shared_ptr<const ast_gen::ElementAccess> handle);
|
2024-03-28 13:11:12 +00:00
|
|
|
|
virtual ~Group() = default;
|
|
|
|
|
|
2024-03-28 16:16:24 +00:00
|
|
|
|
void append(std::shared_ptr<Element> elm);
|
|
|
|
|
QList<std::shared_ptr<Element>> elements() const;
|
2024-04-02 12:39:25 +00:00
|
|
|
|
std::shared_ptr<Element> getElement(const QString& signature) const;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
private:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
QList<std::shared_ptr<Element>> element_store;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class StoryLine : public Group {
|
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
StoryLine(std::shared_ptr<const ast_gen::ElementAccess> handle);
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
// ͨ<><CDA8> Group <20>̳<EFBFBD>
|
2024-04-02 15:32:48 +00:00
|
|
|
|
void buildPageHTML(QDomElement& doc) const override;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class StoryVolume : public Group {
|
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
StoryVolume(std::shared_ptr<const ast_gen::ElementAccess> handle);
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
// ͨ<><CDA8> Group <20>̳<EFBFBD>
|
2024-04-02 15:32:48 +00:00
|
|
|
|
void buildPageHTML(QDomElement& doc) const override;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
};
|
2024-04-02 12:39:25 +00:00
|
|
|
|
class Fragment;
|
2024-03-28 16:16:24 +00:00
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
2024-03-28 13:11:12 +00:00
|
|
|
|
class FragmentRef : public Element {
|
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
FragmentRef(std::shared_ptr<const ast_gen::ElementAccess> handle);
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
2024-04-02 12:39:25 +00:00
|
|
|
|
void setHost(std::shared_ptr<Fragment> frag_inst);
|
|
|
|
|
std::shared_ptr<Fragment> hostFragment() const;
|
|
|
|
|
|
|
|
|
|
// ͨ<><CDA8> Access <20>̳<EFBFBD>
|
2024-04-02 15:32:48 +00:00
|
|
|
|
void buildPageHTML(QDomElement& doc) const override;
|
2024-04-02 12:39:25 +00:00
|
|
|
|
|
2024-03-28 13:11:12 +00:00
|
|
|
|
// ͨ<><CDA8> Element <20>̳<EFBFBD>
|
2024-04-02 15:37:40 +00:00
|
|
|
|
void buildSliceHTML(QDomElement& doc) const override;
|
2024-04-02 12:39:25 +00:00
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
std::weak_ptr<Fragment> host_inst;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD>α<EFBFBD>ƪ<EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD>洢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
class Fragment : public Element{
|
|
|
|
|
private:
|
|
|
|
|
QList<std::shared_ptr<FragmentRef>> additionals_store;
|
|
|
|
|
|
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
Fragment(std::shared_ptr<const ast_gen::ElementAccess> handle);
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
void appendRefers(std::shared_ptr<FragmentRef> inst);
|
|
|
|
|
QList<std::shared_ptr<FragmentRef>> additionals() const;
|
|
|
|
|
|
2024-04-02 12:39:25 +00:00
|
|
|
|
// ͨ<><CDA8> Access <20>̳<EFBFBD>
|
2024-04-02 15:32:48 +00:00
|
|
|
|
void buildPageHTML(QDomElement& doc) const override;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
|
|
|
|
|
// ͨ<><CDA8> Element <20>̳<EFBFBD>
|
2024-04-02 15:37:40 +00:00
|
|
|
|
void buildSliceHTML(QDomElement& doc) const override;
|
2024-03-28 13:11:12 +00:00
|
|
|
|
};
|
|
|
|
|
|
2024-03-28 16:16:24 +00:00
|
|
|
|
|
|
|
|
|
class tools_printer {
|
2024-03-31 05:59:17 +00:00
|
|
|
|
public:
|
2024-03-28 16:16:24 +00:00
|
|
|
|
QHash<QString, std::shared_ptr<Fragment>> fragment_defines;
|
|
|
|
|
QHash<QString, std::shared_ptr<StoryLine>> storyline_defines;
|
|
|
|
|
QHash<QString, std::shared_ptr<StoryVolume>> volume_defines;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
void build_fragments(std::shared_ptr<const ast_gen::ElementAccess> novel_root);
|
|
|
|
|
|
|
|
|
|
void build_refers_network(std::shared_ptr<const ast_gen::ElementAccess> novel_node);
|
|
|
|
|
|
|
|
|
|
void build_storyline(std::shared_ptr<StoryLine> line, std::shared_ptr<const ast_gen::ElementAccess> novel_node = nullptr);
|
|
|
|
|
void build_volumeline(std::shared_ptr<StoryVolume> line, std::shared_ptr<const ast_gen::ElementAccess> novel_node = nullptr);
|
2024-03-31 05:59:17 +00:00
|
|
|
|
|
|
|
|
|
void fragments_anchors_define(const QList<std::shared_ptr<Fragment>> &list, const QDir &destdir);
|
|
|
|
|
void storylines_anchors_define(const QList<std::shared_ptr<StoryLine>> &list, const QDir &destdir);
|
|
|
|
|
void volumes_anchors_define(const QList<std::shared_ptr<StoryVolume>> &list, const QDir &destdir);
|
2024-03-28 16:16:24 +00:00
|
|
|
|
};
|
2024-03-28 13:11:12 +00:00
|
|
|
|
}
|