Module:pollasena-roots: Difference between revisions
No edit summary Tag: Reverted |
No edit summary Tag: Manual revert |
||
| Line 111: | Line 111: | ||
end | end | ||
local function parse_args(parent_args, | local function parse_args(parent_args, dest_code, ancestor_codes) | ||
local param_mods = m_param_utils.construct_param_mods({ | local param_mods = m_param_utils.construct_param_mods({{group = {"link", "q", "l"}}}) | ||
} | local dest_lang = m_lang.getByCode(dest_code) | ||
local etymologies = {} | |||
-- iterate in stable order | |||
local | for _, ancestor in ipairs(ancestor_codes) do | ||
local code = ancestor.code | |||
local lang_options = ancestor.options or {} | |||
local ancestor_lang = m_lang.getByCode(code) | |||
local ancestor_params = { | |||
local | |||
[1] = { | [1] = { | ||
required = not | required = not lang_options.optional, | ||
list = | list = lang_options.roots, | ||
default = lang_options.default, | |||
}, | }, | ||
} | } | ||
local | if lang_options.roots then | ||
params = | ancestor_params[1].allow_holes = true | ||
end | |||
local parsed = m_param_utils.parse_term_with_inline_modifiers_and_separate_params({ | |||
params = ancestor_params, | |||
param_mods = param_mods, | param_mods = param_mods, | ||
raw_args | raw_args = parent_args, | ||
termarg = 1, | termarg = 1, | ||
lang = | lang = ancestor_lang, | ||
}) | }) | ||
local terms = | local terms = parsed.terms | ||
-- ensure at least one term exists | |||
if not terms[1] then | if not terms[1] then | ||
terms[1] = { lang = | terms[1] = { lang = ancestor_lang } | ||
end | end | ||
local etymology = m_etym.format_derived({ | |||
lang = | lang = dest_lang, | ||
sources = { ancestor_lang }, | |||
terms = terms, | terms = terms, | ||
} | nocat = parent_args.nocat, | ||
template_name = "derived", | |||
}) | |||
table.insert(etymologies, etymology) | |||
end | end | ||
return | return etymologies | ||
end | end | ||
local function concat_etymologies( | local function concat_etymologies(parent_args, etymologies) | ||
local capital = parent_args.nocap and "f" or "F" | |||
return capital .. "rom " .. table.concat(etymologies, ", from ") .. "." | |||
end | end | ||
| Line 177: | Line 175: | ||
local parent_args = frame:getParent().args | local parent_args = frame:getParent().args | ||
local dest_lang = m_lang.getByCode("qsc") | local dest_lang = m_lang.getByCode("qsc") | ||
local ancestor_codes = { | |||
local | ["sekh"] = {default = "asʰilavən"}, | ||
{ | ["wasc"] = {optional = true, roots = true, default = "asł-ila"} | ||
} | } | ||
local | local evolution = parse_args(parent_args, "qsc", ancestor_codes) | ||
return concat_etymologies( | |||
return concat_etymologies(parent_args, evolution) | |||
end | end | ||
| Line 190: | Line 188: | ||
local parent_args = frame:getParent().args | local parent_args = frame:getParent().args | ||
local source_code = parent_args.source | local source_code = parent_args.source | ||
local ancestor_codes = { | local ancestor_codes = { | ||
["lyti-mid"] = {optional = not parent_args.mid}, | |||
["lyti-old"] = {optional = not parent_args.old}, | |||
[source_code] = {}, | |||
} | } | ||
local | local terms, args = parse_args(parent_args, "lyti", ancestor_codes) | ||
end | end | ||
return export | return export | ||