Skip to content

Commit fde949a

Browse files
committed
Fixed issue with multiple nested separted lists
1 parent 1bd667e commit fde949a

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

Diff for: pydocx/export/numbering_span.py

+41-2
Original file line numberDiff line numberDiff line change
@@ -416,9 +416,8 @@ def handle_start_new_item(self, index, paragraph):
416416
else:
417417
level_id = int(level.level_id)
418418
current_level_id = int(self.current_span.numbering_level.level_id)
419-
if level_id > current_level_id or self.inside_parent_span(paragraph):
419+
if level_id > current_level_id:
420420
# Add a new span + item to hold this new level
421-
422421
next_numbering_span = NumberingSpan(
423422
numbering_level=level,
424423
numbering_definition=num_def,
@@ -428,6 +427,7 @@ def handle_start_new_item(self, index, paragraph):
428427
next_numbering_item = NumberingItem(
429428
numbering_span=next_numbering_span,
430429
)
430+
431431
next_numbering_span.children.append(next_numbering_item)
432432
self.current_item.append_child(next_numbering_span)
433433
self.current_span = next_numbering_span
@@ -462,6 +462,28 @@ def handle_start_new_item(self, index, paragraph):
462462
)
463463
self.current_item_index = index
464464
self.current_span.append_child(self.current_item)
465+
elif self.inside_parent_span(paragraph):
466+
parent_span = self.find_parent_numbering_span(paragraph)
467+
parent_span_last_item = parent_span.children[-1]
468+
469+
next_numbering_span = NumberingSpan(
470+
numbering_level=level,
471+
numbering_definition=num_def,
472+
parent=parent_span,
473+
)
474+
475+
self.numbering_span_stack.append(next_numbering_span)
476+
next_numbering_item = NumberingItem(
477+
numbering_span=next_numbering_span,
478+
)
479+
480+
next_numbering_span.children.append(next_numbering_item)
481+
# add this span to the parent list, which mean that parent list may be a different list
482+
parent_span_last_item.append_child(next_numbering_span)
483+
484+
self.current_span = next_numbering_span
485+
self.current_item = next_numbering_item
486+
self.current_item_index = index
465487

466488
def find_previous_numbering_span_with_lower_level(self, level_id):
467489
previous_span = None
@@ -484,6 +506,23 @@ def find_previous_numbering_span_by_num_def(self, paragraph):
484506
self.numbering_span_stack.pop()
485507
return previous_span
486508

509+
def find_parent_numbering_span(self, paragraph):
510+
previous_span = None
511+
512+
num_id = paragraph.numbering_definition.abstract_num_id
513+
parent_id = self.child_parent_num_map.get(num_id, None)
514+
if not parent_id:
515+
return previous_span
516+
517+
while self.numbering_span_stack:
518+
previous_span = self.numbering_span_stack[-1]
519+
if previous_span.numbering_definition.abstract_num_id == parent_id:
520+
# we found the parent span of the paragraph item
521+
break
522+
self.numbering_span_stack.pop()
523+
524+
return previous_span
525+
487526
def handle_paragraph(self, index, paragraph):
488527
level = self.get_numbering_level(paragraph)
489528
num_def = None

Diff for: tests/fixtures/nested_lists_different_num_ids.docx

3.11 KB
Binary file not shown.

Diff for: tests/fixtures/nested_lists_different_num_ids.html

+9
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@
66
<li style="margin-left:1.50em">BBB1</li>
77
<li style="margin-left:1.50em">CCC1</li>
88
</ul>
9+
<ul>
10+
<li style="margin-left:3.00em">CCC11</li>
11+
<li style="margin-left:3.00em">CCC12
12+
<ul>
13+
<li style="margin-left:3.00em">CCC121</li>
14+
<li style="margin-left:3.00em">CCC122</li>
15+
</ul>
16+
</li>
17+
</ul>
918
</li>
1019
<li>three
1120
<ul>

0 commit comments

Comments
 (0)