Module:documentation/sortkey

local export = {}

local function fake_frame(args, parent_args) return { args = args, getParent = function return { args = parent_args, }		end } end

function get_by_code(code) return require "Module:languages".getByCode(code, nil, false, true) or require "Module:scripts".getByCode(code) end

local function get_code_from_title_without_namespace(title_without_namespace) local prefix = title_without_namespace:match("^(.+)%-sortkey%f[/%z]") if not prefix then error("Base segment of title should end in -sortkey: " .. title_without_namespace) end local code = prefix local lang_or_family_or_script = get_by_code(code) return code, lang_or_family_or_script end

function export.documentation(title_without_namespace, explanation) local code, lang_or_family_or_script = get_code_from_title_without_namespace(title_without_namespace) return export.documentation_from_code(code, explanation, title_without_namespace) end

function export.documentation_from_code(code, explanation, title_without_namespace) local lang_or_family_or_script = get_by_code(code) if not lang_or_family_or_script then return "Language code in page name not recognized." end local category_name = lang_or_family_or_script:getCategoryName local sortkey_input if lang_or_family_or_script:hasType("script") then sortkey_input = "text in the " .. category_name .. "" elseif lang_or_family_or_script:hasType("family") then sortkey_input = "text in one of the " .. category_name .. "" else -- language sortkey_input = "" .. category_name .. " text" end return "This module will sort " .. sortkey_input .. (explanation and " " .. explanation or "") .. ". "		.. require "Module:documentation".sortkeyModuleLangList({args = { [1] = title_without_namespace:gsub("/documentation$", "") }}) .. [=[

The module should preferably not be called directly from templates or other modules. To use it from a template, use. Within a module, use Module:languages.

For testcases, see Module:]=] .. title_without_namespace:gsub("/documentation$", "") .. [=[/testcases.

Functions

 * Generates a sortkey for a given piece of  written in the script specified by the code , and language specified by the code.
 * When the sort fails, returns .]=]
 * When the sort fails, returns .]=]

.. require "Module:module categorization".categorize(fake_frame({ is_template = "1", [1] = title_without_namespace, }, {				[1] = code, })) end

function export.documentation_template(frame) -- Parameters to : -- |code|description -- Ignore code because we get it from the page name. local pagename = mw.title.getCurrentTitle.text local args = frame:getParent.args if args[1] and get_code_from_title_without_namespace(pagename) ~= args[1] then -- Special:WhatLinksHere/Wiktionary:Tracking/sortkey/input different from title require("Module:debug").track("sortkey/input different from title") end if args[1] then return export.documentation_from_code(args[1], args[2], pagename) else return export.documentation(pagename, args[2]) end end

return export