Module:cognates: Difference between revisions

From Laenkea
Jump to navigation Jump to search
No edit summary
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 8: Line 8:
local args = getArgs(frame)
local args = getArgs(frame)
local links = {}
local links = {}
local nat = m_languages.find_by_code(args[1] or "") ~= nil and m_languages.get_by_code(args[1])
local nat = m_languages.find_by_code(args[1] or "")
local params = {
local params = {
nocap = false,
nocap = false,
nocat = false,
nopre = false,
}
}
local langs = {}
local langs = {}
for lang, entry in pairs(args) do
for lang, _ in pairs(args) do
if type(lang) == "string" then
if type(lang) == "string" then
if m_languages.find_by_code(lang) and lang ~= nat then
if m_languages.find_by_code(lang) then
table.insert(langs, lang)
table.insert(langs, lang)
elseif params[lang] ~= nil then --check for parameters
elseif params[lang] ~= nil then --check for parameters
Line 30: Line 32:
a = m_languages.get_by_code(a)
a = m_languages.get_by_code(a)
b = m_languages.get_by_code(b)
b = m_languages.get_by_code(b)
if nat == nil then
return a.name < b.name
end
a_test = m_languages.stage_at_split(nat, a)
a_test = m_languages.stage_at_split(nat, a)
Line 44: Line 50:
for _, lang in ipairs(langs) do
for _, lang in ipairs(langs) do
local term, data = m_inline.parse(args[lang])
local term, data = m_inline.parse(args[lang])
data[1], data[2] = lang, term
data[1], data[2], data["nobold"] = lang, term, true
local link = frame:expandTemplate{title = "m+", args = data}
local pre = data["pre"]
if nat then link = link .. "[[Category:" .. nat.name .. " terms with " .. lang.name .. " cognates]]" end
if pre then
pre = pre .. " "
data["pre"] = nil
end
local link = (pre or "") .. frame:expandTemplate{title = "m+", args = data}
if nat and params.nocat == false then link = link .. "[[Category:" .. nat.name .. " terms with " .. m_languages.get_by_code(lang).name .. " cognates]]" end
table.insert(links, link)
table.insert(links, link)
end
end
local text = ((params.nocap and "c") or "C") .. "ognate with "
local text = ((not params.nopre) and ((params.nocap and "c") or "C") .. "ognate with ") or ""
for i, link in ipairs(links) do
for i, link in ipairs(links) do

Latest revision as of 14:51, 7 August 2024

Underlies {{cognates}}.


local export = {}
local getArgs = require('Module:Arguments').getArgs

local m_inline = require("Module:inline")
local m_languages = require("Module:languages")

function export.show(frame)
	local args = getArgs(frame)
	local links = {}
	local nat = m_languages.find_by_code(args[1] or "")
	local params = {
		nocap = false,
		nocat = false,
		nopre = false,
	}
	
	local langs = {}
	
	for lang, _ in pairs(args) do
		if type(lang) == "string" then
			if m_languages.find_by_code(lang) then
				table.insert(langs, lang)
			elseif params[lang] ~= nil then --check for parameters
				params[lang] = true
			else
				error("[" .. lang .. "] is not a valid language code or parameter")
			end
		end
	end
	
	table.sort(langs, function(a, b)
		a = m_languages.get_by_code(a)
		b = m_languages.get_by_code(b)
		
		if nat == nil then
			return a.name < b.name
		end
		
		a_test = m_languages.stage_at_split(nat, a)
		b_test = m_languages.stage_at_split(nat, b)
		
		if a_test == b_test then
			return a.name < b.name
		else
			return a_test > b_test
		end
	end
	)
	
	for _, lang in ipairs(langs) do
		local term, data = m_inline.parse(args[lang])
		data[1], data[2], data["nobold"] = lang, term, true
		local pre = data["pre"]
		if pre then
			pre = pre .. " "
			data["pre"] = nil
		end
		local link = (pre or "") .. frame:expandTemplate{title = "m+", args = data}
		if nat and params.nocat == false then link = link .. "[[Category:" .. nat.name .. " terms with " .. m_languages.get_by_code(lang).name .. " cognates]]" end
		table.insert(links, link)
	end
	
	local text = ((not params.nopre) and ((params.nocap and "c") or "C") .. "ognate with ") or ""
	
	for i, link in ipairs(links) do
		if i > 1 then
			if links[i + 1] then
				text = text .. ", "
			else
				text = text .. " and "	
			end
		end
		text = text .. link	
	end
	
	return text
end

return export

--[[
Debug console test string:
=p.show(mw.getCurrentFrame():newChild{title="whatever",args={["rad"]="vas", ["lfv"] = "vat"}})
]]