Module:descendants: Difference between revisions
Jump to navigation
Jump to search
TheNightAvl (talk | contribs) No edit summary |
TheNightAvl (talk | contribs) No edit summary |
||
Line 41: | Line 41: | ||
return out | return out | ||
end | |||
local function triage_langs(list) | |||
end | end | ||
Line 48: | Line 52: | ||
local current_lang | local current_lang | ||
local terms = {} | local terms = {} | ||
local langs = {} | |||
for i, term in ipairs(args) do --ryn:term1|term2|term3|rad:term1|term2 ... | for i, term in ipairs(args) do --ryn:term1|term2|term3|rad:term1|term2 ... | ||
Line 61: | Line 66: | ||
term = mw.ustring.gsub(term, "^.+%>%:%s*", "") | term = mw.ustring.gsub(term, "^.+%>%:%s*", "") | ||
end | end | ||
if terms[current_lang.code] == nil then terms[current_lang.code] = {} end | if terms[current_lang.code] == nil then | ||
terms[current_lang.code] = {} | |||
table.insert(langs, current_lang) | |||
end | |||
end | end | ||
if lang_change_arged then | if lang_change_arged then | ||
Line 71: | Line 79: | ||
end | end | ||
mw.logObject( | local items = {} | ||
for lang, lang_args in pairs(terms) do | |||
table.insert(lang_args, 1, lang) | |||
items[lang] = export.descendant(lang_args) | |||
end | |||
mw.logObject(items) | |||
end | end | ||
Revision as of 01:34, 30 May 2024
Underlies {{descendant}}
and {{descendant tree}}
.
local export = {}
local getArgs = require("Module:Arguments").getArgs
local m_links = require("Module:links")
local m_languages = require("Module:languages")
local m_inline = require("Module:inline")
function export.descendant(frame)
local args = getArgs(frame)
local out = ""
local lang = m_languages.get_by_code(args[1])
local borrowed = args["borrowed"] or args["bor"] or args["b"]
local see_desc = args["see"]
local noname = args["noname"]
local lostcap = args["lost"] or "lost"
if borrowed then out = "<span class=\"desc-arrow\" title=\"borrowed\">→</span>" .. out end
if not noname then out = out .. lang.name .. ": " end
if args[2] then
local terms = {}
local i = 2
while args[i] do
local term, term_args = m_inline.parse(args[i])
table.insert(terms, m_links.full_link({
language = lang,
term = term,
alt = term_args.alt,
anchor = term_args.anchor or term_args.a,
gloss = term_args.t,
pos = term_args.pos,
nobold = true,
})
)
i = i + 1
end
out = out .. table.concat(terms, ", ")
if see_desc then out = out .. frame:expandTemplate{ title = 'see descendants' } end
else
out = out .. "— (''" .. lostcap .. "'')"
end
return out
end
local function triage_langs(list)
end
function export.tree(frame)
local args = getArgs(frame)
local out = ""
local current_lang
local terms = {}
local langs = {}
for i, term in ipairs(args) do --ryn:term1|term2|term3|rad:term1|term2 ...
local lang_change = mw.ustring.match(term, "^([^%:%<]+)%:")
local lang_change_arged = mw.ustring.match(term, "^(.+%>)%:")
if i == 1 and not (lang_change or lang_change_arged) then error("Language code needs to be specified in the first parameter as xyz(<bor>):term₁") end
if lang_change or lang_change_arged then
if lang_change then
current_lang = m_languages.get_by_code(lang_change)
term = mw.ustring.gsub(term, "^[^%:]+%:%s*", "")
elseif lang_change_arged then
current_lang = m_languages.get_by_code(mw.ustring.match(lang_change_arged, "^[^%<]+"))
term = mw.ustring.gsub(term, "^.+%>%:%s*", "")
end
if terms[current_lang.code] == nil then
terms[current_lang.code] = {}
table.insert(langs, current_lang)
end
end
if lang_change_arged then
for lang_arg in mw.ustring.gmatch(lang_change_arged, "%<([^%>]+)%>") do
terms[current_lang.code][lang_arg] = true
end
end
table.insert(terms[current_lang.code], term)
end
local items = {}
for lang, lang_args in pairs(terms) do
table.insert(lang_args, 1, lang)
items[lang] = export.descendant(lang_args)
end
mw.logObject(items)
end
return export
--[[
Debug console test string:
=p.descendant(mw.getCurrentFrame():newChild{title="whatever",args={"rad"}})
=p.tree(mw.getCurrentFrame():newChild{title="whatever",args={"rad:hello", "hi"}})
]]--