update
This commit is contained in:
parent
239b9a15bb
commit
bb8e507d26
|
@ -5,10 +5,8 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="f609c0f2-cd0d-4eea-87f1-8caf02d3f04f" name="Changes" comment="">
|
<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$/.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$/parse/StoryMap.py" beforeDir="false" afterPath="$PROJECT_DIR$/parse/StoryMap.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/frame/CompareViews.py" beforeDir="false" afterPath="$PROJECT_DIR$/frame/CompareViews.py" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
@ -25,6 +23,9 @@
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="ProblemsViewState">
|
||||||
|
<option name="selectedTabId" value="CurrentFile" />
|
||||||
|
</component>
|
||||||
<component name="ProjectColorInfo">{
|
<component name="ProjectColorInfo">{
|
||||||
"associatedIndex": 1
|
"associatedIndex": 1
|
||||||
}</component>
|
}</component>
|
||||||
|
|
|
@ -1,21 +1,231 @@
|
||||||
import xml.dom.minidom as mdom
|
import xml.dom.minidom as mdom
|
||||||
from typing import List, Tuple, Dict
|
from typing import List, Tuple, Dict
|
||||||
|
from abc import abstractmethod
|
||||||
|
from enum import Enum
|
||||||
from frame.ReferView import EmptyNode
|
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):
|
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.is_define_node = (def_mark, name)
|
||||||
self.parent_story = ""
|
self.parent_story = ""
|
||||||
self.story_refer = ""
|
self.story_refer = ""
|
||||||
self.fragm_refer = ""
|
self.fragm_refer = ""
|
||||||
self.fragm_sort_i = 0
|
self.fragm_sort_i = 0
|
||||||
|
|
||||||
self.prev_node: 'FragmentSlice' = None # 上游节点
|
self.prev_node: 'FragmentSlice' | None = None # 上游节点
|
||||||
self.next_node: 'FragmentSlice' = None # 下游节点
|
self.next_node: 'FragmentSlice' | None = None # 下游节点
|
||||||
self.refers_slice: Dict[str, 'FragmentSlice'] = {} # 引用切面
|
self.refers_slice: Dict[str, 'FragmentSlice'] = {} # 引用切面
|
||||||
|
|
||||||
self.text_sections: List[str] = [] # 文本段落
|
self.text_sections: List[str] = [] # 文本段落
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_from_memory(self) -> str:
|
def get_from_memory(self) -> str:
|
||||||
|
@ -33,8 +243,8 @@ class ArticleSlice(EmptyNode):
|
||||||
self.volume_blongs = v_name
|
self.volume_blongs = v_name
|
||||||
self.article_fullname = f"{v_name}@{a_name}"
|
self.article_fullname = f"{v_name}@{a_name}"
|
||||||
|
|
||||||
self.refer_target: List[str] = [] # 引用切面
|
self.refer_target: List[str] = [] # 引用切面
|
||||||
self.text_sections: List[str] = [] # 文本段落
|
self.text_sections: List[str] = [] # 文本段落
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_from_memory(self) -> str:
|
def get_from_memory(self) -> str:
|
||||||
|
@ -62,7 +272,7 @@ class StoryMap:
|
||||||
self.slice_list.append(node)
|
self.slice_list.append(node)
|
||||||
pass
|
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:
|
for fit in self.slice_list:
|
||||||
if fit.is_define_node[0]:
|
if fit.is_define_node[0]:
|
||||||
if fit.is_define_node[1] == name:
|
if fit.is_define_node[1] == name:
|
||||||
|
@ -95,7 +305,7 @@ class XAST_ParseTool:
|
||||||
pass
|
pass
|
||||||
return values
|
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")
|
storys = self.dom_tree.getElementsByTagName("story")
|
||||||
for node in storys:
|
for node in storys:
|
||||||
if node.getAttribute("name") == name:
|
if node.getAttribute("name") == name:
|
||||||
|
@ -107,7 +317,7 @@ class XAST_ParseTool:
|
||||||
|
|
||||||
def __storynode_initfrags(self, node: StoryMap, e: mdom.Element):
|
def __storynode_initfrags(self, node: StoryMap, e: mdom.Element):
|
||||||
first_elem: mdom.Element = e.firstChild
|
first_elem: mdom.Element = e.firstChild
|
||||||
while first_elem != None:
|
while first_elem is not None:
|
||||||
if hasattr(first_elem, "tagName"):
|
if hasattr(first_elem, "tagName"):
|
||||||
dom_tag = first_elem.tagName
|
dom_tag = first_elem.tagName
|
||||||
if first_elem.tagName == "fragment":
|
if first_elem.tagName == "fragment":
|
||||||
|
@ -127,7 +337,7 @@ class XAST_ParseTool:
|
||||||
|
|
||||||
def __fragmnode_init_desc(self, node: FragmentSlice, e: mdom.Element):
|
def __fragmnode_init_desc(self, node: FragmentSlice, e: mdom.Element):
|
||||||
node_elem: mdom.Element = e.firstChild
|
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":
|
if hasattr(node_elem, "tagName") and node_elem.tagName == "text-section":
|
||||||
line = node_elem.getAttribute("text")
|
line = node_elem.getAttribute("text")
|
||||||
node.text_sections.append(line)
|
node.text_sections.append(line)
|
||||||
|
@ -192,7 +402,7 @@ class XAST_ParseTool:
|
||||||
|
|
||||||
return values
|
return values
|
||||||
|
|
||||||
def __volume_node_parse(self, vnode: mdom.Element)-> List[ArticleSlice]:
|
def __volume_node_parse(self, vnode: mdom.Element) -> List[ArticleSlice]:
|
||||||
retvalues = []
|
retvalues = []
|
||||||
|
|
||||||
vname = vnode.getAttribute("name")
|
vname = vnode.getAttribute("name")
|
||||||
|
@ -210,6 +420,7 @@ class XAST_ParseTool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return retvalues
|
return retvalues
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue