Module:pollasena-roots: Difference between revisions
No edit summary Tag: Reverted |
No edit summary Tag: Reverted |
||
| Line 111: | Line 111: | ||
end | end | ||
local function parse_args(parent_args, | local function parse_args(parent_args, ancestor_specs) | ||
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 parsed = {} | |||
local parsed = | local common = { | ||
nocat = parent_args.nocat, | |||
nocap = parent_args.nocap, | |||
} | |||
} | |||
for i, spec in ipairs(ancestor_specs) do | |||
for i, | local lang = m_lang.getByCode(spec.code) | ||
local | local params = { | ||
local | [1] = { | ||
required = not spec.optional, | |||
list = spec.roots and "term", | |||
allow_holes = spec.roots or nil, | |||
}, | |||
} | |||
local terms_obj = m_param_utils.parse_term_with_inline_modifiers_and_separate_params({ | |||
local | params = params, | ||
param_mods = param_mods, | |||
raw_args = { [1] = parent_args[i] }, -- map positional arg i -> local [1] | |||
termarg = 1, | |||
lang = lang, | |||
sc = "sc.default", | |||
}) | |||
local terms = terms_obj.terms | |||
if not terms[1] then | if not terms[1] then | ||
terms[1] = { lang = | terms[1] = { lang = lang } -- allow empty optional term if desired | ||
end | end | ||
parsed[i] = { | |||
lang = lang, | |||
lang = | |||
terms = terms, | terms = terms, | ||
} | |||
} | |||
end | end | ||
return | return parsed, common | ||
end | end | ||
local function concat_etymologies(parsed, opts, dest_lang) | |||
local function concat_etymologies( | local chunks = {} | ||
local capital = | |||
for _, item in ipairs(parsed) do | |||
if item.terms and item.terms[1] then | |||
table.insert(chunks, m_etym.format_derived({ | |||
lang = dest_lang, | |||
sources = { item.lang }, | |||
terms = item.terms, | |||
nocat = opts.nocat, | |||
template_name = "der", | |||
})) | |||
end | |||
end | |||
local capital = opts.nocap and "f" or "F" | |||
local text = capital .. "rom " .. table.concat(chunks, ", from ") | |||
return text .. "." | |||
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 | local ancestor_specs = { | ||
{ code = "sekh", | { code = "sekh", optional = false }, | ||
{ code = "wasc", | { code = "wasc", optional = true, roots = true }, | ||
} | } | ||
local | local parsed, opts = parse_args(parent_args, ancestor_specs) | ||
return concat_etymologies( | return concat_etymologies(parsed, opts, dest_lang) | ||
end | end | ||