Мазмунга өтүү

Модуль:ат атооч

Wiktionary долбоорунан

Documentation for this module may be created at Модуль:ат атооч/doc

local p = {}

-- Дизайн үчүн түстөр (Зат атооч модулундагыдай)
local h_bg = '#DEDEDE'
local t_bg = '#F9F9F9'
local b_color = '#aaaaaa'
local i_border = '1px solid #ffffff'

-- Жактама жана шилтеме ат атоочторунун жөндөлүшү
local declension_data = {
    ['мен']  = {nom='мен', gen='менин', dat='мага', acc='мени', loc='менде', abl='менден'},
    ['сен']  = {nom='сен', gen='сенин', dat='сага', acc='сени', loc='сенде', abl='сенден'},
    ['ал']   = {nom='ал', gen='анын', dat='ага', acc='аны', loc='анда', abl='андан'},
    ['биз']  = {nom='биз', gen='биздин', dat='бизге', acc='бизди', loc='бизде', abl='бизден'},
    ['силер'] = {nom='силер', gen='силердин', dat='силерге', acc='силерди', loc='силерде', abl='силерден'},
    ['сиз']  = {nom='сиз', gen='сиздин', dat='сизге', acc='сизди', loc='сизде', abl='сизден'},
    ['сиздер'] = {nom='сиздер', gen='сиздердин', dat='сиздерге', acc='сиздерди', loc='сиздерде', abl='сиздерден'},
    ['алар']  = {nom='алар', gen='алардын', dat='аларга', acc='аларды', loc='аларда', abl='алардан'},
    -- Шилтеме ат атоочтору (жекелик жана көптүк формалары менен)
    ['бул']   = {
        sg = {nom='бул', gen='бунун (мунун)', dat='буга', acc='буну (муну)', loc='бунда', abl='бундан'},
        pl = {nom='булар', gen='булардын', dat='буларга', acc='буларды', loc='буларда', abl='булардан'}
    },
    ['ошол']  = {
        sg = {nom='ошол', gen='ошонун', dat='ошого', acc='ошону', loc='ошондо', abl='ошондон'},
        pl = {nom='ошолор', gen='ошолордун', dat='ошолорго', acc='ошолорду', loc='ошолордо', abl='ошолордон'}
    },
    ['ушул']  = {
        sg = {nom='ушул', gen='ушунун', dat='ушуга', acc='ушуну', loc='ушунда', abl='ушундан'},
        pl = {nom='ушулар', gen='ушулардын', dat='ушуларга', acc='ушуларды', loc='ушуларда', abl='ушулардан'}
    }
}

local function make_link(term, display)
    return "[[" .. term .. "|" .. (display or term) .. "]]"
end

-- Бүктөлмө кутуча (Зат атооч модулунан алынды)
local function wrap_box(title, content)
    local res = '\n<div class="mw-collapsible mw-collapsed" style="width:65%; border:1px solid ' .. b_color .. '; margin-top:10px; font-size:100%;">'
    res = res .. '<div style="background:#eeeeee; padding:4px 10px; font-weight:bold; text-align:left; border-bottom:1px solid ' .. b_color .. ';">' .. title .. '</div>'
    res = res .. '<div class="mw-collapsible-content" style="background:' .. t_bg .. ';">\n'
    res = res .. '{| style="width:100%; text-align:center; border-collapse:collapse; background:' .. t_bg .. '; table-layout: fixed;"\n' .. content .. '\n|}\n'
    res = res .. '</div>\n</div>'
    return res
end

function p.render(frame)
    local args = frame.args
    local word = args['сөз'] or mw.title.getCurrentTitle().text
    local type_val = mw.ustring.lower(args['түрү'] or "")
    local syllables = args['муундар'] or ""
    local root = args['уңгу'] or ""
    local audio = args['аудио'] or ""
    
    local ipa_word = (args['эфа'] and args['эфа'] ~= "") and args['эфа'] or word
    local ipa_part = frame:preprocess('{{#invoke:эфа|render|' .. ipa_word .. '}}')

    local type_map = {
        ['жактама']   = '[[жактама ат атооч|Жактама ат атооч]]',
        ['шилтеме']   = '[[шилтеме ат атооч|Шилтеме ат атооч]]',
        ['сурама']    = '[[сурама ат атооч|Сурама ат атооч]]',
        ['тангыч']    = '[[тангыч ат атооч|Тангыч ат атооч]]',
        ['белгисиз']  = '[[белгисиз ат атооч|Белгисиз ат атооч]]',
        ['өздүк']     = '[[өздүк ат атооч|Өздүк ат атооч]]',
        ['жалпылама'] = '[[жалпылама ат атооч|Жалпылама ат атооч]]'
    }


    local res = '<div style="margin-bottom: 20px; font-size: 100%; line-height: 1.6;">'
    
    -- 1. БАШКЫ СӨЗ 
    res = res .. "'''" .. word .. "'''\n\n"
    
    -- 2. СӨЗ ТҮРКҮМҮ
    res = res .. "'''[[ат атооч|Ат атооч]]'''\n"
    
    if syllables ~= "" then res = res .. "* Муундарга бөлүнүшү: '''" .. mw.ustring.gsub(syllables, "|", "-") .. "'''\n" end
    if root ~= "" then res = res .. "* Уңгу: '''-" .. root .. "-'''\n" end
    
    if ipa_part ~= "" or audio ~= "" then
        res = res .. "* " .. ipa_part
        if audio ~= "" then res = res .. " " .. frame:preprocess('{{Ky-аудио|' .. audio .. '}}') end
        res = res .. "\n"
    end

    if type_map[type_val] then
        res = res .. "* Түрү: " .. type_map[type_val] .. "\n"
    end
    res = res .. "</div>"

    -- ТАБЛИЦА ТҮЗҮҮ (Зат атооч дизайны менен)
    if (type_val == 'жактама' or type_val == 'шилтеме') and declension_data[word] then
        local data = declension_data[word]
        local content = "|-\n"
        content = content .. '! style="width:40%; background:' .. h_bg .. '; border:' .. i_border .. ';" | жөндөмө\n'
        
        if data.sg then
            -- Бул шилтеме ат атоочтору үчүн (жекелик жана көптүк)
            content = content .. '! style="width:40%; background:' .. h_bg .. '; border:' .. i_border .. ';" | Жекелик\n'
            content = content .. '! style="width:40%; background:' .. h_bg .. '; border:' .. i_border .. ';" | Көптүк\n'
            local cases = {{"атооч","nom"},{"илик","gen"},{"барыш","dat"},{"табыш","acc"},{"жатыш","loc"},{"чыгыш","abl"}}
            for _, c in ipairs(cases) do
                content = content .. "|-\n"
                content = content .. "! style=\"background:" .. h_bg .. "; border:" .. i_border .. ";\" | " .. make_link(c[1]) .. "\n"
                content = content .. "| style=\"border:" .. i_border .. ";\" | " .. data.sg[c[2]] .. "\n"
                content = content .. "| style=\"border:" .. i_border .. ";\" | " .. data.pl[c[2]] .. "\n"
            end
        else
            -- Бул жактама ат атоочтору үчүн (бир эле форма)
            content = content .. '! style="width:60%; background:' .. h_bg .. '; border:' .. i_border .. ';" | ат атооч\n'
            local cases = {{"атооч","nom"},{"илик","gen"},{"барыш","dat"},{"табыш","acc"},{"жатыш","loc"},{"чыгыш","abl"}}
            for _, c in ipairs(cases) do
                content = content .. "|-\n"
                content = content .. "! style=\"background:" .. h_bg .. "; border:" .. i_border .. ";\" | " .. make_link(c[1]) .. "\n"
                content = content .. "| style=\"border:" .. i_border .. ";\" | " .. data[c[2]] .. "\n"
            end
        end
        
        res = res .. wrap_box(word .. " сөзүнүн жөндөлүшү", content)
    end

    res = res .. "[[Категория:Кыргыз тили]] [[Категория:Кыргыз ат атоочтор]]"
    return res
end

return p