Coverage for src/wiktextract/extractor/tr/sound.py: 93%
59 statements
« prev ^ index » next coverage.py v7.10.3, created at 2025-08-15 05:18 +0000
« prev ^ index » next coverage.py v7.10.3, created at 2025-08-15 05:18 +0000
1from wikitextprocessor import LevelNode, NodeKind, TemplateNode, WikiNode
3from ...page import clean_node
4from ...wxr_context import WiktextractContext
5from ..share import set_sound_file_url_fields
6from .models import Hyphenation, Sound, WordEntry
7from .tags import translate_raw_tags
10def extract_sound_section(
11 wxr: WiktextractContext, word_entry: WordEntry, level_node: LevelNode
12) -> None:
13 for list_node in level_node.find_child(NodeKind.LIST):
14 for list_item in list_node.find_child(NodeKind.LIST_ITEM):
15 extract_sound_list_item(wxr, word_entry, list_item)
18def extract_sound_list_item(
19 wxr: WiktextractContext, word_entry: WordEntry, list_item: WikiNode
20) -> None:
21 for t_node in list_item.find_child(NodeKind.TEMPLATE):
22 if t_node.template_name in [
23 "IPA",
24 "Çeviri yazı",
25 "IPA-Söyleniş",
26 "Çeviri Yazı",
27 "IPA-Telaffuz",
28 "sıfat-telaffuz",
29 "Sıfat-Telaffuz",
30 ]:
31 extract_ipa_template(wxr, word_entry, t_node)
32 elif t_node.template_name in ["h", "heceleme"]:
33 extract_heceleme_template(wxr, word_entry, t_node)
34 elif t_node.template_name.lower() in ["ses", "audio"]:
35 extract_ses_template(wxr, word_entry, t_node)
36 elif t_node.template_name in [
37 "eş sesliler",
38 "sesteşler",
39 "eşsesli",
40 "eşsesliler",
41 ]:
42 extract_eş_sesliler(wxr, word_entry, t_node)
43 elif t_node.template_name in ["kafiyeler", "kafiye"]: 43 ↛ 21line 43 didn't jump to line 21 because the condition on line 43 was always true
44 extract_kafiyeler(wxr, word_entry, t_node)
47def extract_ipa_template(
48 wxr: WiktextractContext, word_entry: WordEntry, t_node: TemplateNode
49) -> None:
50 # https://tr.wiktionary.org/wiki/Şablon:IPA
51 for index in [1, 2, 3]:
52 ipa = clean_node(wxr, None, t_node.template_parameters.get(index, ""))
53 if ipa != "":
54 word_entry.sounds.append(Sound(ipa=ipa))
57def extract_heceleme_template(
58 wxr: WiktextractContext, word_entry: WordEntry, t_node: TemplateNode
59) -> None:
60 # https://tr.wiktionary.org/wiki/Şablon:heceleme
61 expanded_node = wxr.wtp.parse(
62 wxr.wtp.node_to_wikitext(t_node), expand_all=True
63 )
64 for span_node in expanded_node.find_html(
65 "span", attr_name="class", attr_value="mention-Latn"
66 ):
67 hyphenation = clean_node(wxr, None, span_node)
68 if hyphenation != "": 68 ↛ 64line 68 didn't jump to line 64 because the condition on line 68 was always true
69 word_entry.hyphenations.append(
70 Hyphenation(parts=hyphenation.split("‧"))
71 )
72 clean_node(wxr, word_entry, expanded_node)
75def extract_ses_template(
76 wxr: WiktextractContext, word_entry: WordEntry, t_node: TemplateNode
77) -> None:
78 # https://tr.wiktionary.org/wiki/Şablon:ses
79 filename = clean_node(wxr, None, t_node.template_parameters.get(1, ""))
80 if filename != "": 80 ↛ exitline 80 didn't return from function 'extract_ses_template' because the condition on line 80 was always true
81 sound = Sound()
82 set_sound_file_url_fields(wxr, filename, sound)
83 raw_tag = clean_node(wxr, None, t_node.template_parameters.get(2, ""))
84 if raw_tag != "": 84 ↛ 87line 84 didn't jump to line 87 because the condition on line 84 was always true
85 sound.raw_tags.append(raw_tag)
86 translate_raw_tags(sound)
87 word_entry.sounds.append(sound)
90def extract_eş_sesliler(
91 wxr: WiktextractContext, word_entry: WordEntry, t_node: TemplateNode
92) -> None:
93 # https://tr.wiktionary.org/wiki/Şablon:eş_sesliler
94 expanded_node = wxr.wtp.parse(
95 wxr.wtp.node_to_wikitext(t_node), expand_all=True
96 )
97 lang_code = clean_node(wxr, None, t_node.template_parameters.get("dil", ""))
98 for span_tag in expanded_node.find_html(
99 "span", attr_name="lang", attr_value=lang_code
100 ):
101 homophone = clean_node(wxr, None, span_tag)
102 if homophone != "": 102 ↛ 98line 102 didn't jump to line 98 because the condition on line 102 was always true
103 word_entry.sounds.append(Sound(homophone=homophone))
106def extract_kafiyeler(
107 wxr: WiktextractContext, word_entry: WordEntry, t_node: TemplateNode
108) -> None:
109 # https://tr.wiktionary.org/wiki/Şablon:kafiyeler
110 for index in range(1, 7): 110 ↛ exitline 110 didn't return from function 'extract_kafiyeler' because the loop on line 110 didn't complete
111 if index not in t_node.template_parameters:
112 break
113 rhyme = clean_node(wxr, None, t_node.template_parameters[index])
114 if rhyme != "": 114 ↛ 110line 114 didn't jump to line 110 because the condition on line 114 was always true
115 rhyme = "-" + rhyme
116 word_entry.sounds.append(Sound(rhymes=rhyme))