Эчтәлеккә күчү

Модуль:морфо-tt

Wiktionary проектыннан
(Модуль:морфо битеннән юнәлтелде)

Модуль:морфо-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