danoan.correct_markdown.core.string_view module

class danoan.correct_markdown.core.string_view.StringView(segments: Dict[str, List[str]])[source]

Bases: object

Data structure that partitionates a string in several segments that can be edited separately and joined altogether.

Segments are grouped into views and represent a semantic unit in the string. An html document might have the markuo view containing the tag elements and the text view containing the plain-text content of the document.

StringView manages a list of ViewSegmentItem (index). Each ViewSegmentItem describes a segment of one of the managed views.

Below, an example of the index:
[

ViewSegmentItem(view_name=’text’, master_index=0, segment_index=0) ViewSegmentItem(view_name=’markup’, master_index=1, segment_index=0) ViewSegmentItem(view_name=’text’, master_index=2, segment_index=0) ViewSegmentItem(view_name=’markup’, master_index=3, segment_index=3) ViewSegmentItem(view_name=’text’, master_index=4, segment_index=29) ViewSegmentItem(view_name=’markup’, master_index=5, segment_index=3) ViewSegmentItem(view_name=’text’, master_index=6, segment_index=29)

]

The index allows us to update both markup and text views independently. It is guaranteed that when “get_content” is called, both updated views will be correctly aligned.

>>> segments = {
...  "text": ["","October journal","\n\n","October first","\n\n", "Today it rained."],
...  "markup": ["<h1>","</h1>","<h2>","</h2>","",""]
... }
>>> SV = StringView(segments)
>>> SV["text"]
'October journal\n\nOctober first\n\nToday it rained.'
>>> SV["markup"]
'<h1></h1><h2></h2>'
>>> SV.get_content()
'<h1>October journal</h1>\n\n<h2>October first</h2>\n\nToday it rained.'
>>> s = SV["text"].find("October first")
>>> SV["text"] = s, "Monday, October first\n\nToday was sunny!"
>>> SV["text"]
'October journal\n\nMonday, October first\n\nToday was sunny!'
>>> SV.get_content()
'<h1>October journal</h1>\n\n<h2>Monday, October first</h2>\n\nToday was sunny!'
Parameters:

segments (Dict[str, List[str]])

class ViewSegmentItem(view_name: Any, master_index: int, segment_index: int)[source]

Bases: object

Parameters:
  • view_name (Any)

  • master_index (int)

  • segment_index (int)

master_index: int
segment_index: int
view_name: Any
get_content()[source]
get_mindex(seg_index: int, view_name: str) int[source]
Parameters:
  • seg_index (int)

  • view_name (str)

Return type:

int

remove(*m_indexes)[source]