Skip to content

Commit 96132c3

Browse files
committed
Python-Markdown の (段落を含むリスト項目) の直後のリストレベルを補正
1 parent 6ae5a11 commit 96132c3

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

fix_display_error.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ def is_item_end_line(line: str) -> bool:
3232
return True
3333
return False
3434

35+
def indent_level(line: str) -> int:
36+
m = re.match(r'^\s+', line)
37+
if m:
38+
return len(m.group(0).replace('\t', ' '))
39+
return 0
40+
3541
class FixDisplayErrorExtension(Extension):
3642

3743
def extendMarkdown(self, md, md_globals):
@@ -50,22 +56,32 @@ def run(self, lines):
5056
new_lines = []
5157

5258
prev_line: str | None = None
59+
prev_line_is_item: bool = False
5360
in_item: bool = False
61+
paragraph_item_indent_level: int = 0
5462
for line in lines:
5563
if prev_line == None:
5664
prev_line = line
5765
new_lines.append(line)
5866
continue
5967

60-
if not is_item_line(prev_line) and not in_item and is_item_line(line):
61-
new_lines.append("")
68+
line_is_item: bool = is_item_line(line)
69+
if line_is_item:
70+
if not (prev_line_is_item or in_item):
71+
new_lines.append("")
72+
elif in_item and indent_level(line) < paragraph_item_indent_level:
73+
new_lines.append("")
74+
75+
if not in_item:
76+
paragraph_item_indent_level = indent_level(line)
6277

63-
if not in_item and is_item_line(line):
6478
in_item = True
65-
if in_item and is_item_end_line(line):
79+
80+
elif in_item and is_item_end_line(line):
6681
in_item = False
6782

6883
prev_line = line
84+
prev_line_is_item = line_is_item
6985
new_lines.append(line)
7086

7187
return new_lines

0 commit comments

Comments
 (0)