diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index b7fe87f..34bddbc 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,12 +5,10 @@
-
-
-
-
-
+
+
+
@@ -40,18 +38,22 @@
-
-
+
+
@@ -60,12 +62,34 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -95,6 +119,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -117,10 +163,19 @@
+
+
+
+
+
+
+
+
+
-
+
@@ -143,4 +198,15 @@
+
+
+
+
+ file://$PROJECT_DIR$/manage/NovelManage.py
+ 25
+
+
+
+
+
\ No newline at end of file
diff --git a/manage/NovelManage.py b/manage/NovelManage.py
index 08ffa99..7f79613 100644
--- a/manage/NovelManage.py
+++ b/manage/NovelManage.py
@@ -13,15 +13,17 @@ def git_save(target_dir: str):
files_path:List[str] = []
for o in outlist:
modified_flag = r"\tmodified:"
+ new_flag = r"\tnew file:"
if o.startswith(modified_flag):
has_changed = True
files_path.append(o[len(modified_flag):])
- elif o.startswith(r"\tnew file:"):
+ elif o.startswith(new_flag):
has_changed = True
+ files_path.append(o[len(new_flag):])
if has_changed:
- xsub.run("git add .", shell=True)
+ xsub.run(f"git add {" ".join(files_path)}", shell=True)
xsub.run(f"git commit -m 'save-at:{time.time()}'")
diff --git a/parse/StoryMap.py b/parse/StoryMap.py
index 7441793..72d4beb 100644
--- a/parse/StoryMap.py
+++ b/parse/StoryMap.py
@@ -4,24 +4,17 @@ from enum import Enum
from frame.ReferView import EmptyNode, MemoryNode
-class ModifyReason(Enum):
- Removed = 0,
- Append = 1,
- Changed = 2,
- Nothing = 4,
-
-
class FragmentSlice(EmptyNode):
def __init__(self, def_mark: bool = False, name: str= ""):
self.is_define_node = (def_mark, name)
self.story_refer = ""
self.fragm_refer = ""
+ self.fragm_sort_i = 0
self.prev_node: 'FragmentSlice' = None # 上游节点
self.next_node: 'FragmentSlice' = None # 下游节点
self.refers_slice: Dict[str, 'FragmentSlice'] = {} # 引用切面
- self.changed_prev_nodes: List[Tuple[ModifyReason, 'FragmentSlice']] = [] # 变更的上游节点
self.text_sections: List[str] = [] # 文本段落
pass
@@ -45,6 +38,7 @@ class StoryMap:
def append_fragment_slice(self, node: FragmentSlice):
self.slice_list[-1].next_node = node
node.prev_node = self.slice_list[-1]
+ node.fragm_sort_i = len(self.slice_list)
self.slice_list.append(node)
pass
diff --git a/parse/StorylineCmp.py b/parse/StorylineCmp.py
index 5c6e2ab..b1360d0 100644
--- a/parse/StorylineCmp.py
+++ b/parse/StorylineCmp.py
@@ -1,12 +1,20 @@
-from parse.StoryMap import StoryMap, ModifyReason, FragmentSlice
+from parse.StoryMap import StoryMap, FragmentSlice
+from enum import Enum
from typing import Dict, List
+class ModifyReason(Enum):
+ Removed = 0,
+ Append = 1,
+ Changed = 2,
+ Nothing = 4,
+
+
class CmpTool:
def __init__(self):
pass
- def graph_compare(self, graph_new: Dict[str, StoryMap], graph_old: Dict[str, StoryMap]):
+ def graph_compare(self, graph_new: Dict[str, StoryMap], graph_old: Dict[str, StoryMap]) -> Dict[ModifyReason, FragmentSlice]:
fragments_has_removed = []
for story in graph_old.values():
fragments_has_removed = fragments_has_removed + self.__event_remove_check(graph_new, story)
@@ -17,10 +25,16 @@ class CmpTool:
fragments_has_appended = fragments_has_appended + self.__event_append_check(graph_old, story)
pass
+ fragments_has_changed = []
+ for story in graph_new.values():
+ fragments_has_changed = fragments_has_changed + self.__event_changed_check(graph_old, story)
+ pass
-
-
- pass
+ return {
+ ModifyReason.Removed: fragments_has_removed,
+ ModifyReason.Append: fragments_has_appended,
+ ModifyReason.Changed: fragments_has_changed,
+ }
def __event_remove_check(self, graph_new: Dict[str, StoryMap], story_old: StoryMap) -> List[FragmentSlice]:
list_retv = []
@@ -50,4 +64,28 @@ class CmpTool:
pass
return list_retv
- def __event_changed_check(self,):
\ No newline at end of file
+ def __event_changed_check(self, graph_old: Dict[str, StoryMap], story_new: StoryMap) -> List[FragmentSlice]:
+ story_old = graph_old[story_new.story_name]
+ if story_old is not None:
+ return self.__event_changed_chack_for(story_old, story_new)
+ return []
+
+ def __event_changed_chack_for(self, story_old: StoryMap, story_new: StoryMap) -> List[FragmentSlice]:
+ list_retv = []
+ for fragm_curr in story_new.slice_list[1:]:
+ if fragm_curr.is_define_node[0]:
+ fragm_prev = story_old.get_fragment_defined(fragm_curr.is_define_node[1])
+ if fragm_prev is not None:
+ if fragm_curr.fragm_sort_i != fragm_prev.fragm_sort_i:
+ list_retv.append(fragm_curr)
+ pass
+
+ if len(fragm_curr.text_sections) != len(fragm_prev.text_sections):
+ list_retv.append(fragm_curr)
+ elif fragm_curr.text_sections != fragm_prev.text_sections:
+ list_retv.append(fragm_curr)
+ pass
+ pass
+ pass
+ pass
+ return list_retv
\ No newline at end of file
diff --git a/parse/__pycache__/StoryMap.cpython-312.pyc b/parse/__pycache__/StoryMap.cpython-312.pyc
index fa22917..376af54 100644
Binary files a/parse/__pycache__/StoryMap.cpython-312.pyc and b/parse/__pycache__/StoryMap.cpython-312.pyc differ