update
This commit is contained in:
parent
239b9a15bb
commit
bb8e507d26
|
@ -5,10 +5,8 @@
|
|||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="f609c0f2-cd0d-4eea-87f1-8caf02d3f04f" name="Changes" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/profiles_settings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/profiles_settings.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/entry.py" beforeDir="false" afterPath="$PROJECT_DIR$/entry.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/frame/CompareViews.py" beforeDir="false" afterPath="$PROJECT_DIR$/frame/CompareViews.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/parse/StoryMap.py" beforeDir="false" afterPath="$PROJECT_DIR$/parse/StoryMap.py" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
@ -25,6 +23,9 @@
|
|||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="ProblemsViewState">
|
||||
<option name="selectedTabId" value="CurrentFile" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 1
|
||||
}</component>
|
||||
|
|
|
@ -1,18 +1,228 @@
|
|||
import xml.dom.minidom as mdom
|
||||
from typing import List, Tuple, Dict
|
||||
from abc import abstractmethod
|
||||
from enum import Enum
|
||||
from frame.ReferView import EmptyNode
|
||||
|
||||
|
||||
class SliceType(Enum):
|
||||
StoryDefine = 0,
|
||||
TextParagraph = 1,
|
||||
FragmentDefine = 2,
|
||||
FragmentRefer = 3,
|
||||
VolumeDefine = 4,
|
||||
ArticleDefine = 5,
|
||||
|
||||
|
||||
class ElementSlice:
|
||||
@abstractmethod
|
||||
def type(self) -> SliceType:
|
||||
raise NotImplementedError("type")
|
||||
|
||||
@abstractmethod
|
||||
def parent_slice(self) -> 'ElementSlice' | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
def set_prev(self, inst: 'ElementSlice' | None):
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
def prev_sibling(self) -> 'ElementSlice' | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
def set_next(self, inst: 'ElementSlice' | None):
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
def next_sibling(self) -> 'ElementSlice' | None:
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
def index(self) -> int:
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class Collection:
|
||||
@abstractmethod
|
||||
def children(self) -> List[ElementSlice]:
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class SiblingsImpl(ElementSlice):
|
||||
def __init__(self):
|
||||
self.__prev_sib: 'StoryDefine' | None = None
|
||||
self.__next_sib: 'StoryDefine' | None = None
|
||||
pass
|
||||
|
||||
def parent_slice(self) -> 'ElementSlice' | None:
|
||||
pass
|
||||
|
||||
def set_prev(self, inst: 'ElementSlice' | None):
|
||||
pass
|
||||
|
||||
def prev_sibling(self) -> 'ElementSlice' | None:
|
||||
pass
|
||||
|
||||
def set_next(self, inst: 'ElementSlice' | None):
|
||||
pass
|
||||
|
||||
def next_sibling(self) -> 'ElementSlice' | None:
|
||||
pass
|
||||
|
||||
def index(self) -> int:
|
||||
pass
|
||||
|
||||
|
||||
class StoryDefine(ElementSlice, Collection):
|
||||
def __init__(self, nm: str, idx: int):
|
||||
self.__index = idx
|
||||
self.__name = nm
|
||||
self.__prev_sib: 'StoryDefine' | None = None
|
||||
self.__next_sib: 'StoryDefine' | None = None
|
||||
self.__children: List[ElementSlice] = []
|
||||
pass
|
||||
|
||||
def type(self) -> SliceType:
|
||||
return SliceType.StoryDefine
|
||||
|
||||
def parent_slice(self) -> 'ElementSlice' | None:
|
||||
return None
|
||||
|
||||
def set_prev(self, inst: 'ElementSlice' | None):
|
||||
self.__prev_sib = inst
|
||||
pass
|
||||
|
||||
def prev_sibling(self) -> 'ElementSlice' | None:
|
||||
return self.__prev_sib
|
||||
pass
|
||||
|
||||
def set_next(self, inst: 'ElementSlice' | None):
|
||||
self.__next_sib = inst
|
||||
pass
|
||||
|
||||
def next_sibling(self) -> 'ElementSlice' | None:
|
||||
return self.__next_sib
|
||||
pass
|
||||
|
||||
def index(self) -> int:
|
||||
return self.__index
|
||||
pass
|
||||
|
||||
def children(self) -> List[ElementSlice]:
|
||||
return self.__children
|
||||
|
||||
def name(self) -> str:
|
||||
return self.__name
|
||||
|
||||
|
||||
def calc_index(inst: ElementSlice) -> int:
|
||||
temp_refer = inst.prev_sibling()
|
||||
index_v = 0
|
||||
while temp_refer is not None:
|
||||
index_v += 1
|
||||
temp_refer = temp_refer.prev_sibling()
|
||||
pass
|
||||
|
||||
return index_v
|
||||
|
||||
|
||||
class TextParagraph(ElementSlice):
|
||||
def __init__(self, parent: ElementSlice):
|
||||
self.__parent_node = parent
|
||||
self.__prev_node: ElementSlice | None = None
|
||||
self.__next_node: ElementSlice | None = None
|
||||
self.__text_lines: List[str] = []
|
||||
pass
|
||||
|
||||
def type(self) -> SliceType:
|
||||
return SliceType.TextParagraph
|
||||
|
||||
def parent_slice(self) -> 'ElementSlice' | None:
|
||||
return self.__parent_node
|
||||
|
||||
def set_prev(self, inst: 'ElementSlice' | None):
|
||||
self.__prev_node = inst
|
||||
pass
|
||||
|
||||
def prev_sibling(self) -> 'ElementSlice' | None:
|
||||
return self.__prev_node
|
||||
|
||||
def set_next(self, inst: 'ElementSlice' | None):
|
||||
self.__next_node = inst
|
||||
inst.set_prev(self)
|
||||
pass
|
||||
|
||||
def next_sibling(self) -> 'ElementSlice' | None:
|
||||
return self.__next_node
|
||||
|
||||
def index(self) -> int:
|
||||
return calc_index(self)
|
||||
|
||||
|
||||
class FragmentDefine(ElementSlice):
|
||||
def __init__(self, nm:str, parent: ElementSlice):
|
||||
self.__name = nm
|
||||
self.__parent_inst = parent
|
||||
self.__prev_node: ElementSlice | None = None
|
||||
self.__next_node: ElementSlice | None = None
|
||||
self.__refer_nodes: List[ElementSlice] = []
|
||||
self.__description: TextParagraph = TextParagraph(self)
|
||||
pass
|
||||
|
||||
def type(self) -> SliceType:
|
||||
return SliceType.FragmentDefine
|
||||
|
||||
def parent_slice(self) -> 'ElementSlice' | None:
|
||||
return self.__parent_inst
|
||||
|
||||
def set_prev(self, inst: 'ElementSlice' | None):
|
||||
self.__prev_node = inst
|
||||
pass
|
||||
|
||||
def prev_sibling(self) -> 'ElementSlice' | None:
|
||||
return self.__prev_node
|
||||
|
||||
def set_next(self, inst: 'ElementSlice' | None):
|
||||
self.__next_node = inst
|
||||
inst.set_prev(self)
|
||||
pass
|
||||
|
||||
def next_sibling(self) -> 'ElementSlice' | None:
|
||||
return self.__next_node
|
||||
|
||||
def index(self) -> int:
|
||||
return calc_index(self)
|
||||
|
||||
def name(self) -> str:
|
||||
return self.__name
|
||||
|
||||
def refer_slices(self) -> List[ElementSlice]:
|
||||
return self.__refer_nodes
|
||||
|
||||
def refer_append(self, e:ElementSlice):
|
||||
return self.__refer_nodes.append(e)
|
||||
|
||||
def text_description(self) -> TextParagraph:
|
||||
return self.__description
|
||||
|
||||
|
||||
class FragmentRefer(ElementSlice):
|
||||
def __init__(self, parent: ElementSlice):
|
||||
|
||||
|
||||
|
||||
class FragmentSlice(EmptyNode):
|
||||
def __init__(self, def_mark: bool = False, name: str= ""):
|
||||
def __init__(self, def_mark: bool = False, name: str = ""):
|
||||
self.is_define_node = (def_mark, name)
|
||||
self.parent_story = ""
|
||||
self.story_refer = ""
|
||||
self.fragm_refer = ""
|
||||
self.fragm_sort_i = 0
|
||||
|
||||
self.prev_node: 'FragmentSlice' = None # 上游节点
|
||||
self.next_node: 'FragmentSlice' = None # 下游节点
|
||||
self.prev_node: 'FragmentSlice' | None = None # 上游节点
|
||||
self.next_node: 'FragmentSlice' | None = None # 下游节点
|
||||
self.refers_slice: Dict[str, 'FragmentSlice'] = {} # 引用切面
|
||||
|
||||
self.text_sections: List[str] = [] # 文本段落
|
||||
|
@ -62,7 +272,7 @@ class StoryMap:
|
|||
self.slice_list.append(node)
|
||||
pass
|
||||
|
||||
def get_fragment_defined(self, name: str) -> FragmentSlice|None:
|
||||
def get_fragment_defined(self, name: str) -> FragmentSlice | None:
|
||||
for fit in self.slice_list:
|
||||
if fit.is_define_node[0]:
|
||||
if fit.is_define_node[1] == name:
|
||||
|
@ -95,7 +305,7 @@ class XAST_ParseTool:
|
|||
pass
|
||||
return values
|
||||
|
||||
def __extract_empty_storymap(self, name: str) -> Tuple[StoryMap, mdom.Element]:
|
||||
def __extract_empty_storymap(self, name: str) -> Tuple[StoryMap, mdom.Element] | None:
|
||||
storys = self.dom_tree.getElementsByTagName("story")
|
||||
for node in storys:
|
||||
if node.getAttribute("name") == name:
|
||||
|
@ -107,7 +317,7 @@ class XAST_ParseTool:
|
|||
|
||||
def __storynode_initfrags(self, node: StoryMap, e: mdom.Element):
|
||||
first_elem: mdom.Element = e.firstChild
|
||||
while first_elem != None:
|
||||
while first_elem is not None:
|
||||
if hasattr(first_elem, "tagName"):
|
||||
dom_tag = first_elem.tagName
|
||||
if first_elem.tagName == "fragment":
|
||||
|
@ -127,7 +337,7 @@ class XAST_ParseTool:
|
|||
|
||||
def __fragmnode_init_desc(self, node: FragmentSlice, e: mdom.Element):
|
||||
node_elem: mdom.Element = e.firstChild
|
||||
while node_elem != None:
|
||||
while node_elem is not None:
|
||||
if hasattr(node_elem, "tagName") and node_elem.tagName == "text-section":
|
||||
line = node_elem.getAttribute("text")
|
||||
node.text_sections.append(line)
|
||||
|
@ -192,7 +402,7 @@ class XAST_ParseTool:
|
|||
|
||||
return values
|
||||
|
||||
def __volume_node_parse(self, vnode: mdom.Element)-> List[ArticleSlice]:
|
||||
def __volume_node_parse(self, vnode: mdom.Element) -> List[ArticleSlice]:
|
||||
retvalues = []
|
||||
|
||||
vname = vnode.getAttribute("name")
|
||||
|
@ -210,6 +420,7 @@ class XAST_ParseTool:
|
|||
pass
|
||||
|
||||
return retvalues
|
||||
|
||||
pass
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue