实时编译,双击脉络或单元节点,自动打开文档和跳转节点

This commit is contained in:
玉宇清音 2022-11-22 14:15:36 +08:00
parent 45f638dac6
commit 3ded30b981
18 changed files with 140 additions and 54 deletions

View File

@ -41,7 +41,7 @@ int main(int argc, char *argv[])
// auto path = "D:\\Projects\\Cpp\\QtNovelDesc\\DesParser\\example.storyvolume"; // auto path = "D:\\Projects\\Cpp\\QtNovelDesc\\DesParser\\example.storyvolume";
auto path = "D:\\测试文学项目\\contentfile_851382615.storyboard"; auto path = "D:\\测试文学项目\\contentfile_851382615.storyboard";
tool.compile(QFileInfo(path)); tool.compile(QFileInfo(path), "后台编译");
auto doc = core.queryDocument(QFileInfo(path)); auto doc = core.queryDocument(QFileInfo(path));
auto retlist = core.queryRootNodes(doc); auto retlist = core.queryRootNodes(doc);

View File

@ -76,7 +76,9 @@ void SensitiveCore::closeTextComponent(const QFileInfo &target)
void SensitiveCore::addPerceptionList(VariedTextView *ins, SensitiveType type) void SensitiveCore::addPerceptionList(VariedTextView *ins, SensitiveType type)
{ {
if(type == SensitiveType::CompileAtChanged){ if(type == SensitiveType::CompileAtChanged){
connect(ins, &VariedTextView::dataChanged, this, &SensitiveCore::recompile); connect(ins, &VariedTextView::dataChanged, [ins, this](const QString &path){
this->recompile(path, ins->docName());
});
this->sourcecode_map[ins->filePath()] = ins; this->sourcecode_map[ins->filePath()] = ins;
} }
else{ else{
@ -89,13 +91,13 @@ void SensitiveCore::addProcTrigger(std::function<void ()> exc)
this->trigger_list << exc; this->trigger_list << exc;
} }
void SensitiveCore::recompile(const QString &file_path) void SensitiveCore::recompile(const QString &file_path, const QString &doc_name)
{ {
if(!sourcecode_map.contains(file_path)) if(!sourcecode_map.contains(file_path))
return; return;
auto view = this->sourcecode_map[file_path]; auto view = this->sourcecode_map[file_path];
make_core->compileSource(QFileInfo(file_path), view->textContent()); make_core->compileSource(QFileInfo(file_path), view->textContent(), doc_name);
for(auto &ex : trigger_list) for(auto &ex : trigger_list)
ex(); ex();
@ -104,6 +106,12 @@ void SensitiveCore::recompile(const QString &file_path)
VariedTextView::VariedTextView() VariedTextView::VariedTextView()
: QObject(nullptr){} : QObject(nullptr){}
void VariedTextView::setSource(Core::AppCore *core, const QFileInfo &src, const QString &name, QWidget *parent)
{
this->doc_name = name;
this->setSource(core, src, parent);
}
QString VariedTextView::filePath() const QString VariedTextView::filePath() const
{ {
return source_x.absoluteFilePath(); return source_x.absoluteFilePath();
@ -122,6 +130,11 @@ void VariedTextView::save() const
tout.flush(); tout.flush();
} }
QString VariedTextView::docName() const
{
return doc_name;
}
void VariedTextView::setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent) void VariedTextView::setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent)
{ {
this->source_x = src; this->source_x = src;

View File

@ -18,13 +18,14 @@ namespace MakeTools {
explicit VariedTextView(); explicit VariedTextView();
virtual ~VariedTextView() = default; virtual ~VariedTextView() = default;
virtual void setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent=nullptr); void setSource(Core::AppCore *core, const QFileInfo &src, const QString &name, QWidget *parent=nullptr);
QString filePath() const; QString filePath() const;
void save() const; void save() const;
virtual void jumpTo(const QList<QString> &path) = 0; virtual void jumpTo(const QList<QString> &path) = 0;
virtual QString docName() const;
virtual QWidget* textView() const = 0; virtual QWidget* textView() const = 0;
virtual QString textContent() const = 0; virtual QString textContent() const = 0;
virtual void textContentReset(const QString &value) = 0; virtual void textContentReset(const QString &value) = 0;
@ -32,8 +33,12 @@ namespace MakeTools {
signals: signals:
void dataChanged(const QString &filePath); void dataChanged(const QString &filePath);
protected:
virtual void setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent=nullptr);
private: private:
QFileInfo source_x; QFileInfo source_x;
QString doc_name;
}; };
enum class SensitiveType enum class SensitiveType
@ -67,7 +72,7 @@ namespace MakeTools {
QHash<QString, VariedTextView*> plaintext_map; QHash<QString, VariedTextView*> plaintext_map;
QList<std::function<void()>> trigger_list; QList<std::function<void()>> trigger_list;
void recompile(const QString &file_path); void recompile(const QString &file_path, const QString &doc_name);
}; };
} }

View File

@ -111,11 +111,11 @@ void AppCore::openTextDocument(const QString &src, const QString &name)
auto doc = parse_core->queryDocument(QFileInfo(src)); auto doc = parse_core->queryDocument(QFileInfo(src));
if(doc == nullptr){ if(doc == nullptr){
this->make_tool->compile(QFileInfo(src)); this->make_tool->compile(QFileInfo(src), name);
doc = parse_core->queryDocument(QFileInfo(src)); doc = parse_core->queryDocument(QFileInfo(src));
} }
tview->setSource(this, QFileInfo(src), views); tview->setSource(this, QFileInfo(src), name, views);
framework->addPerceptionList(tview); framework->addPerceptionList(tview);
dynamic_cast<Core::FileExtension*>(tview)->reload(this->getConfigs(QList<Scale>() << Scale::Global << Scale::Project)); dynamic_cast<Core::FileExtension*>(tview)->reload(this->getConfigs(QList<Scale>() << Scale::Global << Scale::Project));

View File

@ -41,7 +41,7 @@ MainWindow::MainWindow(QWidget *parent)
current_projects(new QListView(this)), current_projects(new QListView(this)),
project_structure(new ProjectView(app_core, project_manager, this)), project_structure(new ProjectView(app_core, project_manager, this)),
chains_view(new StoryChainsPresent(app_core, this)), chains_view(new StoryChainsPresent(app_core, this)),
units_view(new StoryUnitsPresent(app_core->parseCore(), this)), units_view(new StoryUnitsPresent(app_core, this)),
errors_present(new MessagePresent(app_core->getMake_tool(), this)) errors_present(new MessagePresent(app_core->getMake_tool(), this))
{ {
QApplication::instance()->installEventFilter(this); QApplication::instance()->installEventFilter(this);
@ -67,7 +67,7 @@ MainWindow::MainWindow(QWidget *parent)
auto mbar = menuBar(); auto mbar = menuBar();
// 项目菜单树 // 项目菜单树
auto project = mbar->addMenu("项目"); auto project = mbar->addMenu("项目");
project->addAction("新建路径", [this](){ auto pnew = project->addAction("新建路径", [this](){
auto packages = QInputDialog::getText(this, "输入包路径名称", "packagea#packageb#packagec"); auto packages = QInputDialog::getText(this, "输入包路径名称", "packagea#packageb#packagec");
if(packages == "") if(packages == "")
return; return;
@ -82,6 +82,8 @@ MainWindow::MainWindow(QWidget *parent)
project_manager->newPath(names); project_manager->newPath(names);
}); });
sync_kernel->registerActionSync(pnew, [this]()->bool{return project_manager->isOpen();});
auto _xnew = project->addMenu("最后卷新建文件"); auto _xnew = project->addMenu("最后卷新建文件");
_xnew->addAction("小说章节"); _xnew->addAction("小说章节");
_xnew->addSeparator(); _xnew->addSeparator();
@ -89,6 +91,8 @@ MainWindow::MainWindow(QWidget *parent)
_xnew->addAction("故事单元"); _xnew->addAction("故事单元");
_xnew->addAction("故事大纲"); _xnew->addAction("故事大纲");
_xnew->addAction("叙事大纲"); _xnew->addAction("叙事大纲");
sync_kernel->registerWidgetSync(_xnew, [this]()->bool{return project_manager->isOpen();});
project->addSeparator(); project->addSeparator();
auto sav = project->addAction("保存"); auto sav = project->addAction("保存");
sav->setShortcut(QKeySequence::StandardKey::Save); sav->setShortcut(QKeySequence::StandardKey::Save);
@ -290,13 +294,14 @@ MainWindow::MainWindow(QWidget *parent)
sys->addSeparator(); sys->addSeparator();
sys->addAction("关于……"); sys->addAction("关于……");
setCentralWidget(this->vertical_split);
setCentralWidget(this->horizontal_split); this->vertical_split->addWidget(this->horizontal_split);
this->horizontal_split->addWidget(left_funcs);
this->horizontal_split->addWidget(vertical_split);
this->horizontal_split->addWidget(right_funcs);
this->vertical_split->addWidget(center_funcs);
this->vertical_split->addWidget(bottom_funcs); this->vertical_split->addWidget(bottom_funcs);
this->horizontal_split->addWidget(left_funcs);
this->horizontal_split->addWidget(center_funcs);
this->horizontal_split->addWidget(right_funcs);
left_funcs->setTabsClosable(true); left_funcs->setTabsClosable(true);
connect(left_funcs, &QTabWidget::tabCloseRequested, connect(left_funcs, &QTabWidget::tabCloseRequested,
[this](int index){ toggle_widget_visible(false, left_funcs, left_funcs->widget(index)); }); [this](int index){ toggle_widget_visible(false, left_funcs, left_funcs->widget(index)); });
@ -316,6 +321,11 @@ MainWindow::MainWindow(QWidget *parent)
app_core->getFramework()->closeTextComponent(QFileInfo(comp->filePath())); app_core->getFramework()->closeTextComponent(QFileInfo(comp->filePath()));
}); });
this->app_core->getFramework()->addProcTrigger([this](){
this->chains_view->refresh();
this->units_view->refresh();
this->errors_present->refresh();
});
center_funcs->addTab(current_projects, "欢迎界面"); center_funcs->addTab(current_projects, "欢迎界面");
@ -357,19 +367,19 @@ void MainWindow::build_internal(bool all_from_disk)
auto chains = project_manager->filesWithEnds("storychain"); auto chains = project_manager->filesWithEnds("storychain");
for(auto &it : chains) for(auto &it : chains)
app_core->getMake_tool()->compile(it); app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it));
auto units = project_manager->filesWithEnds("storyunit"); auto units = project_manager->filesWithEnds("storyunit");
for(auto &it : units) for(auto &it : units)
app_core->getMake_tool()->compile(it); app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it));
auto storys = project_manager->filesWithEnds("storyboard"); auto storys = project_manager->filesWithEnds("storyboard");
for(auto &it : storys) for(auto &it : storys)
app_core->getMake_tool()->compile(it); app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it));
auto volumes = project_manager->filesWithEnds("storyvolume"); auto volumes = project_manager->filesWithEnds("storyvolume");
for(auto &it : volumes) for(auto &it : volumes)
app_core->getMake_tool()->compile(it); app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it));
errors_present->refresh(); errors_present->refresh();
chains_view->refresh(); chains_view->refresh();

View File

@ -90,6 +90,7 @@ void StoryChainSourceEdit::jumpTo(const QList<QString> &path)
auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row()); auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row());
auto cur = this->edit_square->textCursor(); auto cur = this->edit_square->textCursor();
cur.setPosition(textblock.position()); cur.setPosition(textblock.position());
cur.select(QTextCursor::SelectionType::LineUnderCursor);
this->edit_square->setTextCursor(cur); this->edit_square->setTextCursor(cur);
if(path.size() > 1){ if(path.size() > 1){
@ -98,9 +99,12 @@ void StoryChainSourceEdit::jumpTo(const QList<QString> &path)
auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row()); auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row());
cur.setPosition(textblock.position()); cur.setPosition(textblock.position());
cur.select(QTextCursor::SelectionType::LineUnderCursor);
this->edit_square->setTextCursor(cur); this->edit_square->setTextCursor(cur);
} }
} }
edit_square->setFocus();
} }
namespace __temp { namespace __temp {

View File

@ -88,7 +88,10 @@ void StoryChainsPresent::click_to(const QModelIndex &curr)
} }
auto chain_ins = this->core_ins->parseCore()->queryStoryChain(path[0]).first(); auto chain_ins = this->core_ins->parseCore()->queryStoryChain(path[0]).first();
auto present = this->core_ins->getFramework()->queryTextComponent(QFileInfo(chain_ins->doc()->filePath())); auto chain_doc = chain_ins->doc();
this->core_ins->openTextDocument(chain_doc->filePath(), chain_doc->docName());
auto present = this->core_ins->getFramework()->queryTextComponent(QFileInfo(chain_doc->filePath()));
if(path.size()){ if(path.size()){
present->jumpTo(path); present->jumpTo(path);
} }

View File

@ -74,6 +74,7 @@ void StoryUnitSourceEdit::rehighlighter()
void StoryUnitSourceEdit::setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent) void StoryUnitSourceEdit::setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent)
{ {
this->source_target = src; this->source_target = src;
this->core_ins = core;
FormattedTextEdit::setSource(core, src, parent); FormattedTextEdit::setSource(core, src, parent);
static_cast<KeywordsHightlighter*>(words_highlighter) static_cast<KeywordsHightlighter*>(words_highlighter)
->reset(core->parseCore()->queryDocument(src)); ->reset(core->parseCore()->queryDocument(src));
@ -82,7 +83,30 @@ void StoryUnitSourceEdit::setSource(Core::AppCore *core, const QFileInfo &src, Q
void StoryUnitSourceEdit::jumpTo(const QList<QString> &path) void StoryUnitSourceEdit::jumpTo(const QList<QString> &path)
{ {
auto fpath = this->filePath();
auto core = core_ins->parseCore();
if(path.size()){
auto storynode = core->queryStoryUnit(path[0]).first();
auto first_word = storynode->refered()[0];
auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row());
auto cur = this->edit_square->textCursor();
cur.setPosition(textblock.position());
cur.select(QTextCursor::SelectionType::LineUnderCursor);
this->edit_square->setTextCursor(cur);
if(path.size() > 1){
auto storypoint = core->queryStoryFragment(storynode, path[1]).first();
first_word = storypoint->refered()[0];
auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row());
cur.setPosition(textblock.position());
cur.select(QTextCursor::SelectionType::LineUnderCursor);
this->edit_square->setTextCursor(cur);
}
}
edit_square->setFocus();
} }
FileExtension *StoryUnitSourceEditFactory::newInstance(Core::AppCore *core) FileExtension *StoryUnitSourceEditFactory::newInstance(Core::AppCore *core)

View File

@ -46,6 +46,7 @@ namespace Components {
QSyntaxHighlighter *const words_highlighter; QSyntaxHighlighter *const words_highlighter;
Core::FileExtensionFactory *const factory_ins; Core::FileExtensionFactory *const factory_ins;
QFileInfo source_target; QFileInfo source_target;
Core::AppCore *core_ins;
// VariedTextView interface // VariedTextView interface
public: public:

View File

@ -1,4 +1,5 @@
#include "storyunitspresent.h" #include "storyunitspresent.h"
#include "SensitiveCore.h"
#include <QSplitter> #include <QSplitter>
#include <QVBoxLayout> #include <QVBoxLayout>
@ -6,7 +7,7 @@
using namespace Components; using namespace Components;
using namespace Parse::Result; using namespace Parse::Result;
StoryUnitsPresent::StoryUnitsPresent(Parse::Result::ParseCore *core, QWidget *parent) StoryUnitsPresent::StoryUnitsPresent(Core::AppCore *core, QWidget *parent)
: QWidget(parent), core_ins(core), : QWidget(parent), core_ins(core),
model_ins(new QStandardItemModel(this)), model_ins(new QStandardItemModel(this)),
units_view(new QTreeView(this)), units_view(new QTreeView(this)),
@ -27,12 +28,13 @@ StoryUnitsPresent::StoryUnitsPresent(Parse::Result::ParseCore *core, QWidget *pa
details_show->setReadOnly(true); details_show->setReadOnly(true);
connect(units_view, &QTreeView::clicked, this, &StoryUnitsPresent::show_node_description); connect(units_view, &QTreeView::clicked, this, &StoryUnitsPresent::show_node_description);
connect(units_view, &QTreeView::doubleClicked, this, &StoryUnitsPresent::click_to);
} }
void StoryUnitsPresent::refresh() void StoryUnitsPresent::refresh()
{ {
model_ins->clear(); model_ins->clear();
auto units = core_ins->allStoryUnits(); auto units = core_ins->parseCore()->allStoryUnits();
for(auto &unit : units){ for(auto &unit : units){
auto unit_node = new QStandardItem(static_cast<NamedNode*>(unit)->name()); auto unit_node = new QStandardItem(static_cast<NamedNode*>(unit)->name());
unit_node->setEditable(false); unit_node->setEditable(false);
@ -57,7 +59,7 @@ void StoryUnitsPresent::show_node_description(const QModelIndex &curr)
details_show->clear(); details_show->clear();
auto item = model_ins->itemFromIndex(curr); auto item = model_ins->itemFromIndex(curr);
if(item->parent() == nullptr){ if(item->parent() == nullptr){
auto node = core_ins->queryStoryUnit(item->text()); auto node = core_ins->parseCore()->queryStoryUnit(item->text());
auto children = node.first()->children(); auto children = node.first()->children();
for(auto &it : children){ for(auto &it : children){
@ -67,8 +69,8 @@ void StoryUnitsPresent::show_node_description(const QModelIndex &curr)
} }
} }
else{ else{
auto node = core_ins->queryStoryUnit(item->parent()->text()); auto node = core_ins->parseCore()->queryStoryUnit(item->parent()->text());
auto point = core_ins->queryStoryFragment(node.first(), item->text()); auto point = core_ins->parseCore()->queryStoryFragment(node.first(), item->text());
auto children = point.first()->children(); auto children = point.first()->children();
for(auto &it : children){ for(auto &it : children){
@ -77,6 +79,28 @@ void StoryUnitsPresent::show_node_description(const QModelIndex &curr)
} }
} }
void StoryUnitsPresent::click_to(const QModelIndex &curr)
{
if(!curr.isValid())
return;
auto pnode = this->model_ins->itemFromIndex(curr);
QList<QString> path;
while (pnode) {
path.insert(0, pnode->text());
pnode = pnode->parent();
}
auto unit_ins = this->core_ins->parseCore()->queryStoryUnit(path[0]).first();
auto chain_doc = unit_ins->doc();
this->core_ins->openTextDocument(chain_doc->filePath(), chain_doc->docName());
auto present = this->core_ins->getFramework()->queryTextComponent(QFileInfo(chain_doc->filePath()));
if(path.size()){
present->jumpTo(path);
}
}

View File

@ -7,6 +7,7 @@
#include <QTreeView> #include <QTreeView>
#include <QWidget> #include <QWidget>
#include "appcore.h"
#include "libParse.h" #include "libParse.h"
namespace Components { namespace Components {
@ -15,20 +16,20 @@ namespace Components {
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit StoryUnitsPresent(Parse::Result::ParseCore *core, QWidget *parent = nullptr); explicit StoryUnitsPresent(Core::AppCore *core, QWidget *parent = nullptr);
void refresh(); void refresh();
signals: signals:
private: private:
Parse::Result::ParseCore *const core_ins; Core::AppCore *const core_ins;
QStandardItemModel *const model_ins; QStandardItemModel *const model_ins;
QTreeView *const units_view; QTreeView *const units_view;
QPlainTextEdit *const details_show; QPlainTextEdit *const details_show;
void show_node_description(const QModelIndex &curr); void show_node_description(const QModelIndex &curr);
void click_to(const QModelIndex &curr);
}; };
} }

View File

@ -12,7 +12,7 @@ using namespace Parse::Result;
StoryTool::StoryTool(Parse::Result::ParseCore *core) StoryTool::StoryTool(Parse::Result::ParseCore *core)
: parse_core(core){} : parse_core(core){}
QList<QString> StoryTool::compile(const QFileInfo &file) QList<QString> StoryTool::compile(const QFileInfo &file, const QString &doc_name)
{ {
DocCore *doc_core = parse_core->queryDocument(file.absoluteFilePath()); DocCore *doc_core = parse_core->queryDocument(file.absoluteFilePath());
if(doc_core) if(doc_core)
@ -21,28 +21,28 @@ QList<QString> StoryTool::compile(const QFileInfo &file)
QList<DesNode*> results; QList<DesNode*> results;
if(file.suffix() == "storychain"){ if(file.suffix() == "storychain"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYCHAIN, file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYCHAIN, file.absoluteFilePath(), doc_name);
StoryChainDocumentParser parser(parse_core); StoryChainDocumentParser parser(parse_core);
results.append(parser.analysis(doc_core, file.absoluteFilePath())); results.append(parser.analysis(doc_core, file.absoluteFilePath()));
} }
else if(file.suffix() == "storyunit"){ else if(file.suffix() == "storyunit"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYUNIT, file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYUNIT, file.absoluteFilePath(), doc_name);
StoryUnitDocumentParser parser(parse_core); StoryUnitDocumentParser parser(parse_core);
results.append(parser.analysis(doc_core, file.absoluteFilePath())); results.append(parser.analysis(doc_core, file.absoluteFilePath()));
} }
else if(file.suffix() == "storyboard"){ else if(file.suffix() == "storyboard"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYBOARD, file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYBOARD, file.absoluteFilePath(), doc_name);
StoryBoardDocumentParser parser(parse_core); StoryBoardDocumentParser parser(parse_core);
results.append(parser.analysis(doc_core, file.absoluteFilePath())); results.append(parser.analysis(doc_core, file.absoluteFilePath()));
} }
else if(file.suffix() == "storyvolume"){ else if(file.suffix() == "storyvolume"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, file.absoluteFilePath(), doc_name);
StoryOutlineDocumentParser parser(parse_core); StoryOutlineDocumentParser parser(parse_core);
results.append(parser.analysis(doc_core, file.absoluteFilePath())); results.append(parser.analysis(doc_core, file.absoluteFilePath()));
@ -56,7 +56,7 @@ QList<QString> StoryTool::compile(const QFileInfo &file)
return QList<QString>(); return QList<QString>();
} }
QList<QString> StoryTool::compileSource(const QFileInfo &_file, const QString &src) QList<QString> StoryTool::compileSource(const QFileInfo &_file, const QString &src, const QString &doc_name)
{ {
DocCore *doc_core = parse_core->queryDocument(_file.absoluteFilePath()); DocCore *doc_core = parse_core->queryDocument(_file.absoluteFilePath());
if(doc_core) if(doc_core)
@ -65,28 +65,28 @@ QList<QString> StoryTool::compileSource(const QFileInfo &_file, const QString &s
QList<DesNode*> results; QList<DesNode*> results;
if(_file.suffix() == "storychain"){ if(_file.suffix() == "storychain"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYCHAIN, _file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYCHAIN, _file.absoluteFilePath(), doc_name);
StoryChainDocumentParser parser(parse_core); StoryChainDocumentParser parser(parse_core);
results.append(parser.analysisSource(doc_core, src)); results.append(parser.analysisSource(doc_core, src));
} }
else if(_file.suffix() == "storyunit"){ else if(_file.suffix() == "storyunit"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYUNIT, _file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYUNIT, _file.absoluteFilePath(), doc_name);
StoryUnitDocumentParser parser(parse_core); StoryUnitDocumentParser parser(parse_core);
results.append(parser.analysisSource(doc_core, src)); results.append(parser.analysisSource(doc_core, src));
} }
else if(_file.suffix() == "storyboard"){ else if(_file.suffix() == "storyboard"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYBOARD, _file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYBOARD, _file.absoluteFilePath(), doc_name);
StoryBoardDocumentParser parser(parse_core); StoryBoardDocumentParser parser(parse_core);
results.append(parser.analysisSource(doc_core, src)); results.append(parser.analysisSource(doc_core, src));
} }
else if(_file.suffix() == "storyvolume"){ else if(_file.suffix() == "storyvolume"){
if(!doc_core) if(!doc_core)
doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, _file.absoluteFilePath()); doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, _file.absoluteFilePath(), doc_name);
StoryOutlineDocumentParser parser(parse_core); StoryOutlineDocumentParser parser(parse_core);
results.append(parser.analysisSource(doc_core, src)); results.append(parser.analysisSource(doc_core, src));

View File

@ -15,8 +15,8 @@ namespace MakeTools {
public: public:
StoryTool(Parse::Result::ParseCore *core); StoryTool(Parse::Result::ParseCore *core);
QList<QString> compile(const QFileInfo &file); QList<QString> compile(const QFileInfo &file, const QString &doc_name);
QList<QString> compileSource(const QFileInfo &file, const QString &src); QList<QString> compileSource(const QFileInfo &file, const QString &src, const QString &doc_name);
bool checkPass(QList<Parse::ErrorMessage> &errors); bool checkPass(QList<Parse::ErrorMessage> &errors);

View File

@ -297,8 +297,8 @@ QString Words::toString() const
return value_store; return value_store;
} }
DocCore::DocCore(ParseCore * core, DocType type, const QFileInfo & path) DocCore::DocCore(ParseCore * core, DocType type, const QFileInfo & path, const QString &doc_name)
: unknown_host(new Unknown(this)), core_store(core), : unknown_host(new Unknown(this)), core_store(core), doc_name(doc_name),
file_path_store(path.absoluteFilePath()), type_store(type) file_path_store(path.absoluteFilePath()), type_store(type)
{ {
} }
@ -323,9 +323,9 @@ QString DocCore::filePath() const
return file_path_store; return file_path_store;
} }
QString DocCore::fileName() const QString DocCore::docName() const
{ {
return QFileInfo(file_path_store).fileName(); return doc_name;
} }
void DocCore::clear() void DocCore::clear()

View File

@ -207,7 +207,7 @@ namespace Parse
class LIBPARSE_EXPORT DocCore class LIBPARSE_EXPORT DocCore
{ {
public: public:
explicit DocCore(ParseCore* core, DocType type, const QFileInfo &path); explicit DocCore(ParseCore* core, DocType type, const QFileInfo &path, const QString &doc_name);
virtual ~DocCore() = default; virtual ~DocCore() = default;
/** /**
@ -242,7 +242,7 @@ namespace Parse
* *
* \return * \return
*/ */
QString fileName() const; QString docName() const;
/** /**
* . * .
@ -270,6 +270,7 @@ namespace Parse
private: private:
Result::DesNode *const unknown_host; Result::DesNode *const unknown_host;
ParseCore *const core_store; ParseCore *const core_store;
QString doc_name;
QString file_path_store; QString file_path_store;
DocType type_store; DocType type_store;

View File

@ -82,7 +82,7 @@ namespace Project {
* @param suffix * @param suffix
* @return * @return
*/ */
virtual QList<QFileInfo> filesWithEnds(const QString &suffix) const = 0; virtual QList<std::tuple<QFileInfo, QString>> filesWithEnds(const QString &suffix) const = 0;
/** /**
* @brief * @brief

View File

@ -224,7 +224,7 @@ bool XMLProjectManager::deletePath(const QList<QString> &path)
return true; return true;
} }
QList<QFileInfo> XMLProjectManager::filesWithEnds(const QString &suffix) const QList<std::tuple<QFileInfo, QString> > XMLProjectManager::filesWithEnds(const QString &suffix) const
{ {
auto root_project = mode_holder->item(0); auto root_project = mode_holder->item(0);
return nodes_search(static_cast<ProjectNode*>(root_project), suffix); return nodes_search(static_cast<ProjectNode*>(root_project), suffix);
@ -265,10 +265,10 @@ ProjectNode *XMLProjectManager::node_follows(ProjectNode *pnode, const QList<QSt
return nullptr; return nullptr;
} }
QList<QFileInfo> XMLProjectManager::nodes_search(ProjectNode *pnode, const QString &suffix) const QList<std::tuple<QFileInfo, QString> > XMLProjectManager::nodes_search(ProjectNode *pnode, const QString &suffix) const
{ {
auto root_dir = QFileInfo(file_path).dir(); auto root_dir = QFileInfo(file_path).dir();
QList<QFileInfo> infos_return; QList<std::tuple<QFileInfo, QString>> infos_return;
for(auto idx=0; idx<pnode->rowCount(); ++idx){ for(auto idx=0; idx<pnode->rowCount(); ++idx){
auto item = static_cast<ProjectNode*>(pnode->child(idx)); auto item = static_cast<ProjectNode*>(pnode->child(idx));
@ -277,7 +277,7 @@ QList<QFileInfo> XMLProjectManager::nodes_search(ProjectNode *pnode, const QStri
auto file_path = root_dir.filePath(item->file()); auto file_path = root_dir.filePath(item->file());
QFileInfo xinfo(file_path); QFileInfo xinfo(file_path);
if(xinfo.suffix() == suffix) if(xinfo.suffix() == suffix)
infos_return << xinfo; infos_return << std::make_tuple(xinfo, item->text());
} }
else{ else{
auto elist = nodes_search(item, suffix); auto elist = nodes_search(item, suffix);

View File

@ -53,7 +53,7 @@ namespace Project {
virtual int createFile(const QList<QString> &path, const QString &name, const QString &suffix) override; virtual int createFile(const QList<QString> &path, const QString &name, const QString &suffix) override;
virtual bool deletePath(const QList<QString> &path) override; virtual bool deletePath(const QList<QString> &path) override;
virtual QList<QFileInfo> filesWithEnds(const QString &suffix) const override; virtual QList<std::tuple<QFileInfo, QString>> filesWithEnds(const QString &suffix) const override;
virtual QStandardItem *newPath(const QList<QString> &path) override; virtual QStandardItem *newPath(const QList<QString> &path) override;
virtual QFileInfo queryWith(const QList<QString> &path) override; virtual QFileInfo queryWith(const QList<QString> &path) override;
@ -69,7 +69,7 @@ namespace Project {
void structure_severlize(ProjectNode *pnode, QDomElement &elm); void structure_severlize(ProjectNode *pnode, QDomElement &elm);
ProjectNode* node_follows(ProjectNode* pnode, const QList<QString> &path_remains); ProjectNode* node_follows(ProjectNode* pnode, const QList<QString> &path_remains);
QList<QFileInfo> nodes_search(ProjectNode *pnode, const QString &suffix) const; QList<std::tuple<QFileInfo, QString>> nodes_search(ProjectNode *pnode, const QString &suffix) const;
ProjectNode *groups_rebuild(ProjectNode *pnode, const QList<QString> &path_remains); ProjectNode *groups_rebuild(ProjectNode *pnode, const QList<QString> &path_remains);