diff --git a/WsNovelParser/WsNovelParser.vcxproj.user b/WsNovelParser/WsNovelParser.vcxproj.user
index 6e591db..5716425 100644
--- a/WsNovelParser/WsNovelParser.vcxproj.user
+++ b/WsNovelParser/WsNovelParser.vcxproj.user
@@ -3,7 +3,7 @@
$(SolutionDir)$(Platform)\$(Configuration)\
WindowsLocalDebugger
- --path "D:/Projects/Cpp/WsNovelParser/x64/test_file/" --dest E:\
+ --path "E:\novel-set" --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 1f94721..6909d6b 100644
--- a/libParse/parse_novel.cpp
+++ b/libParse/parse_novel.cpp
@@ -413,9 +413,11 @@ std::shared_ptr FragmentLayerCheck::_sets_fill(std::shared_ptr node) {
auto fragm = std::static_pointer_cast(node->bind()->element());
for (auto node_t : fragm->children()) {
- auto refn = std::static_pointer_cast(node_t);
- auto target_node = _node_set[refn->referSignature()];
- std::const_pointer_cast(node)->appendNext(target_node);
+ auto refn = std::dynamic_pointer_cast(node_t);
+ if(refn){
+ auto target_node = _node_set[refn->referSignature()];
+ std::const_pointer_cast(node)->appendNext(target_node);
+ }
}
}
@@ -440,14 +442,19 @@ void FragmentLayerCheck::layer_check(std::shared_ptr node)
story_layer_check(node);
break;
default:
- layer_check(node);
+ for(auto ins : node->children())
+ layer_check(ins);
break;
}
}
void FragmentLayerCheck::story_layer_check(std::shared_ptr story) {
auto fragms_list = story->children();
- for (auto curr = ++fragms_list.begin(); curr != fragms_list.end(); ++curr) {
+ decltype(fragms_list) real_elms;
+ std::copy_if(fragms_list.begin(), fragms_list.end(), std::back_inserter(real_elms),
+ [](std::shared_ptr ins) { return ins->element()->typeMark() == (int) NovelNode::FragmentSlice; });
+
+ for (auto curr = ++real_elms.begin(); curr != real_elms.end(); ++curr) {
auto prev = curr - 1;
auto curr_sign = (*curr)->element()->signature();
auto prev_sign = (*prev)->element()->signature();
@@ -471,7 +478,7 @@ void FragmentLayerCheck::sibling_element_compair(std::shared_ptr max1) {
decltype(prev_childs) tempx;
std::copy_if(curr_childs.begin(), curr_childs.end(), std::back_inserter(tempx),
[=](std::shared_ptr ins) { return ins->layerNumber() >= min0; });