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 @@ - - - - - + + + - - + + + + + + + + + + + + + + + + + - + @@ -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