Module:descendants: Difference between revisions
Jump to navigation
Jump to search
TheNightAvl (talk | contribs) mNo edit summary |
TheNightAvl (talk | contribs) No edit summary |
||
Line 41: | Line 41: | ||
return out | return out | ||
end | |||
function export.tree(frame) | |||
local args = getArgs(frame) | |||
local out = "" | |||
local current_lang | |||
local terms = {} | |||
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] = {} 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 | |||
mw.logObject(terms) | |||
end | end | ||
Line 48: | Line 79: | ||
Debug console test string: | Debug console test string: | ||
=p.descendant(mw.getCurrentFrame():newChild{title="whatever",args={"rad"}}) | =p.descendant(mw.getCurrentFrame():newChild{title="whatever",args={"rad"}}) | ||
=p.tree(mw.getCurrentFrame():newChild{title="whatever",args={"rad:hello", "hi"}}) | |||
]]-- | ]]-- |
Revision as of 01:14, 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
function export.tree(frame)
local args = getArgs(frame)
local out = ""
local current_lang
local terms = {}
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] = {} 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
mw.logObject(terms)
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"}})
]]--