مۆدیوول:see
"بەڵگەدارکردنی ئەم مۆدیوولە دەکرێ لە مۆدیوول:see/docدا دروست بکرێ"
local export = {}
local m_languages = require("Module:languages")
local m_links = require("Module:links")
local rsplit = mw.text.split
local function fetch_script(sc, param)
return sc and require("Module:scripts").getByCode(sc, param) or nil
end
local function parse_args(args)
local params = {
[1] = {required = true, default = "und"},
[2] = {list = true, allow_holes = true},
["t"] = {list = true, allow_holes = true},
["gloss"] = {list = true, allow_holes = true, alias_of = "t"},
["tr"] = {list = true, allow_holes = true},
["ts"] = {list = true, allow_holes = true},
["g"] = {list = true, allow_holes = true},
["id"] = {list = true, allow_holes = true},
["alt"] = {list = true, allow_holes = true},
["q"] = {list = true, allow_holes = true},
["qq"] = {list = true, allow_holes = true},
["lit"] = {list = true, allow_holes = true},
["pos"] = {list = true, allow_holes = true},
-- Note, lang1=, lang2=, ... are different from 1=; the former apply to
-- individual arguments, while the latter applies to all arguments
["lang"] = {list = true, allow_holes = true, require_index = true},
["sc"] = {},
-- Note, sc1=, sc2=, ... are different from sc=; the former apply to
-- individual arguments when lang1=, lang2=, ... is specified, while
-- the latter applies to all arguments where langN=... isn't specified
["partsc"] = {list = "sc", allow_holes = true, require_index = true},
["noast"] = {type = "boolean"},
["and"] = {type = "boolean"},
["compare"] = {type = "boolean"},
["notes"] = {},
}
args = require("Module:parameters").process(args, params)
local lang = m_languages.getByCode(args[1], 1)
return args, lang, fetch_script(args["sc"], "sc")
end
local function get_parsed_part(args, i)
local term_index = 2
local term = args[term_index][i]
local alt = args["alt"][i]
local id = args["id"][i]
local lang = args["lang"][i]
local sc = fetch_script(args["partsc"][i], "sc" .. i)
local tr = args["tr"][i]
local ts = args["ts"][i]
local gloss = args["t"][i]
local pos = args["pos"][i]
local lit = args["lit"][i]
local q = args["q"][i]
local qq = args["qq"][i]
local g = args["g"][i]
if lang then
lang = m_languages.getByCode(lang, "lang" .. i, "allow etym")
end
if not (term or alt or tr or ts) then
require("Module:debug").track("see/no term or alt or tr")
return nil
else
local termlang, actual_term
if term then
termlang, actual_term = term:match("^([A-Za-z0-9._-]+):(.*)$")
if termlang and termlang ~= "w" then -- special handling for w:... links to Wikipedia
-- -1 since i is one-based
termlang = m_languages.getByCode(termlang, term_index + i - 1, "allow etym")
else
termlang = nil
actual_term = term
end
end
if lang and termlang then
error(("Both lang%s= and a language in %s= given; specify one or the other"):format(i, term_index + i - 1))
end
return { term = actual_term, alt = alt, id = id, lang = lang or termlang, sc = sc, tr = tr,
ts = ts, gloss = gloss, pos = pos, lit = lit, q = q, qq = qq,
genders = g and rsplit(g, ",") or {}
}
end
end
local function get_parsed_parts(args)
local parts = {}
-- Find the maximum index among any of the list parameters.
local maxmaxindex = 0
for k, v in pairs(args) do
if type(v) == "table" and v.maxindex and v.maxindex > maxmaxindex then
maxmaxindex = v.maxindex
end
end
for index = 1, maxmaxindex do
local part = get_parsed_part(args, index)
parts[index] = part
end
return parts
end
function export.see(frame)
local args, lang, sc = parse_args(frame:getParent().args)
local nocat = args["nocat"]
local notext = args["notext"]
local text = not notext and frame.args["text"]
local oftext = not notext and (frame.args["oftext"] or text and "of")
local cat = not nocat and frame.args["cat"]
local parts = get_parsed_parts(args)
if not next(parts) and mw.title.getCurrentTitle().nsText == "Template" then
parts = { {term = "term"} }
end
local textparts = {}
local function ins(text)
table.insert(textparts, text)
end
if not args.noast then
ins("* ")
end
ins("''")
if args["and"] then
ins("and ")
end
if args.compare then
ins("compare with: ")
else
ins("بڕوانە: ")
end
ins("''")
local termparts = {}
-- Make links out of all the parts
for i, part in ipairs(parts) do
local result
if part.q then
result = require("Module:qualifier").format_qualifier(part.q) .. " "
else
result = ""
end
part.sc = part.sc or sc
if part.lang then
result = result .. require("Module:etymology").format_derived(nil, part, nil, true, "see")
else
part.lang = lang
result = result .. m_links.full_link(part, nil, false)
end
if part.qq then
result = result .. " " .. require("Module:qualifier").format_qualifier(part.qq)
end
table.insert(termparts, result)
end
if #termparts == 1 then
ins(termparts[1])
else
ins(require("Module:table").serialCommaJoin(termparts, {italicizeConj = true}))
end
if args.notes then
ins(" ''")
ins(args.notes)
ins("''")
end
return table.concat(textparts)
end
return export