diff --git a/WsNovelParser/WsNovelParser.vcxproj.user b/WsNovelParser/WsNovelParser.vcxproj.user index 5716425..71dafd7 100644 --- a/WsNovelParser/WsNovelParser.vcxproj.user +++ b/WsNovelParser/WsNovelParser.vcxproj.user @@ -3,7 +3,7 @@ $(SolutionDir)$(Platform)\$(Configuration)\ WindowsLocalDebugger - --path "E:\novel-set" --dest F:\novelout + --path "E:\CustomNovels\科学+修仙+创造世界" --dest F:\novelout --path "D:\Projects\Cpp\WsNovelParser\x64\test_file" --dest E:\ diff --git a/libParse/parse_novel.cpp b/libParse/parse_novel.cpp index 4ef354e..c4b8e08 100644 --- a/libParse/parse_novel.cpp +++ b/libParse/parse_novel.cpp @@ -393,11 +393,14 @@ std::shared_ptr FragmentLayerCheck::_sets_fill(std::shared_ptrappendNext(*nitr); - if (list.size()) + if (list.size()) { + for (auto nitr = ++list.begin(); nitr != list.end(); nitr++) { + auto prev = *(nitr - 1); + prev->appendNext(*nitr); + } this->_story_start << list.first(); + } } break; default: @@ -427,7 +430,6 @@ void FragmentLayerCheck::node_relayer(std::shared_ptr node, int cu for (auto nis : node->referNodes()) node_relayer(nis, curr_num + 1); } - qDebug() << node->bind()->element()->signature() << node->layerNumber(); } @@ -455,15 +457,16 @@ void FragmentLayerCheck::story_layer_check(std::shared_ptr ins) { return ins->element()->typeMark() == (int) NovelNode::FragmentSlice; }); - for (auto curr = ++real_elms.begin(); curr != real_elms.end(); ++curr) { - auto prev_it = curr - 1; - auto curr_it = curr; - for (; curr_it != real_elms.end(); ++curr_it) { - auto curr_sign = (*curr_it)->element()->signature(); - auto prev_sign = (*prev_it)->element()->signature(); - sibling_element_compair(story_nm, _node_set[prev_sign], _node_set[curr_sign]); + if (real_elms.size()) + for (auto curr = ++real_elms.begin(); curr != real_elms.end(); ++curr) { + auto prev_it = curr - 1; + auto curr_it = curr; + for (; curr_it != real_elms.end(); ++curr_it) { + auto curr_sign = (*curr_it)->element()->signature(); + auto prev_sign = (*prev_it)->element()->signature(); + sibling_element_compair(story_nm, _node_set[prev_sign], _node_set[curr_sign]); + } } - } } void FragmentLayerCheck::sibling_element_compair(const QString& story, std::shared_ptr prev, std::shared_ptr curr) { @@ -479,8 +482,8 @@ void FragmentLayerCheck::sibling_element_compair(const QString& story, std::shar if (!curr_childs.size() || !prev_childs.size()) return; - auto max_e0 = *std::max_element(prev_childs.begin(), prev_childs.end(), - [](std::shared_ptr a, std::shared_ptr b){ + auto max_e0 = *std::max_element(prev_childs.begin(), prev_childs.end(), + [](std::shared_ptr a, std::shared_ptr b) { return a->layerNumber() < b->layerNumber(); }); auto min_e1 = *std::min_element(curr_childs.begin(), curr_childs.end(),