From 5314985b7b570e14afed2168d9651cc3ec91e05c Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Mon, 29 Jul 2024 12:01:14 +0800 Subject: [PATCH] 'save-at:1722225674.8203943' --- .idea/workspace.xml | 90 ++++++++++++++++++--- manage/NovelManage.py | 6 +- parse/StoryMap.py | 10 +-- parse/StorylineCmp.py | 50 ++++++++++-- parse/__pycache__/StoryMap.cpython-312.pyc | Bin 6516 -> 7756 bytes 5 files changed, 128 insertions(+), 28 deletions(-) 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 fa229177ecdc447102027ae80da9b8b8f864edfe..376af5411c922cd0e069783861d4c40df6b345eb 100644 GIT binary patch delta 3111 zcmZ`*eQZ=&6~Axhy_q-DH=l1hola>xEp*#g3Y6t@S!fn0tU$LR3oN^I$v7~t?UZ)f z-1l&WOf73_EQ(V0M!`f)5#tU)O^F)Nf5gNXj7Aw)oyjvMn{^k(n9YNdY@%`XoI4*1 z$=K?oaOcr zpM$(e((YN3majP~GC!AjK<2H<0_i$k(*2DvB(3OfJ*fMK9oQNc)4o~pNa&QH`7iux z&xK|WTjLlI<+MJ`-gLAHW9*9KMC26F9D^3o+?GFMB%v>p)!7{05)FNPnAX9{Q~_e3qKQO;{X|&He(Y?I$tZjQ$Qe>|^n8(=zOESduX{o-rvO=Acm!(pEMl zJuk%A_odbV9&k`|?52JkF0&D#V?;bQIXP}Q4U^Isj&DKI4&*AKIG#2jK~Hev2F6$g zWR^U1cqQLL#3oQJ9$3Q4jyXW2E)l3~8TkW`k*AF;SnjRjlvyfc`vVrJP7Dc zU9LpGBdtL62h%=XPWzwe5z_&l7eOubqnWx*g0PX@P-gvf9cZFSW!r3J1HO(HJjdyV zSGONHnB1SDhJFwNY;`i3$!5%Caw9wM`@D;vD9#%EKbSeW4~BaoC3yMUS8sf9{_FS8 zp1J?cv-iLDh4+8<<K&eobwwjh$523h%MYYJ43kXGv5a)+xpFX9G<9&8D(&mk?D8_pV@t%1%`*q}p z!B!GzywrcspRg0egNX9Q`Ugo5T8Et21e*xwh5!!4L9XR#1%Y@~1&A#XTbi4`hT0rK z!jHoJg<#2JfxZr0)n8@3+3%yDc8!79$g&L$$#s~_J`#vsT7S>qYWuk!I32xtymH?F zONazNI&kS_)+RMEpCT*$;NwwSu*IMtS1tR=zUZ5D3iRauxAO zSinGRft#ql>Eh7~M_KX_5j@Y$?Sf+$6|JCX`HsctAC%3u6U6UU0TUy}^737b>yQW2uy4ahl z8jy01oQUu-?aH|z%)yW$sT$_f?wm8{9`k}UGBbuz{Z!csZ4Ws>pe4gB0S1Q1k)B zMh)p{Euza93|=F&2M5XJnC1|00;NeHXmo%R3}vhoGerSzlKtEuR-n=xrl}E*KX~C+ zz^;7XS+P%Y?deW76Nz#kJ>l}xu!J!U1U(fm)^`-@;o@01cBfu@L}X709Hz#KYG*<1 z%nNtb?ozC|7}E+dZC?6+wiVo2XziU>O6{wQ?K=zYJ8$i}*S>c?P};tGK2Qwy6oNhZ zL&cd@+Y0an`zn`N2zIc;)zBZ*!k>JZq2uWeBp3!98EGGImb-$+bSKLDk#JZULJo6> zVwliTB-@|51D{7Bk`3@1SAfhC+aZ_V9Z=a3uN1v>aAEm3Uc)y@)Q+)Dv9_5o+>2c{ zfojpbk-MH-Le}o`;B{#esBZTEeBh@8OUT+$CoE^?cP_^AFBLksED>niUU=Z-NBMK- zR{w4F_UP^ALjU3NyC+H{Px*31%_`ZzlZ(bda9mgov|4I8u@NK}Nrp@dIgEb*QGf@4 zg&bsnCo+T4dQKG~X$}xN0u6Zj@i=r+16q~{cj0F&3AQoJ>cg^}^Wj>~C&%HQd=|2j zz5!F_;5QK3Aad$_XZlN_rbqZbo0Cdy&&-K)hl;-D0(^1{Jcm?U!e^X|D8V!P_~EoL zn~x=gK6X8}dlNzh_e1&hg3CYkT=}QGbz(Aoa$N7DpMzd}Q5i>=*0^l9D){F2JSI?m x)Kf1+9ugoQ_3jr0&qIRL9(G7VaAAF3zT9UMU>DOj*WHqDZYykrY0&2C{1-*3@c#e+ delta 2147 zcmZWqTTfh76yE1HGt7NB!%!{*L(A<{p|y~rwUnwH?ocN#lc|Pty)b6B93M?HL-ylgzi)UVH7e z*Iu{z?%?LWmfJp`o4_~x`{!fvAR)iuV(U{%OyT3DmcgpBYf^EY@QI|Kq?`*R9N^CBWY$cnn2N*CTySyAf=TItGMQ5-^)#!bI_Q|o-h=o2w>QhO2)|NBLDPy!03(z72-NJR@Ji8*CZ5StWL`VDln&Sp$avSrhl9HZ4>h}Hm@cuOo6qm@9}nz(aE z0HrSjTqL==*44&4(LI;spIp`Kq1Y0RpG3Ys*Sed_axO28u&6ZUYJvk0+-7!JIxN(( zbtxu9*kkF9n%%e|+KM?nnYJib6KOLDX&Xz)FA6cXBG=DjY~q^ON293jqJC6BPbgFn zvE`9$cG8wii_#VpK8vsyp#p(N79T*Xwg3&7Z2$}8k?2u;E1h`)WX&uf$ybXYQVRq~ z-X$sl-^$P?E{dkAn6A7f)Ua=r&x9(LbkwzThk3j(Go^5GUoM1(tSp^9k(_SV^>ij} z>3TD}?&yH$KXB9w!%T3VYUCN)_!~Y=qA#G2I}sWHv{Ez|bS zfc+&!nC^PFntF-{xP?08rD7;+*b~?B`F(h}4*)W!R$e`_bmTEn%0icVa)I*uf!KN= zwi3D<*p*Ww_tnOAwQ=ROb+u)+^RBulS5tTScrF;ud4qWm9Lal0Fw7l@|1TL7uPLU1 zNBa;iy8#m0lhKJg2$=O!GV-FL_?CwX1W4X5DZbUV0s)eDJC*RNnkPWkqMJyH0l@R4 zOQ8y3h3$2JD$jZ}?+wM%B?w2@A@4%Sb|iU|YDzH@z3c~XQymt`h04?2L&N&XBsGm; zD4(b4ImF6+?|XR7V01?X*5C=V8@?;uaVS$vChrVQrq~5`c-*jFnlz@2jAb639ZrtN zp;_q(-15R!w`I}v$c$xxelxr8ZxW8PKmGNNeo!!vu|TMr9S(Gq@$0aFSiL9076ZAX zgRtNiK}%+-r8)R@bO^=62>5baN@pzE1>DvH(FQ$*aDaUo)P+}>J2d0x<`3Wj0R{;^ z$aNPc+*L9svc1kQn^!$m_pGNAW=={8TT_+ZWDhE$EKn%Z7IjO zFBiNxC)-MM(w1?hIq3-AIf}p?=4ruV=IN&faR2p=-HE*Im;|vo#`ah0^LY;m>{#yn z*Q zUBzh!Bp-Gtk>%l)T_2q(5Mc8`maA!aJ_L=}nkPWktgq+3nkyiiZ+0r}t8Lhm?KgXG z4SX|zec4{@OT0u2v4Lnz=wnmSzJ1&$tXY2lHpl*O9h}OhW+sipbOu!L&)4i>52Lkv nWFfTJxk-R*`on^6@z^E-@}xa1gdYJHe$w70v_B>Q{N8^6pTqII