Module:labels: Difference between revisions
Jump to navigation
Jump to search
TheNightAvl (talk | contribs) mNo edit summary |
No edit summary |
||
(13 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, 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 | end | ||
function export.show(frame) | 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 | 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