Fix handling of Headline hierarchy.
This commit is contained in:
parent
eacbcce376
commit
c87a50f365
@ -1476,6 +1476,9 @@ def parse_headline(hl, doc, parent) -> Headline:
|
|||||||
|
|
||||||
contents = parse_contents(hl["contents"])
|
contents = parse_contents(hl["contents"])
|
||||||
|
|
||||||
|
if not (isinstance(parent, OrgDoc) or depth > parent.depth):
|
||||||
|
raise AssertionError("Incorrectly parsed parent on `{}' > `{}'".format(parent.title, title))
|
||||||
|
|
||||||
headline = Headline(
|
headline = Headline(
|
||||||
start_line=hl["linenum"],
|
start_line=hl["linenum"],
|
||||||
depth=depth,
|
depth=depth,
|
||||||
@ -1781,18 +1784,26 @@ class OrgDocReader:
|
|||||||
"list_items": [],
|
"list_items": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
while (depth - 2) > len(self.headline_hierarchy):
|
while (depth - 1) > len(self.headline_hierarchy):
|
||||||
# Introduce structural headlines
|
# Introduce structural headlines
|
||||||
self.headline_hierarchy.append(None)
|
self.headline_hierarchy.append(None)
|
||||||
while depth < len(self.headline_hierarchy):
|
while depth <= len(self.headline_hierarchy):
|
||||||
self.headline_hierarchy.pop()
|
self.headline_hierarchy.pop()
|
||||||
|
|
||||||
if depth == 1:
|
if depth == 1:
|
||||||
self.headlines.append(headline)
|
self.headlines.append(headline)
|
||||||
else:
|
else:
|
||||||
self.headline_hierarchy[-1]["children"].append(headline)
|
parent_idx = len(self.headline_hierarchy) - 1
|
||||||
|
while self.headline_hierarchy[parent_idx] is None:
|
||||||
|
parent_idx -= 1
|
||||||
|
self.headline_hierarchy[parent_idx]["children"].append(headline)
|
||||||
self.headline_hierarchy.append(headline)
|
self.headline_hierarchy.append(headline)
|
||||||
|
|
||||||
|
if all([hl is not None for hl in self.headline_hierarchy]):
|
||||||
|
if not ([ len(hl['orig'].group('stars')) for hl in self.headline_hierarchy ]
|
||||||
|
== list(range(1, len(self.headline_hierarchy) + 1))):
|
||||||
|
raise AssertionError('Error on Headline Hierarchy')
|
||||||
|
|
||||||
def add_list_item_line(self, linenum: int, match: re.Match) -> int:
|
def add_list_item_line(self, linenum: int, match: re.Match) -> int:
|
||||||
li = ListItem(
|
li = ListItem(
|
||||||
linenum,
|
linenum,
|
||||||
|
Loading…
Reference in New Issue
Block a user