Coverage for src/wiktextract/extractor/fr/descendant.py: 87%

38 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-17 05:52 +0000

1from wikitextprocessor import LevelNode, NodeKind, TemplateNode, WikiNode 

2 

3from ...page import clean_node 

4from ...wxr_context import WiktextractContext 

5from .models import Descendant, Linkage, WordEntry 

6 

7 

8def extract_desc_section( 

9 wxr: WiktextractContext, word_entry: WordEntry, level_node: LevelNode 

10): 

11 desc_list = [] 

12 for list_node in level_node.find_child(NodeKind.LIST): 

13 for list_item in list_node.find_child(NodeKind.LIST_ITEM): 

14 desc_list.extend(extract_desc_list_item(wxr, list_item, [])) 

15 word_entry.descendants.extend(desc_list) 

16 

17 

18def extract_desc_list_item( 

19 wxr: WiktextractContext, list_item: WikiNode, parent_data: list[Descendant] 

20) -> list[Descendant]: 

21 lang_code = "unknown" 

22 lang_name = "unknown" 

23 desc_list = [] 

24 for node in list_item.children: 

25 if isinstance(node, TemplateNode) and node.template_name == "L": 

26 lang_code = node.template_parameters.get(1) 

27 lang_name = clean_node(wxr, None, node) 

28 elif isinstance(node, WikiNode) and node.kind == NodeKind.LINK: 

29 word = clean_node(wxr, None, node) 

30 if word != "": 30 ↛ 24line 30 didn't jump to line 24 because the condition on line 30 was always true

31 desc_list.append( 

32 Descendant(lang_code=lang_code, lang=lang_name, word=word) 

33 ) 

34 elif isinstance(node, TemplateNode) and node.template_name in [ 

35 "l", 

36 "lien", 

37 "zh-lien", 

38 "zh-lien-t", 

39 ]: 

40 from .linkage import process_linkage_template 

41 

42 l_data = Linkage(word="") 

43 process_linkage_template(wxr, node, l_data) 

44 desc_list.append( 

45 Descendant( 

46 lang=lang_name, 

47 lang_code=lang_code, 

48 word=l_data.word, 

49 roman=l_data.roman, 

50 ruby=l_data.ruby, 

51 tags=l_data.tags, 

52 raw_tags=l_data.raw_tags, 

53 ) 

54 ) 

55 elif isinstance(node, TemplateNode) and node.template_name == "zh-l": 55 ↛ 56line 55 didn't jump to line 56 because the condition on line 55 was never true

56 from .linkage import extract_zh_l_template 

57 

58 l_list = extract_zh_l_template(wxr, node) 

59 for l_data in l_list: 

60 desc_list.append( 

61 Descendant( 

62 lang=lang_name, 

63 lang_code=lang_code, 

64 word=l_data.word, 

65 roman=l_data.roman, 

66 tags=l_data.tags, 

67 raw_tags=l_data.raw_tags, 

68 ) 

69 ) 

70 elif isinstance(node, WikiNode) and node.kind == NodeKind.LIST: 

71 for child_list_item in node.find_child(NodeKind.LIST_ITEM): 

72 extract_desc_list_item(wxr, child_list_item, desc_list) 

73 

74 for p_desc in parent_data: 

75 p_desc.descendants.extend(desc_list) 

76 return desc_list