Coverage for src / wiktextract / extractor / ru / example.py: 94%

39 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-12 08:09 +0000

1from wikitextprocessor import NodeKind, TemplateNode 

2 

3from ...page import clean_node 

4from ...wxr_context import WiktextractContext 

5from ..share import calculate_bold_offsets 

6from .models import Example, Sense 

7 

8EXAMPLE_TEMPLATES = frozenset(["пример", "english surname example"]) 

9 

10 

11def process_example_template( 

12 wxr: WiktextractContext, 

13 sense: Sense, 

14 template_node: TemplateNode, 

15): 

16 if template_node.template_name == "пример": 

17 process_пример_template(wxr, sense, template_node) 

18 elif template_node.template_name == "english surname example": 18 ↛ exitline 18 didn't return from function 'process_example_template' because the condition on line 18 was always true

19 process_en_surname_example_template(wxr, sense, template_node) 

20 

21 

22def process_пример_template( 

23 wxr: WiktextractContext, 

24 sense: Sense, 

25 template_node: TemplateNode, 

26): 

27 # https://ru.wiktionary.org/wiki/Шаблон:пример 

28 example = Example(text="") 

29 for arg_name, arg_value in template_node.template_parameters.items(): 

30 value = clean_node(wxr, None, arg_value) 

31 if len(value) == 0: 

32 continue 

33 if arg_name == 1: 

34 example.text = value 

35 elif arg_name == "текст": 35 ↛ 36line 35 didn't jump to line 36 because the condition on line 35 was never true

36 example.text = value 

37 elif arg_name == "перевод": 

38 example.translation = value 

39 

40 expanded_node = wxr.wtp.parse( 

41 wxr.wtp.node_to_wikitext(template_node), expand_all=True 

42 ) 

43 for span_node in expanded_node.find_html_recursively("span"): 

44 span_class = span_node.attrs.get("class", "") 

45 if "example-details" in span_class: 

46 example.ref = clean_node(wxr, None, span_node) 

47 elif "example-block" in span_class: 

48 calculate_bold_offsets( 

49 wxr, span_node, example.text, example, "bold_text_offsets" 

50 ) 

51 elif "example-translate" in span_class: 

52 calculate_bold_offsets( 

53 wxr, 

54 span_node, 

55 example.translation, 

56 example, 

57 "bold_translation_offsets", 

58 ) 

59 

60 if len(example.text) > 0: 

61 sense.examples.append(example) 

62 

63 

64def process_en_surname_example_template( 

65 wxr: WiktextractContext, 

66 sense: Sense, 

67 template_node: TemplateNode, 

68) -> None: 

69 # https://ru.wiktionary.org/wiki/Шаблон:english_surname_example 

70 expanded_node = wxr.wtp.parse( 

71 wxr.wtp.node_to_wikitext(template_node), 

72 additional_expand={"english surname example"}, 

73 pre_expand=True, 

74 ) 

75 for node in expanded_node.find_child(NodeKind.TEMPLATE): 

76 if node.template_name == "пример": 76 ↛ 75line 76 didn't jump to line 75 because the condition on line 76 was always true

77 process_пример_template(wxr, sense, node)