Модуль:морфо-tt
Күренеш
(Модуль:морфо битеннән юнәлтелде)
Модуль:морфо-tt/doc битен төзеп бу модульнең документациясен шунда урнаштырырга була
local p = {}
-- Татар теле өчен морфемаларның төп төрләре
local morpheme_types = {
root = {display = "", cat = "татар тамырлары"},
affix = {display = "-", cat = "татар аффикслары"},
ending = {display = "-", cat = "татар кушымчалары"},
particle = {display = "-", cat = "татар кисәкчәләре"}
}
-- Сингармонизмны эшкәртү функциясе (сузыклар гармониясе)
local function check_vowel_harmony(parts)
local front_vowels = "әөүи"
local back_vowels = "аоуы"
local vowel_type = nil
for _, part in ipairs(parts) do
for char in part:gmatch("[аәөүиоуы]") do
if front_vowels:find(char, 1, true) then
if vowel_type == "back" then
return false, "Сингармонизмның бозылуы: " .. part
end
vowel_type = "front"
elseif back_vowels:find(char, 1, true) then
if vowel_type == "front" then
return false, "Сингармонизмның бозылуы: " .. part
end
vowel_type = "back"
end
end
end
return true
end
-- Төп эшкәртү функциясе
function p.process_morpho(frame)
local args = frame.args
local root = args.root or args[1] or ""
local affixes = {}
local categories = {}
local display_parts = {}
-- Параметрлардан аффиксларны җыю
local i = 2
while args[i] do
table.insert(affixes, args[i])
i = i + 1
end
-- Сузыкларның гармониясен тикшерү
local all_parts = {root}
for _, affix in ipairs(affixes) do table.insert(all_parts, affix) end
local valid, error_msg = check_vowel_harmony(all_parts)
if not valid then return error_msg end
-- Сурәтләнешне төзү
table.insert(display_parts, root) -- Өстәмә бизәүләрсез тамыр
for _, affix in ipairs(affixes) do
table.insert(display_parts, morpheme_types.affix.display .. affix)
end
-- Төркемләү
table.insert(categories, "[[Төркем:Морфологик мәгълүмат булган сүзләр]]")
table.insert(categories, "[[Төркем:" .. morpheme_types.root.cat .. "]]")
return table.concat(display_parts, "・") .. table.concat(categories)
end
return p