Skip to content

Commit 0a198a9

Browse files
authored
Merge pull request #401 from tatuylonen/list-check-functions
Create utility functions to check for lists and list items
2 parents f26afeb + 9ad3bda commit 0a198a9

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

src/wikitextprocessor/parser.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2496,3 +2496,19 @@ def print_tree(
24962496
else:
24972497
print("\n".join(parts))
24982498
return None
2499+
2500+
2501+
def is_list(node: WikiNode) -> bool:
2502+
return (
2503+
isinstance(node, WikiNode)
2504+
and node.kind == NodeKind.LIST
2505+
or (isinstance(node, HTMLNode) and node.tag in ("ul", "ol"))
2506+
)
2507+
2508+
2509+
def is_list_item(node: WikiNode) -> bool:
2510+
return (
2511+
isinstance(node, WikiNode)
2512+
and node.kind == NodeKind.LIST_ITEM
2513+
or (isinstance(node, HTMLNode) and node.tag == "li")
2514+
)

tests/test_parser.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
NodeKind,
1212
TemplateNode,
1313
WikiNode,
14+
is_list,
15+
is_list_item,
1416
print_tree,
1517
)
1618

@@ -3279,6 +3281,76 @@ def test_pipe_in_external_link(self):
32793281
],
32803282
)
32813283

3284+
def test_is_list_fn(self):
3285+
self.ctx.start_page("test")
3286+
root = self.ctx.parse(
3287+
"""* test
3288+
** test2
3289+
"""
3290+
)
3291+
self.assertFalse(is_list(root))
3292+
main_list = root.children[0]
3293+
self.assertTrue(is_list(main_list))
3294+
item1 = main_list.children[0]
3295+
test_text = item1.children[0]
3296+
test2_list = item1.children[1]
3297+
self.assertFalse(is_list(item1))
3298+
self.assertFalse(is_list(test_text))
3299+
self.assertTrue(is_list(test2_list))
3300+
3301+
def test_is_list_fn_2(self):
3302+
self.ctx.start_page("test")
3303+
root = self.ctx.parse(
3304+
"""<ul><li>test<ul><li>test2</li></ul></ul>
3305+
"""
3306+
)
3307+
self.assertFalse(is_list(root))
3308+
main_list = root.children[0]
3309+
self.assertTrue(is_list(main_list))
3310+
item1 = main_list.children[0]
3311+
test_text = item1.children[0]
3312+
test2_list = item1.children[1]
3313+
self.assertFalse(is_list(item1))
3314+
self.assertFalse(is_list(test_text))
3315+
self.assertTrue(is_list(test2_list))
3316+
3317+
def test_is_list_item_fn(self):
3318+
self.ctx.start_page("test")
3319+
root = self.ctx.parse(
3320+
"""* test
3321+
** test2
3322+
"""
3323+
)
3324+
self.assertFalse(is_list_item(root))
3325+
main_list = root.children[0]
3326+
self.assertFalse(is_list_item(main_list))
3327+
item1 = main_list.children[0]
3328+
test_text = item1.children[0]
3329+
test2_list = item1.children[1]
3330+
self.assertTrue(is_list_item(item1))
3331+
self.assertFalse(is_list_item(test_text))
3332+
self.assertFalse(is_list_item(test2_list))
3333+
item2 = test2_list.children[0]
3334+
self.assertTrue(is_list_item(item2))
3335+
3336+
def test_is_list_item_fn_2(self):
3337+
self.ctx.start_page("test")
3338+
root = self.ctx.parse(
3339+
"""<ul><li>test<ul><li>test2</li></ul></ul>
3340+
"""
3341+
)
3342+
self.assertFalse(is_list_item(root))
3343+
main_list = root.children[0]
3344+
self.assertFalse(is_list_item(main_list))
3345+
item1 = main_list.children[0]
3346+
test_text = item1.children[0]
3347+
test2_list = item1.children[1]
3348+
self.assertTrue(is_list_item(item1))
3349+
self.assertFalse(is_list_item(test_text))
3350+
self.assertFalse(is_list_item(test2_list))
3351+
item2 = test2_list.children[0]
3352+
self.assertTrue(is_list_item(item2))
3353+
32823354

32833355
# XXX implement <nowiki/> marking for links, templates
32843356
# - https://en.wikipedia.org/wiki/Help:Wikitext#Nowiki

0 commit comments

Comments
 (0)