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

1from wikitextprocessor import LevelNode, NodeKind, TemplateNode, WikiNode 

2 

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 

8 

9 

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) 

16 

17 

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) 

45 

46 

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)) 

55 

56 

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) 

73 

74 

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) 

88 

89 

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)) 

104 

105 

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))