Module:descendants: Difference between revisions

From Laenkea
Jump to navigation Jump to search
mNo edit summary
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 .. ":&nbsp;" 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"}})
]]--