Module:languages/templates: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
local export = {} | |||
local concat = table.concat | local concat = table.concat | ||
local insert = table.insert | local insert = table.insert | ||
local sort = table.sort | local sort = table.sort | ||
local scripts_module = "Module:scripts" | |||
local | local function get_script_by_code(...) | ||
get_script_by_code = require(scripts_module).getByCode | |||
return get_script_by_code(...) | |||
end | |||
function export.exists(frame) | function export.exists(frame) | ||
| Line 15: | Line 21: | ||
do | do | ||
local function getByCode(frame, allow_etym) | local function getByCode(frame, allow_etym) | ||
local plain = | local plain = true | ||
local args = require("Module:parameters").process(frame.args, { | local args = require("Module:parameters").process(frame.args, { | ||
[1] = {required = true, type = allow_etym and "language" or "full language"}, | [1] = {required = true, type = allow_etym and "language" or "full language"}, | ||
[2] = {required = true}, | [2] = {required = true}, | ||
[3] = plain, | [3] = plain, | ||
[4] = | [4] = plain, | ||
[5] = plain, | [5] = plain, | ||
}) | }) | ||
local function check_empty(...) | |||
local varargs = {...} | |||
for i = 1, select("#", ...) do | |||
if args[varargs[i]] then | |||
error(("Cannot specify a value for argument %s= when using subfunction '%s' of getByCode()"):format( | |||
varargs[i], args[2])) | |||
end | |||
end | |||
end | |||
return require("Module:language-like").templateGetByCode(args, | return require("Module:language-like").templateGetByCode(args, | ||
function(itemname) | function(itemname) | ||
| Line 34: | Line 51: | ||
end | end | ||
if list then | if list then | ||
local retval = list[tonumber(args[3]) or error("Please specify the numeric index of the desired item.")] | check_empty(4, 5) | ||
local retval = list[tonumber(args[3]) or error("Please specify the numeric index of the desired item in 3=.")] | |||
if retval then | if retval then | ||
if type(retval) == "string" then | if type(retval) == "string" then | ||
| Line 46: | Line 64: | ||
end | end | ||
if itemname == "transliterate" then | if itemname == "transliterate" then | ||
return (args[1]:transliterate(args[3], | local sc = get_script_by_code(args[4]) | ||
return (args[1]:transliterate(args[3], sc, args[5])) or "" | |||
elseif itemname == "makeDisplayText" then | elseif itemname == "makeDisplayText" then | ||
return (args[1]:makeDisplayText(args[3], | local sc = get_script_by_code(args[4]) | ||
check_empty(5) | |||
return (args[1]:makeDisplayText(args[3], sc)) or "" | |||
elseif itemname == "makeEntryName" then | elseif itemname == "makeEntryName" then | ||
return | -- FIXME, find places that use makeEntryName and convert to stripDiacritics | ||
local sc = get_script_by_code(args[4]) | |||
check_empty(5) | |||
return args[1]:makeEntryName(args[3], sc) or "" | |||
elseif itemname == "stripDiacritics" then | |||
local sc = get_script_by_code(args[4]) | |||
check_empty(5) | |||
return args[1]:stripDiacritics(args[3], sc) or "" | |||
elseif itemname == "makeSortKey" then | elseif itemname == "makeSortKey" then | ||
return (args[1]:makeSortKey(args[3], args[ | local sc = get_script_by_code(args[4]) | ||
check_empty(5) | |||
return (args[1]:makeSortKey(args[3], sc)) or "" | |||
elseif itemname == "logicalToPhysical" then | |||
check_empty(4, 5) | |||
return args[1]:logicalToPhysical(args[3]) or "" | |||
elseif itemname == "countCharacters" then | elseif itemname == "countCharacters" then | ||
local sc = get_script_by_code(args[4]) | |||
check_empty(5) | |||
return sc:countCharacters(args[3] or "") | |||
elseif itemname == "findBestScript" then | elseif itemname == "findBestScript" then | ||
return args[1]:findBestScript(args[3] or ""):getCode() | check_empty(5) | ||
return args[1]:findBestScript(args[3] or "", args[4]):getCode() | |||
end | end | ||
end | end | ||
Latest revision as of 15:39, 11 May 2026
- This module lacks a documentation subpage. Please create it.
- Useful links: root page • root page’s subpages • links • transclusions • testcases • sandbox
local export = {}
local concat = table.concat
local insert = table.insert
local sort = table.sort
local scripts_module = "Module:scripts"
local function get_script_by_code(...)
get_script_by_code = require(scripts_module).getByCode
return get_script_by_code(...)
end
function export.exists(frame)
return require("Module:languages").getByCode(
require("Module:parameters").process(frame.args, {
[1] = {required = true}
})[1]
) and "1" or ""
end
do
local function getByCode(frame, allow_etym)
local plain = true
local args = require("Module:parameters").process(frame.args, {
[1] = {required = true, type = allow_etym and "language" or "full language"},
[2] = {required = true},
[3] = plain,
[4] = plain,
[5] = plain,
})
local function check_empty(...)
local varargs = {...}
for i = 1, select("#", ...) do
if args[varargs[i]] then
error(("Cannot specify a value for argument %s= when using subfunction '%s' of getByCode()"):format(
varargs[i], args[2]))
end
end
end
return require("Module:language-like").templateGetByCode(args,
function(itemname)
local list
if itemname == "getWikimediaLanguages" then
list = args[1]:getWikimediaLanguages()
elseif itemname == "getScripts" then
list = args[1]:getScriptCodes()
elseif itemname == "getAncestors" then
list = args[1]:getAncestors()
end
if list then
check_empty(4, 5)
local retval = list[tonumber(args[3]) or error("Please specify the numeric index of the desired item in 3=.")]
if retval then
if type(retval) == "string" then
return retval
else
return retval:getCode()
end
else
return ""
end
end
if itemname == "transliterate" then
local sc = get_script_by_code(args[4])
return (args[1]:transliterate(args[3], sc, args[5])) or ""
elseif itemname == "makeDisplayText" then
local sc = get_script_by_code(args[4])
check_empty(5)
return (args[1]:makeDisplayText(args[3], sc)) or ""
elseif itemname == "makeEntryName" then
-- FIXME, find places that use makeEntryName and convert to stripDiacritics
local sc = get_script_by_code(args[4])
check_empty(5)
return args[1]:makeEntryName(args[3], sc) or ""
elseif itemname == "stripDiacritics" then
local sc = get_script_by_code(args[4])
check_empty(5)
return args[1]:stripDiacritics(args[3], sc) or ""
elseif itemname == "makeSortKey" then
local sc = get_script_by_code(args[4])
check_empty(5)
return (args[1]:makeSortKey(args[3], sc)) or ""
elseif itemname == "logicalToPhysical" then
check_empty(4, 5)
return args[1]:logicalToPhysical(args[3]) or ""
elseif itemname == "countCharacters" then
local sc = get_script_by_code(args[4])
check_empty(5)
return sc:countCharacters(args[3] or "")
elseif itemname == "findBestScript" then
check_empty(5)
return args[1]:findBestScript(args[3] or "", args[4]):getCode()
end
end
)
end
-- Used by the following JS:
-- * [[WT:ACCEL]]
-- * [[WT:EDIT]]
-- * [[WT:NEC]]
function export.getByCode(frame)
return getByCode(frame, false)
end
function export.getByCodeAllowEtym(frame)
return getByCode(frame, true)
end
end
function export.getByCanonicalName(frame)
return require("Module:parameters").process(frame.args, {
[1] = {required = true, type = "language", method = "name"}
})[1]:getCode() or ""
end
function export.getCanonicalName(frame)
local args = require("Module:parameters").process(
require("Module:yesno")(frame.args.parent) and frame:getParent().args or frame.args,
{
[1] = {required = true},
["return_if_invalid"] = {type = "boolean"},
}
)
local lang = require("Module:languages").getByCode(args[1], nil, true)
return lang and lang:getCanonicalName() or not args.return_if_invalid and "" or args[1]
end
function export.getFull(frame)
local args = require("Module:parameters").process(
require("Module:yesno")(frame.args.parent) and frame:getParent().args or frame.args,
{
[1] = {required = true, type = "language"},
}
)
return args[1]:getFullCode()
end
function export.getChildren(frame)
local args = require("Module:parameters").process(
require("Module:yesno")(frame.args.parent) and frame:getParent().args or frame.args,
{
[1] = {required = true, type = "language"},
}
)
local children = args[1]:getChildren()
sort(children, function(a, b)
return a:getCanonicalName() < b:getCanonicalName()
end)
local list = {}
for _, child in ipairs(children) do
insert(list, "* " .. child:makeWikipediaLink() .. ": " .. "<code>" .. child:getCode() .. "</code>")
end
return concat(list, "\n")
end
return export