Module:User:Benwing2/labels doc

--[=[	This module contains functions to implement templates. The module contains the actual implementation, meant to be called from other Lua code. See Module:labels doc/templates for the function meant to be called directly from templates.

Author: Benwing2 ]=]

local export = {}

local labels_module = "Module:User:Benwing2/labels" local m_labels = require(labels_module) local m_table = require("Module:table") local m_languages = require("Module:languages")

local function sort_by_label(labinfo1, labinfo2) return labinfo1.raw_label < labinfo2.raw_label end

local function create_label_table(label_infos) table.sort(label_infos, sort_by_label) local parts = {}

local function ins(text) table.insert(parts, text) end

ins('{|class="wikitable"') ins("! Label !! Canonical equivalent !! Display form !! Categories !! Defined in !! Deprecated") for _, info in ipairs(label_infos) do		ins("|-") ins("| ") if info.canonical then ins("| ") else ins("|") end ins("| " .. info.label) ins("| " .. table.concat(info.categories, " ")) ins(("| %s"):format(info.module)) if info.deprecated then ins("| Yes") else ins("|") end end ins("|}")

return table.concat(parts, "\n") end

function export.show local submodules = m_labels.get_submodules(nil)

local label_infos = {} local labels_seen = {}

local function process_module(module, lang, label_infos, labels_seen) local module_data = mw.loadData(module) for label, _ in pairs(module_data) do			if labels_seen[label] then table.insert(labels_seen[label], module) else local labinfo = m_labels.get_label_info { label = label, lang = lang, for_doc = true, already_seen = {}, }				labinfo.raw_label = label labinfo.module = module table.insert(label_infos, labinfo) end end end

for _, module in ipairs(submodules) do		process_module(module, nil, label_infos, labels_seen) end

local unrecognized_langcodes = {}

local lang_specific_data_list_module = mw.loadData(m_labels.lang_specific_data_list_module) local lang_specific_data_langs = {} for langcode, _ in pairs(lang_specific_data_list_module.langs_with_lang_specific_modules) do		local lang = m_languages.getByCode(langcode) if not lang then table.insert(unrecognized_langcodes, langcode) else table.insert(lang_specific_data_langs,				{ lang = lang, langcode = langcode, langname = lang:getFullName }) end end table.sort(lang_specific_data_langs, function(a, b) return a.langname < b.langname end)

local parts = {} local function ins(text) table.insert(parts, text) end

ins("===Language-independent===") ins(create_label_table(label_infos))

for _, langobj in ipairs(lang_specific_data_langs) do		local per_language_label_infos = {} local per_language_labels_seen = {} process_module(m_labels.lang_specific_data_modules_prefix .. langobj.langcode, langobj.lang,			per_language_label_infos, per_language_labels_seen) ins(("===%s==="):format(langobj.langname)) ins(create_label_table(per_language_label_infos)) end

return table.concat(parts, "\n") end

return export