Module:etymology/templates: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
 
Line 1: Line 1:
local require_when_needed = require("Module:utilities/require when needed")
local concat = table.concat
local format_categories = require_when_needed("Module:utilities", "format_categories")
local insert = table.insert
local process_params = require_when_needed("Module:parameters", "process")
local trim = mw.text.trim
local lower = mw.ustring.lower
local export = {}
local export = {}


local m_languages = require("Module:languages")
local m_internal = require("Module:etymology/templates/internal")
local m_internal = require("Module:etymology/templates/internal")


-- For testing
-- For testing
local force_cat = false
local force_cat = false


function export.etyl(frame)
function export.etyl(frame)
local params = {
local params = {
[1] = {required = true, default = "und"},
[1] = {required = true, type = "language", default = "und"},
[2] = {},
[2] = {type = "language", default = "en"},
["sort"] = {},
["sort"] = {},
}
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local source = m_internal.fetch_source(args[1])
local lang = args[2]
local sort_key = args["sort"]
-- Empty language means English, but "-" means no language. Yes, confusing...
-- Empty language means English, but "-" means no language. Yes, confusing...
if not lang then
local args = frame:getParent().args
lang = "en"
if args[2] and trim(args[2]) == "-" then
elseif lang == "-" then
params[2] = nil
lang = nil
args = process_params({
[1] = args[1],
["sort"] = args["sort"]
}, params)
else
args = process_params(args, params)
end
end
if lang then
return require("Module:etymology").format_etyl(args[2], args[1], args["sort"])
lang = m_internal.fetch_lang(lang, 2)
end
return require("Module:etymology").format_etyl(lang, source, sort_key)
end
end


Line 48: Line 49:
local bortype = frame.args.bortype
local bortype = frame.args.bortype
local args = frame:getParent().args
local args = frame:getParent().args
if args.gloss then
require("Module:debug").track("borrowing/" .. bortype .. "/gloss param")
end


-- More informative error message for {{calque}}, which used to support other params.
-- More informative error message for {{calque}}, which used to support other params.
Line 57: Line 61:
end
end
local args, lang, term, sources = m_internal.parse_2_lang_args(frame, "has text")
local lang, term, sources
args, lang, term, sources = m_internal.parse_2_lang_args(frame, "has text")
local m_etymology_specialized = require("Module:etymology/specialized")
local m_etymology_specialized = require("Module:etymology/specialized")
if sources then
if sources then
Line 72: Line 77:
-- {{ellipsis}}, {{rebracketing}}, and {{reduplication}} that have a single
-- {{ellipsis}}, {{rebracketing}}, and {{reduplication}} that have a single
-- associated term.
-- associated term.
function export.misc_variant(frame)
do
local params = {
local function get_args(frame)
[1] = {required = true, default = "und"},
local alias_of_t = {alias_of = "t"}
[2] = {},
local boolean = {type = "boolean"}
[3] = {alias_of = "alt"},
local plain = {}
[4] = {alias_of = "t"},
local params = {
[1] = {required = true, type = "language", default = "und"},
["alt"] = {},
[2] = plain,
["gloss"] = {alias_of = "t"},
[3] = {alias_of = "alt"},
["g"] = {list = true},
[4] = alias_of_t,
["id"] = {},
["lit"] = {},
["alt"] = plain,
["pos"] = {},
["gloss"] = alias_of_t,
["t"] = {},
["g"] = {list = true},
["tr"] = {},
["id"] = plain,
["ts"] = {},
["lit"] = plain,
["sc"] = {},
["pos"] = plain,
["t"] = plain,
["nocap"] = {type = "boolean"}, -- should be processed in the template itself
["tr"] = plain,
["notext"] = {type = "boolean"},
["ts"] = plain,
["nocat"] = {type = "boolean"},
["sc"] = {type = "script"},
["sort"] = {},
}
["nocap"] = boolean, -- should be processed in the template itself
["notext"] = boolean,
-- |ignore-params= parameter to module invocation specifies
["nocat"] = boolean,
-- additional parameter names to allow  in template invocation, separated by
["sort"] = plain,
-- commas. They must consist of ASCII letters or numbers or hyphens.
}
local ignore_params = frame.args["ignore-params"]
-- |ignore-params= parameter to module invocation specifies
if ignore_params then
-- additional parameter names to allow  in template invocation, separated by
ignore_params = mw.text.trim(ignore_params)
-- commas. They must consist of ASCII letters or numbers or hyphens.
if not ignore_params:match "^[%w%-,]+$" then
local ignore_params = frame.args["ignore-params"]
error("Invalid characters in |ignore-params=: " .. ignore_params:gsub("[%w%-,]+", ""))
if ignore_params then
end
ignore_params = trim(ignore_params)
for param in ignore_params:gmatch "[%w%-]+" do
if not ignore_params:match("^[%w%-,]+$") then
if params[param] then
error("Invalid characters in |ignore-params=: " .. ignore_params:gsub("[%w%-,]+", ""))
error("Duplicate param |" .. param
end
.. " in |ignore-params=: already specified in params")
for param in ignore_params:gmatch("[%w%-]+") do
if params[param] then
error("Duplicate param |" .. param
.. " in |ignore-params=: already specified in params")
end
params[param] = plain
end
end
params[param] = {}
end
end
return process_params(frame:getParent().args, params)
end
end
local args = require("Module:parameters").process(frame:getParent().args, params)
function export.misc_variant(frame)
local args = get_args(frame)
local lang = m_internal.fetch_lang(args[1], 1)
local lang = args[1]
local sc = m_internal.fetch_script(args["sc"], "sc")
local sc = args["sc"]


local parts = {}
local parts = {}
if not args["notext"] then
table.insert(parts, frame.args["text"])
end
if args[2] or args["alt"] then
if not args["notext"] then
if not args["notext"] then
table.insert(parts, " ")
insert(parts, frame.args["text"])
table.insert(parts, frame.args["oftext"] or "of")
end
table.insert(parts, " ")
if args[2] or args["alt"] then
if not args["notext"] then
insert(parts, " ")
insert(parts, frame.args["oftext"] or "of")
insert(parts, " ")
end
insert(parts, require("Module:links").full_link(
{
lang = lang,
sc = sc,
term = args[2],
alt = args["alt"],
id = args["id"],
tr = args["tr"],
ts = args["ts"],
genders = args["g"],
gloss = args["t"],
pos = args["pos"],
lit = args["lit"],
nocont = true,
},
"term"))
end
end
table.insert(parts, require("Module:links").full_link(
-- Allow |cat=, |cat2=, |cat3=, etc. They must be sequential. If |cat=
{
-- is not defined, |cat2= will not be checked. Empty categories are ignored.
lang = lang,
local categories = {}
sc = sc,
if not args["nocat"] and frame.args["cat"] then
term = args[2],
local cat_number
alt = args["alt"],
while true do
id = args["id"],
local cat = frame.args["cat" .. (cat_number or "")]
tr = args["tr"],
if not cat then break end
ts = args["ts"],
cat = trim(cat)
genders = args["g"],
if cat ~= "" then
gloss = args["t"],
insert(categories, lang:getFullName() .. " " .. cat)
pos = args["pos"],
end
lit = args["lit"],
cat_number = (cat_number or 1) + 1
nocont = true,
},
"term",
true))
end
-- Allow |cat=, |cat2=, |cat3=, etc. They must be sequential. If |cat=
-- is not defined, |cat2= will not be checked. Empty categories are ignored.
local categories = {}
if not args["nocat"] and frame.args["cat"] then
local cat_number
while true do
local cat = frame.args["cat" .. (cat_number or "")]
if not cat then break end
cat = mw.text.trim(cat)
if cat ~= "" then
table.insert(categories, lang:getCanonicalName() .. " " .. cat)
end
end
cat_number = (cat_number or 1) + 1
end
end
if #categories > 0 then
insert(
parts,
format_categories(categories, lang, args["sort"], nil, force_cat))
end
return concat(parts)
end
end
if #categories > 0 then
table.insert(
parts,
require("Module:utilities/format_categories")(categories, lang, args["sort"], nil, force_cat))
end
return table.concat(parts)
end
end


Line 174: Line 184:
-- Implementation of miscellaneous templates such as {{unknown}} that have no
-- Implementation of miscellaneous templates such as {{unknown}} that have no
-- associated terms.
-- associated terms.
function export.misc_variant_no_term(frame)
do
local params = {
local function get_args(frame)
[1] = {required = true, default = "und"},
local boolean = {type = "boolean"}
local plain = {}
local params = {
[1] = {required = true, type = "language", default = "und"},
 
["title"] = plain,
["nocap"] = boolean, -- should be processed in the template itself
["notext"] = boolean,
["nocat"] = boolean,
["sort"] = plain,
}
if frame.args["title2_alias"] then
params[2] = {alias_of = "title"}
end
return process_params(frame:getParent().args, params)
end


["title"] = {},
function export.misc_variant_no_term(frame)
["nocap"] = {type = "boolean"}, -- should be processed in the template itself
local args = get_args(frame)
["notext"] = {type = "boolean"},
local lang = args[1]
["nocat"] = {type = "boolean"},
["sort"] = {},
local parts = {}
}
if not args["notext"] then
insert(parts, args["title"] or frame.args["text"])
end
if not args["nocat"] and frame.args["cat"] then
local categories = {}
insert(categories, lang:getFullName() .. " " .. frame.args["cat"])
insert(parts, format_categories(categories, lang, args["sort"], nil, force_cat))
end


if frame.args["title2_alias"] then
return concat(parts)
params[2] = {alias_of = "title"}
end
end
local args = require("Module:parameters").process(frame:getParent().args, params)
local lang = m_internal.fetch_lang(args[1], 1)


local parts = {}
--This function works similarly to misc_variant_no_term(), but with some automatic linking to the glossary in `title`.
if not args["notext"] then
function export.onomatopoeia(frame)
table.insert(parts, args["title"] or frame.args["text"])
local args = get_args(frame)
end
 
if not args["nocat"] and frame.args["cat"] then
if args["title"] and (lower(args["title"]) == "imitative" or lower(args["title"]) == "imitation") then
local categories = {}
args["title"] = "[[Appendix:Glossary#imitative|" .. args["title"] .. "]]"
table.insert(categories, lang:getCanonicalName() .. " " .. frame.args["cat"])
end
table.insert(parts, require("Module:utilities/format_categories")(categories, lang, args["sort"], nil, force_cat))
 
local lang = args[1]
local parts = {}
if not args["notext"] then
insert(parts, args["title"] or frame.args["text"])
end
if not args["nocat"] and frame.args["cat"] then
local categories = {}
insert(categories, lang:getFullName() .. " " .. frame.args["cat"])
insert(parts, format_categories(categories, lang, args["sort"], nil, force_cat))
end
 
return concat(parts)
end
end
return table.concat(parts)
end
end


return export
return export

Navigation menu