Module:labels: Difference between revisions

From Laenkea
Jump to navigation Jump to search
No edit summary
No edit summary
 
(31 intermediate revisions by 2 users not shown)
Line 1: Line 1:
local export = {}
local export = {}


function export.make_labels(language, labels, nocat)
function export.make_labels(language, labels, nocat, nobrackets, noitalics)
local function make_label(label_id, label)
    local function make_label(label_id, label, language_name, language_code)
local display = label["display"]
        local categories, topics = label["categories"], label["topics"]
local glossary = label["glossary"]
        local cat_out = ""
local wikipedia = label["Wikipedia"]
        if categories ~= nil then
if display ~= nil then return display end
            for _, cat in ipairs(categories) do
if glossary ~= nil then
                cat_out = cat_out .. "[[Category:" .. language_name .. " " .. cat .. "]]"
local g_url = "Appendix:Glossary#" .. (type(glossary) == "string" and glossary or label_id)
            end
return "[[" .. g_url .. "|" .. label_id .. "]]"
        end
end
        if topics ~= nil then
if wikipedia ~= nil then
            for _, top in ipairs(topics) do
return "[[w:" .. (type(wikipedia) == "string" and wikipedia or label_id) .. "]]"
                cat_out = cat_out .. "[[Category:" .. language_code .. ":" .. top .. "]]"
end
            end
return label_id
        end
end
        local display = label["display"]
local l_data = mw.loadData("Module:labels/data")
        local glossary = label["glossary"]
local ret = "(''"
        local wikipedia = label["Wikipedia"]
local cats = {}
        if display ~= nil then return display, cat_out end
local skip_comma = false
        if glossary ~= nil then
for i, l_id in ipairs(labels) do
            local g_url = "Appendix:Glossary#" .. (type(glossary) == "string" and glossary or label_id)
l_id = l_data.aliases[l_id] or l_id
            return "[[" .. g_url .. "|" .. label_id .. "]]", cat_out
local label = l_data.labels[l_id]
        end
if label == null then
        if wikipedia ~= nil then
ret = ret .. ((skip_comma or i == 1) and " " or ", ") .. l_id
            return "[[w:" .. (type(wikipedia) == "string" and wikipedia or label_id) .. "|" .. label_id .. "]]", cat_out
skip_comma = false
        end
else
        return label_id, cat_out
ret = ret .. ((skip_comma or i == 1) and " " or ", ") .. make_label(l_id, label)
    end
skip_comma = label["omit_comma"] or false
    local l_data = mw.loadData("Module:labels/data")
end
    local out = (nobrackets and "" or "(") .. (noitalics and "" or "<i>")
end
    local cats = ""
ret = ret .. ")"
    local skip_comma = false
return ret .. ((nocat and "") or table.concat(cats))
 
    local conjunctions = {["and"] = true, ["or"] = true, ["/"] = true}
 
    local it = 1
 
    -- split parameters at / and ,
    while labels[it] do
        if mw.ustring.find(labels[it], "^[^,]+,%s.+") then
            local before = mw.ustring.gsub(labels[it], "^([^,]+),%s*(.+)", "%1")
            local after = mw.ustring.gsub(labels[it], "^([^,]+),%s*(.+)", "%2")
            labels[it] = before
            table.insert(labels, it + 1, after)
        end
        if mw.ustring.find(labels[it], "^[^/%[%]]+/.+") then
            local before = mw.ustring.gsub(labels[it], "^([^/]+)/(.+)", "%1")
            local after = mw.ustring.gsub(labels[it], "^([^/]+)/(.+)", "%2")
            labels[it] = before
            table.insert(labels, it + 1, after)
            table.insert(labels, it + 1, "/")
        end
        for conjunction, _ in pairs(conjunctions) do
            if mw.ustring.find(labels[it], "^[^%[%]]+%s+" .. conjunction .. "%s+.+") then
                local before = mw.ustring.gsub(labels[it], "^(.+)%s+" .. conjunction .. "%s+(.+)", "%1")
                local after = mw.ustring.gsub(labels[it], "^(.+)%s+" .. conjunction .. "%s+(.+)", "%2")
                labels[it] = before
                table.insert(labels, it + 1, after)
                table.insert(labels, it + 1, conjunction)
            end
        end
        it = it + 1
    end
 
    --generate
 
    for i, l_id in ipairs(labels) do
 
        if mw.ustring.sub(l_id, 1, 1) == "_" then
            skip_comma = true
            l_id = mw.ustring.sub(l_id, 2)
        end
 
        l_id = l_data.aliases[l_id] or mw.ustring.gsub(l_id, "([\"\*])([^\"\*]+)([\"\*])", "</i>[[%2#" .. language.name .. "|%2]]<i>") -- replaces "word" or *word* with [[word#LANG|word]]
 
        local label = l_data.labels[l_id]
        if i > 1 then
            if conjunctions[l_id] or conjunctions[labels[i-1]] or mw.ustring.find(l_id, "^with%s") then
                skip_comma = true
            end
            out = out .. (skip_comma and "" or ",")
            if not (l_id == "/" or labels[i-1] == "/") then
                out = out .. " "
            end
        end
        if label == null then
            if l_id == "/" then
                out = out .. "</i>/<i>"
            else
                out = out .. l_id
            end
            skip_comma = false
        else
            l_out, l_cats = make_label(l_id, label, language.name, language.code)
            out = out .. l_out
            cats = cats .. l_cats
            skip_comma = label["omit_comma"] or false
        end
    end
    out = out .. (noitalics and "" or "</i>") .. (nobrackets and "" or ")")
    return out .. (nocat and "" or cats)
end
end


function export.show(frame)
function export.show(frame)
local params = {
    local params = {
[1] = {required = true},
        [1] = {required = true},
[2] = {required = true, list = true},
        [2] = {required = true, list = true},
["nocat"] = {type = "boolean"}
        ["nocat"] = {type = "boolean"}
}
    }
local args = require("Module:parameters").process(frame:getParent().args, params)
    local args = require("Module:parameters").process(frame:getParent().args, params)
local language = require("Module:languages").get_by_code(args[1])
    local language = require("Module:languages").get_by_code(args[1])
return export.make_labels(language, args[2], args["nocat"])
    return export.make_labels(language, args[2], args["nocat"])
end
end


return export
return export

Latest revision as of 18:45, 26 February 2024

local export = {}

function export.make_labels(language, labels, nocat, nobrackets, noitalics)
    local function make_label(label_id, label, language_name, language_code)
        local categories, topics = label["categories"], label["topics"]
        local cat_out = ""
        if categories ~= nil then
            for _, cat in ipairs(categories) do
                cat_out = cat_out .. "[[Category:" .. language_name .. " " .. cat .. "]]"
            end
        end
        if topics ~= nil then
            for _, top in ipairs(topics) do
                cat_out = cat_out .. "[[Category:" .. language_code .. ":" .. top .. "]]"
            end
        end
        local display = label["display"]
        local glossary = label["glossary"]
        local wikipedia = label["Wikipedia"]
        if display ~= nil then return display, cat_out end
        if glossary ~= nil then
            local g_url = "Appendix:Glossary#" .. (type(glossary) == "string" and glossary or label_id)
            return "[[" .. g_url .. "|" .. label_id .. "]]", cat_out
        end
        if wikipedia ~= nil then
            return "[[w:" .. (type(wikipedia) == "string" and wikipedia or label_id) .. "|" .. label_id .. "]]", cat_out
        end
        return label_id, cat_out
    end
    local l_data = mw.loadData("Module:labels/data")
    local out = (nobrackets and "" or "(") .. (noitalics and "" or "<i>")
    local cats = ""
    local skip_comma = false

    local conjunctions = {["and"] = true, ["or"] = true, ["/"] = true}

    local it = 1

    -- split parameters at / and ,
    while labels[it] do
        if mw.ustring.find(labels[it], "^[^,]+,%s.+") then
            local before = mw.ustring.gsub(labels[it], "^([^,]+),%s*(.+)", "%1")
            local after = mw.ustring.gsub(labels[it], "^([^,]+),%s*(.+)", "%2")
            labels[it] = before
            table.insert(labels, it + 1, after)
        end
        if mw.ustring.find(labels[it], "^[^/%[%]]+/.+") then
            local before = mw.ustring.gsub(labels[it], "^([^/]+)/(.+)", "%1")
            local after = mw.ustring.gsub(labels[it], "^([^/]+)/(.+)", "%2")
            labels[it] = before
            table.insert(labels, it + 1, after)
            table.insert(labels, it + 1, "/")
        end
        for conjunction, _ in pairs(conjunctions) do
            if mw.ustring.find(labels[it], "^[^%[%]]+%s+" .. conjunction .. "%s+.+") then
                local before = mw.ustring.gsub(labels[it], "^(.+)%s+" .. conjunction .. "%s+(.+)", "%1")
                local after = mw.ustring.gsub(labels[it], "^(.+)%s+" .. conjunction .. "%s+(.+)", "%2")
                labels[it] = before
                table.insert(labels, it + 1, after)
                table.insert(labels, it + 1, conjunction)
            end
        end
        it = it + 1
    end

    --generate

    for i, l_id in ipairs(labels) do

        if mw.ustring.sub(l_id, 1, 1) == "_" then
            skip_comma = true
            l_id = mw.ustring.sub(l_id, 2)
        end

        l_id = l_data.aliases[l_id] or mw.ustring.gsub(l_id, "([\"\*])([^\"\*]+)([\"\*])", "</i>[[%2#" .. language.name .. "|%2]]<i>") -- replaces "word" or *word* with [[word#LANG|word]]

        local label = l_data.labels[l_id]
        if i > 1 then
            if conjunctions[l_id] or conjunctions[labels[i-1]] or mw.ustring.find(l_id, "^with%s") then
                skip_comma = true
            end
            out = out .. (skip_comma and "" or ",")
            if not (l_id == "/" or labels[i-1] == "/") then
                out = out .. " "
            end
        end
        if label == null then
            if l_id == "/" then
                out = out .. "</i>/<i>"
            else
                out = out .. l_id
            end
            skip_comma = false
        else
            l_out, l_cats = make_label(l_id, label, language.name, language.code)
            out = out .. l_out
            cats = cats .. l_cats
            skip_comma = label["omit_comma"] or false
        end
    end
    out = out .. (noitalics and "" or "</i>") .. (nobrackets and "" or ")")
    return out .. (nocat and "" or cats)
end

function export.show(frame)
    local params = {
        [1] = {required = true},
        [2] = {required = true, list = true},
        ["nocat"] = {type = "boolean"}
    }
    local args = require("Module:parameters").process(frame:getParent().args, params)
    local language = require("Module:languages").get_by_code(args[1])
    return export.make_labels(language, args[2], args["nocat"])
end

return export