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
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-12 08:09 +0000
1from wikitextprocessor import NodeKind, TemplateNode
3from ...page import clean_node
4from ...wxr_context import WiktextractContext
5from ..share import calculate_bold_offsets
6from .models import Example, Sense
8EXAMPLE_TEMPLATES = frozenset(["пример", "english surname example"])
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)
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
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 )
60 if len(example.text) > 0:
61 sense.examples.append(example)
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)