Module:pollasena-roots: Difference between revisions

No edit summary
No edit summary
Tag: Manual revert
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
local m_put = require("Module:parse utilities")
local m_put = require("Module:parse utilities")
local m_families = require("Module:families")
local m_families = require("Module:families")
local m_languages = require("Module:languages")
local m_lang = require("Module:languages")
local m_param = require("Module:parameters")
local m_param = require("Module:parameters")
local m_param_utils = require("Module:parameter utilities")
local m_param_utils = require("Module:parameter utilities")
local m_etym = require("Module:etymology")
local m_links = require("Module:links")


local gsub = mw.ustring.gsub
local gsub = mw.ustring.gsub
Line 12: Line 14:


local export = {}
local export = {}
local function getLanguage(code)
return require("Module:languages").getByCode(code)
end


local function ncategories(categories)
local function ncategories(categories)
Line 34: Line 32:
end
end
local data = {term = term, alt = alt or term, lang = lang, to_wikt = natlang}
local data = {term = term, alt = alt or term, lang = lang, to_wikt = natlang}
return require('Module:links').full_link(data, "term")
return m_links.full_link(data, "term")
end
end


Line 113: Line 111:
end
end


local function parse_etym_args(parent_args, base_params, dest_code)
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 etymologies = {}


local terms, args = m_param_utils.parse_term_with_inline_modifiers_and_separate_params({
-- iterate in stable order
params = base_params,
for _, ancestor in ipairs(ancestor_codes) do
param_mods = param_mods,
local code = ancestor.code
raw_args = parent_args,
local lang_options = ancestor.options or {}
termarg = 1,
 
lang = function(args)
local ancestor_lang = m_lang.getByCode(code)
return args[sourcearg][#args[sourcearg]]
 
end,
local ancestor_params = {
sc = "sc",
[1] = {
})
required = not lang_options.optional,
-- If term param 3= is empty, there will be no terms in terms.terms. To facilitate further code and for
list = lang_options.roots,
-- compatibility,, insert one. It will display as <small>[Term?]</small>.
default = lang_options.default,
if not terms.terms[1] then
},
terms.terms[1] = {
lang = args[sourcearg][#args[sourcearg]],
sc = args.sc,
}
}
if lang_options.roots then
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,
raw_args = parent_args,
termarg = 1,
lang = ancestor_lang,
})
local terms = parsed.terms
-- ensure at least one term exists
if not terms[1] then
terms[1] = { lang = ancestor_lang }
end
local etymology = m_etym.format_derived({
lang = dest_lang,
sources = { ancestor_lang },
terms = terms,
nocat = parent_args.nocat,
template_name = "derived",
})
table.insert(etymologies, etymology)
end
end


return terms.terms, args
return etymologies
end
end


local function concat_etymologies(parent_args, etymologies)
local capital = parent_args.nocap and "f" or "F"
return capital .. "rom " .. table.concat(etymologies, ", from ") .. "."
end


local function parse_args(parent_args, dest_code, ancestor_codes)
function export.qsc(frame)
local params = {
local parent_args = frame:getParent().args
["nocat"] = {type = "boolean"},
local dest_lang = m_lang.getByCode("qsc")
local ancestor_codes = {
["sekh"] = {default = "asʰilavən"},
["wasc"] = {optional = true, roots = true, default = "asł-ila"}
}
}
for i, lang_options in ipairs(ancestor_codes) do
local evolution = parse_args(parent_args, "qsc", ancestor_codes)
params[i] = {
required = not lang_options.optional,
}
end
return parse_etym_args(parent_args, params, dest_code)
return concat_etymologies(parent_args, evolution)
end
end


function export.qsc(frame)
function export.lyti(frame)
local parent_args = frame:getParent().args
local source_code = parent_args.source
local ancestor_codes = {
local ancestor_codes = {
["sekh"] = {},
["lyti-mid"] = {optional = not parent_args.mid},
["wasc"] = {optional = true}
["lyti-old"] = {optional = not parent_args.old},
[source_code] = {},
}
}
local parent_args = frame:getParent().args
local terms, args = parse_args(parent_args, "lyti", ancestor_codes)
local terms, args = parse_args(parent_args, "qsc", ancestor_codes)
 
end
end


return export
return export