From c58b022b21b5735268f0d085a9190d06a8c05662 Mon Sep 17 00:00:00 2001
From: codeboss <2422523675@qq.com>
Date: Sat, 17 May 2025 22:40:43 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A9=BAstory=E5=B4=A9?=
=?UTF-8?q?=E6=BA=83=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
WsNovelParser/WsNovelParser.vcxproj.user | 2 +-
libParse/parse_novel.cpp | 31 +++++++++++++-----------
2 files changed, 18 insertions(+), 15 deletions(-)
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(),