模組:Acw-utilities

維基詞典,自由的多語言詞典


local export = {}
local sc = require("Module:scripts").getByCode("Arab")
local lang = require("Module:languages").getByCode("acw")
local m_utilities = require("Module:utilities")
local m_links = require("Module:links")
local m_headword = require("Module:headword")
local rsplit = mw.text.split

function export.catfix() return m_utilities.catfix(lang, sc) end

-- If Not Empty
local function ine(x)
    if x == "" then
        return nil
    else
        return x
    end
end

local function link(term, tr, gloss, face, alt)
    if word == "" or word == "—" then
        return word
    else
        return m_links.full_link({
            term = term,
            alt = alt,
            lang = lang,
            tr = tr,
            sc = sc,
            gloss = gloss
        }, face)
    end
end

local function validateRoot(rootTable, joined_root)
    if type(rootTable) ~= "table" then error("rootTable is not a table", 2) end

    for i, letter in ipairs(rootTable) do
        if mw.ustring.len(letter) > 1 then
            error("'" .. letter .. "', the " .. ordinal[i] ..
                      " letter in the root '" .. joined_root ..
                      "' should be a single letter.")
        end
    end
end

function export.acw_root(frame)
    local output = {}
    local categories = {}
    local title = mw.title.getCurrentTitle()
    local fulltitle = title.fullText
    local pagename = title.text
    local namespace = title.nsText

    local params = {
        [1] = {},
        [2] = {},
        [3] = {},
        [4] = {},
        ["nocat"] = {type = "boolean", default = false},
        ["plain"] = {type = "boolean", default = false},
        ["t"] = {},
        ["gloss"] = {alias_of = "t"},
        ["notext"] = {type = "boolean", default = false},
        ["nolink"] = {type = "boolean", default = false}
    }

    local args = require("Module:parameters").process(frame:getParent().args,
                                                      params)
    local rootLetters = {}

    if not args[1] and namespace == "Template" then
        rootLetters = {"ك", "ت", "ب"}
    elseif args[1] then
        rootLetters = rsplit(args[1], " ")
    else
        rootLetters = rsplit(fulltitle, " ")
    end

    local joined_root = table.concat(rootLetters, " ")
    validateRoot(rootLetters, joined_root)

    if fulltitle == joined_root then
        table.insert(output, m_headword.full_headword(
                         {
                lang = lang,
                sc = sc,
                pos_category = "roots",
                categories = {},
                heads = {joined_root}
            }))

        table.insert(categories, "[[Category:漢志阿拉伯語詞詞根|" ..
                         (ine(args["sort"]) or joined_root) .. "]]")
        table.insert(categories,
                     "[[Category:詞根為" ..
                         joined_root .. "的漢志阿拉伯語詞| ]]")

        if args[1] then
            require("Module:debug").track("acw-root") -- [[Special:WhatLinksHere/Template:tracking/acw-root]]
        end
    else
        if sc:countCharacters(pagename) < mw.ustring.len(pagename) - 2 then
            require("Module:debug").track("acw-root/title-not-acw") -- [[Special:WhatLinksHere/Template:tracking/acw-root/title-not-acw]]

            if not args["nocat"] then
                require("Module:debug").track("acw-root/title-not-acw/cat") -- [[Special:WhatLinksHere/Template:tracking/acw-root/title-not-acw/cat]]
            end
        end

        local link_text

        if args["nolink"] then
            link_text = link(nil, ine(args["gloss"]), args["face"], joined_root)
        else
            link_text = link(joined_root, ine(args["gloss"]), args["face"])
        end

        table.insert(output, link_text)

        table.insert(categories, m_utilities.format_categories(
                         {
                "詞根為" .. joined_root .. "的漢志阿拉伯語詞"
            }, lang))
    end

    if args["plain"] then
        return joined_root
    elseif args["nocat"] then
        return table.concat(output)
    elseif args["notext"] then
        return table.concat(categories)
    else
        return table.concat(output) .. table.concat(categories)
    end
end

return export