Module:Labels

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 not 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 local already_seen = {} 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 --[=[			Do not use the data in the table if the current language is not in the "languages" list. If the original label was an alias, and was redirected to a label with a data file, go back to the original label. For example, suppose the label "Rome" is used with the language code "en" (English). "Rome" redirects to "Romanesco" in Module:labels/data/regional. The only language in the "languages" list is "it" (Italian). Because the language code provided to the template was not "it", the label's data file will not be used, and the label will display as "Rome". tracking:	Special:WhatLinksHere/Template:tracking/labels/incorrect-language Special:WhatLinksHere/Template:tracking/labels/redirect-undone ]=]		local languages = data.languages if languages and not languages[lang_code] then require("Module:debug").track("labels/incorrect-language") mw.log("incorrect language in label template " .. lang_code .. ":" .. label) if alias and label ~= alias then require("Module:debug").track("labels/redirect-undone") mw.log("redirect undone in label template " .. lang_code .. ":" .. label .. " > " .. alias) label = alias end 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 or data.Wikipedia are set to true, there is a glossary definition				with an anchor identical to the label, or a Wikipedia article with a title				identical to the label.					For example, the code						labels["formal"] = {							glossary = true,						}					indicates that there is a glossary entry for "formal".				Otherwise, data.glossary and data.Wikipedia specify the title or the anchor. if data.glossary then local glossary_entry = type(data.glossary) == "string" and data.glossary or label label = "" .. ( data.display or label ) .. "" elseif data.Wikipedia then Wikipedia_entry = type(data.Wikipedia) == "string" and data.Wikipedia or label label = "" .. ( data.display or 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 = ' ' .. label .. ' '			if not nocat then label = label .. m_utilities.format_categories({ "Entries with deprecated labels" }, lang) end end local label_without_comma_or_space = (data.topical_categories or data.regional_categories			or data.plain_categories or data.pos_categories			or data.sense_categories) and label or nil label = (omit_comma and "" or ', ') .. (omit_space and "" or "&#32;") .. label -- Track label text. If label text was previously used, don't show it, -- but include the categories. -- For an example, see hypocretin. if already_seen[label_without_comma_or_space] then labels[i] = nocat and "" or				show_categories(data, lang, script, sort_key, script2, sort_key2, term_mode) else labels[i] = label .. (				nocat and "" or				show_categories(data, lang, script, sort_key, script2, sort_key2, term_mode)			) end if label_without_comma_or_space then already_seen[label_without_comma_or_space] = true end end return "( " ..		table.concat(labels, "") ..		" ) " end

return export