Module:pollasena-roots: Difference between revisions
No edit summary Tag: Reverted |
No edit summary Tag: Manual revert |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 113: | Line 113: | ||
local function parse_args(parent_args, dest_code, ancestor_codes) | local function parse_args(parent_args, dest_code, ancestor_codes) | ||
local param_mods = m_param_utils.construct_param_mods({{group = {"link", "q", "l"}}}) | local param_mods = m_param_utils.construct_param_mods({{group = {"link", "q", "l"}}}) | ||
local dest_lang = m_lang.getByCode(dest_code) | local dest_lang = m_lang.getByCode(dest_code) | ||
local etymologies = {} | local etymologies = {} | ||
-- | -- iterate in stable order | ||
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_lang = m_lang.getByCode(code) | ||
local ancestor_params = { | |||
local | [1] = { | ||
required = not lang_options.optional, | |||
list = lang_options.roots, | |||
default = lang_options.default, | |||
}, | |||
} | |||
if lang_options.roots then | |||
ancestor_params[1].allow_holes = true | |||
end | end | ||
-- | local parsed = m_param_utils.parse_term_with_inline_modifiers_and_separate_params({ | ||
params = ancestor_params, | |||
param_mods = param_mods, | |||
raw_args = parent_args, | |||
termarg = 1, | |||
lang = ancestor_lang, | |||
}) | |||
local terms = parsed.terms | |||
-- ensure at least one term exists | |||
if not terms[1] then | if not terms[1] then | ||
terms[1] = { lang = ancestor_lang } | terms[1] = { lang = ancestor_lang } | ||
end | end | ||
local etymology = m_etym.format_derived({ | local etymology = m_etym.format_derived({ | ||
lang = dest_lang, | lang = dest_lang, | ||
| Line 163: | Line 165: | ||
end | end | ||
local function concat_etymologies(parent_args, etymologies) | local function concat_etymologies(parent_args, etymologies) | ||
local capital = parent_args.nocap and "f" or "F" | local capital = parent_args.nocap and "f" or "F" | ||
return capital .. "rom " .. table.concat(etymologies, ", from ") .. "." | |||
return capital .. "rom " .. table.concat(etymologies, ", from ") .. "." | |||
end | end | ||
function export.qsc(frame) | function export.qsc(frame) | ||
local parent_args = frame:getParent().args | local parent_args = frame:getParent().args | ||
local dest_lang = m_lang.getByCode("qsc") | |||
local ancestor_codes = { | local ancestor_codes = { | ||
["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(parent_args, | |||
return concat_etymologies(parent_args, evolution) | |||
end | end | ||
| Line 184: | 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 | ||