본문으로 이동

모듈:uk-headword

위키낱말사전, 말과 글의 누리

함수

[편집]

export.show

[편집]

function export.show(frame)

이 함수에는 설명문서가 존재하지 않습니다. 함수에 대한 사용법과 입출력, 유사한 함수와의 차이점을 다른 사용자들이 참고할 수 있도록 추가하거나, 함수 목록에서 제거하기 위해 지역 함수로 변경하세요.

관련 모듈

[편집]

local PAGENAME = mw.title.getCurrentTitle().text

local export = {}
local pos_functions = {}

local m_links = require("Module:also/link")
local m_params = require("Module:parameters")
local m_uk = require("Module:uk-noun")
local m_headword = require("Module:headword")

local lang = require("모듈:languages").getByCode("uk")
local langname = lang:getCanonicalName()

local function glossary_link(entry, text)
    text = text or entry
    return "[[부록:용어사전#" .. entry .. "|" .. text .. "]]"
end

local function check_exists(forms, cats, pos)
    for _, form in ipairs(forms) do
        if type(form) == "table" then
            form = form.term
        end
        if not mw.title.new(form).exists then
            table.insert(cats, langname .. " " .. pos .. " 표제어에 표시된 링크가 빨간 링크인 문서")
            return false
        end
    end
    return true
end

pos_functions["명사"] = {
    params = {
        ["g"] = {list = true}, -- 성
        ["anim"] = {}, -- 활성
    },
    func = function(args, data)
        local m_uk = require("Module:uk-noun")
        
        -- args가 문자열인 경우 처리
        if type(args) == "string" then
            args = {[1] = args}
        end
        
        local parent_args = mw.getCurrentFrame():getParent().args
        local alternant_multiword_spec = m_uk.do_generate_forms(parent_args)
        
        -- 성 처리
        if alternant_multiword_spec.genders then
            data.genders = alternant_multiword_spec.genders
        end
        
        -- 활성 처리
        if alternant_multiword_spec.animacy then
            table.insert(data.categories, alternant_multiword_spec.animacy == "an" and "우크라이나어 유정 명사" or "우크라이나어 무정 명사")
        end
        
        -- 변화형 추가
        for slot, forms in pairs(alternant_multiword_spec.forms) do
            if slot ~= "nom_s" then -- 주격 단수는 이미 표제어로 사용됨
                table.insert(data.inflections, {label = output_noun_slots[slot], forms})
            end
        end
        
        -- 카테고리 추가
        for _, category in ipairs(alternant_multiword_spec.categories) do
            table.insert(data.categories, category)
        end

        -- 주석 추가
        if alternant_multiword_spec.annotation then
            data.annotation = alternant_multiword_spec.annotation
        end

        return data
    end
}

pos_functions["형용사"] = function(args, data)
    -- 형용사 처리 로직 추가
end

pos_functions["대명사"] = function(args, data)
    -- 대명사 처리 로직 추가
end

pos_functions["동사"] = function(args, data)
    -- 동사 처리 로직 추가
end

function export.show(frame)
    local iparams = {
        [1] = {required = true, desc = "part of speech"},
    }
    local iargs = m_params.process(frame.args, iparams)
    local poscat = iargs[1]

    local params = {
        [1] = {list = "head"}, -- heads
        ["tr"] = {list = true}, -- translits
        ["noposcat"] = {type = "boolean"}, -- don't add part of speech category
        ["noacccat"] = {type = "boolean"}, -- don't add missing-accent tracking category
        ["notrcat"] = {type = "boolean"}, -- don't add 'irregular pronunciations' tracking category
    }
    if pos_functions[poscat] then
        for key, val in pairs(pos_functions[poscat].params) do
            params[key] = val
        end
    end

    local parargs = frame:getParent().args
    local args = m_params.process(parargs, params)

    local data = {
        lang = lang,
        pos_category = poscat,
        categories = {},
        heads = {},
        translits = {},
        redundant_translits = {},
        genders = {},
        inflections = {},
        noposcat = args.noposcat
    }

    local PAGENAME = mw.title.getCurrentTitle().text
    local NAMESPACE = mw.title.getCurrentTitle().nsText

    -- Get the head parameters
    local heads = args[1]
    if #heads == 0 then
        heads = {PAGENAME}
    end
    data.heads = heads
    for i, head in ipairs(heads) do
        local head_no_links = m_links.remove_links(head)
        local head_noaccent = mw.ustring.gsub(head_no_links, "́", "")
        if NAMESPACE == "" and head_noaccent ~= PAGENAME then
            mw.log("bad-headword")
        end

        if not mw.ustring.find(head_no_links, "́") then
            if not args.noacccat then
                table.insert(data.categories, "우크라이나어 표제어에 강세 표시 필요")
            end
        end

        local tr = args.tr and args.tr[i]
        if tr then
            local tr_gen = mw.ustring.gsub(head, "́", "")
            if tr == tr_gen then
                data.redundant_translits[i] = true
            elseif not args.notrcat then
                table.insert(data.categories, "우크라이나어 불규칙 발음 용어")
            end
            data.translits[i] = tr
        end
    end

    if pos_functions[poscat] then
        pos_functions[poscat].func(args, data)
    end

    return m_headword.full_headword(data) .. (data.extra_text or "")
end

return export