WsParser_VS/WsNovelParser/main.cpp

66 lines
2.0 KiB
C++

#include <QtCore/QCoreApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QFileInfoList>
#include <ast_gen.h>
#include <ast_novel.h>
#include <libtoken.h>
#include <syntax_novel.h>
#include <tokens_novel.h>
#include <QDir>
#include "novelparser.h"
#include "htmlprint.h"
using namespace example_novel;
int main(int argc, char* argv[]) {
QCoreApplication a(argc, argv);
try {
QFileInfoList files;
files.append(QFileInfo("D:\\Projects\\Cpp\\WsNovelParser\\x64\\test_file\\description.txt"));
auto parser = std::make_shared<NovelParser>();
auto novel_accesstree = parser->parse(files);
printer::tools_printer tool;
tool.build_fragments(novel_accesstree);
tool.build_refers_network(novel_accesstree);
auto dest = QDir::current();
dest.mkdir("storylines");
dest.mkdir("volumes");
dest.mkdir("fragments");
tool.fragments_anchors_define(tool.fragment_defines.values(), QDir(dest.filePath("fragments")));
tool.storylines_anchors_define(tool.storyline_defines.values(), QDir(dest.filePath("storylines")));
tool.volumes_anchors_define(tool.volume_defines.values(), QDir(dest.filePath("volumes")));
std::function<void(std::shared_ptr<const ast_gen::ElementAccess>, int)> tnode_print =
[&](std::shared_ptr<const ast_gen::ElementAccess> node, int intend) {
auto name = node->element()->signature();
auto text = QString(intend * 2, ' ') + name;
for (auto& t : node->tokens()) {
text += " " + t->token()->content();
}
qDebug() << text;
for (auto& c_n : node->children()) {
tnode_print(c_n, intend + 1);
}
};
tnode_print(novel_accesstree, 0);
}
catch (lib_syntax::SyntaxException* e) {
qDebug().noquote() << e->message();
delete e;
}
catch (lib_parse::CheckException* e) {
qDebug().noquote() << e->message();
delete e;
}
return a.exec();
}