local m_labeldata = mw.loadData("Module:labels/data")
local m_utilities = require("Module:utilities")
local m_links = require("Module:links")
local export = {}
local function show_categories(data, lang, script, sort_key, script2, sort_key2, term_mode)
local categories = {}
local categories2 = {}
local lang_code = lang:getCode()
local canonical_name = lang:getCanonicalName()
local topical_categories = data.topical_categories or {}
local sense_categories = data.sense_categories or {}
local pos_categories = data.pos_categories or {}
local regional_categories = data.regional_categories or {}
local plain_categories = data.plain_categories or {}
for i, cat in ipairs(topical_categories) do
table.insert(categories, lang_code .. ":" .. cat)
if script then
table.insert(categories, lang_code .. ":" .. cat .. " in " .. script .. " script")
end
if script2 then
table.insert(categories2, lang_code .. ":" .. cat .. " in " .. script2 .. " script")
end
end
for i, cat in ipairs(sense_categories) do
cat = (term_mode and cat .. " terms" ) or "terms with " .. cat .. " senses"
table.insert(categories, canonical_name .. " " .. cat)
if script then
table.insert(categories, canonical_name .. " " .. cat .. " in " .. script .. " script")
end
if script2 then
table.insert(categories2, canonical_name .. " " .. cat .. " in " .. script2 .. " script")
end
end
for i, cat in ipairs(pos_categories) do
table.insert(categories, canonical_name .. " " .. cat)
if script then
table.insert(categories, canonical_name .. " " .. cat .. " in " .. script .. " script")
end
if script2 then
table.insert(categories2, canonical_name .. " " .. cat .. " in " .. script2 .. " script")
end
end
for i, cat in ipairs(regional_categories) do
table.insert(categories, cat .. " " .. canonical_name)
if script then
table.insert(categories, cat .. " " .. canonical_name .. " in " .. script .. " script")
end
if script2 then
table.insert(categories2, cat .. " " .. canonical_name .. " in " .. script2 .. " script")
end
end
for i, cat in ipairs(plain_categories) do
table.insert(categories, cat)
if script then
table.insert(categories, cat .. " in " .. script .. " script")
end
if script2 then
table.insert(categories2, cat .. " in " .. script2 .. " script")
end
end
return m_utilities.format_categories(categories, lang, sort_key) .. m_utilities.format_categories(categories2, lang, sort_key2)
end
function export.show_labels(labels, lang, script, script2, sort_key, sort_key2, nocat, term_mode)
if #labels < 1 then
if mw.title.getCurrentTitle().nsText == "Template" then
labels = {"example"}
else
error("You must specify at least one label.")
end
end
-- Show the labels
local omit_preComma = false
local omit_postComma = true
local omit_preSpace = false
local omit_postSpace = true
local lang_code = lang:getCode()
local canonical_name = lang:getCanonicalName()
local alias
for i, label in ipairs(labels) do
omit_preComma = omit_postComma
omit_postComma = false
omit_preSpace = omit_postSpace
omit_postSpace = false
local deprecated = false
if m_labeldata.deprecated[label] then
deprecated = true
end
if m_labeldata.aliases[label] then
alias = label
label = m_labeldata.aliases[label]
end
if m_labeldata.deprecated[label] then
deprecated = true
end
local data = m_labeldata.labels[label] or {}
if data.track then
require("Module:debug").track("labels/label/" .. label)
end
local languages = data.languages
if languages and not languages[lang_code] then
-- [[Special:WhatLinksHere/Template:tracking/labels/incorrect-language]]
require("Module:debug").track("labels/incorrect-language")
mw.log(lang_code .. ":" .. label)
--[[ Do not use the data in the table if the current language
is not in the "languages" list. | Do not use the data in the table if the current language
is not in the "languages" list. ]]
label = alias or label
data = {}
end
if data.special_display then
local function add_language_name(str)
if str == "canonical_name" then
return canonical_name
else
return ""
end
end
label = mw.ustring.gsub(data.special_display, "<([^>]+)>", add_language_name)
else
if data.glossary then
local glossary_entry = type(data.glossary) == "string" and data.glossary or label
label = "[[Appendix:Glossary#" .. glossary_entry .. "|" .. label .. "]]"
elseif data.Wikipedia then
Wikipedia_entry = type(data.Wikipedia) == "string" and data.Wikipedia or label
label = "[[w:" .. Wikipedia_entry .. "|" .. label .. "]]"
else
label = data.display or label
end
end
local omit_comma = omit_preComma or data.omit_preComma
omit_postComma = data.omit_postComma
local omit_space = omit_preSpace or data.omit_preSpace
omit_postSpace = data.omit_postSpace
if deprecated then
label = '<span class="deprecated-label">' .. label .. '</span>'
if not nocat then
label = label .. m_utilities.format_categories({ "Entries with deprecated labels" }, lang)
end
end
label = (omit_comma and "" or '<span class="ib-comma">,</span>') .. (omit_space and "" or " ") .. label
labels[i] = label .. (nocat and "" or show_categories(data, lang, script, sort_key, script2, sort_key2, term_mode))
end
return
"<span class=\"ib-brac\">(</span><span class=\"ib-content\">" ..
table.concat(labels, "") ..
"</span><span class=\"ib-brac\">)</span>"
end
function export.printConflicts(frame)
local replacements = m_labeldata.replacements
local output = {"; labels:"}
local labels = {}
for label, data in pairs(replacements.labels) do
local lang
if data.languages then
langCode = data.languages[1]
lang = require("Module:languages").getByCode(langCode)
end
local canonicalName
if lang then
canonicalName = lang.getCanonicalName()
end
table.insert(labels, label)
if langCode or canonicalName then
table.insert(output, " (")
end
if langCode then
table.insert(output, "<code>" .. langCode .. "</code>")
end
if canonicalName then
if langCode then
table.insert(output, ", ")
end
table.insert(output, canonicalName)
end
if langCode or canonicalName then
table.insert(output, ")")
end
end
table.sort(labels)
for _, label in ipairs(labels) do
table.insert(output, "\n* " .. label)
end
return table.concat(output)
end
return export