Module:rad-stem/templates: Difference between revisions

From Laenkea
Jump to navigation Jump to search
mNo edit summary
No edit summary
Line 4: Line 4:
local m_stem = require("Module:rad-stem")
local m_stem = require("Module:rad-stem")
local m_parameters = require("Module:parameters")
local m_parameters = require("Module:parameters")
local m_links = require("Module:links")
local m_languages = require("Module:languages")


function get_stems(args)
function get_stems(args)
Line 32: Line 34:


function rad_link(word)
function rad_link(word)
return require("Module:links").full_link{
return m_links.full_link{
     term = word,
     term = word,
     language = m_languages.get_by_code("rad")
     language = m_languages.get_by_code("rad")
Line 49: Line 51:
function export.show(frame)
function export.show(frame)
local args = getArgs(frame)
local args = getArgs(frame)
local stems = get_stems(args)
local stem_gen = get_stems(args)
local stems = {
nom = args['nom'] or stem_gen.nom,
acc = args['acc'] or stem_gen.acc,
dat = args['dat'] or stem_gen.dat,
gen = args['gen'] or stem_gen.gen,
ins = args['ins'] or stem_gen.ins,
nompl = args['nompl'] or stem_gen.nompl,
genpl = args['genpl'] or stem_gen.genpl,
genpl_short = args['genpl_short'] or stem_gen.genpl_short,
['type'] = stem_gen['type']
}
local adj = args['adj']
local adj = args['adj']
local adj_broken = ""
local adj_broken = ""
Line 95: Line 108:
if table_type == "sgpl" then
if table_type == "sgpl" then
th("Declension of <i>" .. stems.nom .. "</i> (" .. type_name .. ") &nbsp", 1, 4)
th("Declension of <i>" .. stems.nom .. "</i> (" .. type_name .. ") &nbsp", 1, 4)
add("<tr>")
th("nominative", 1, 2)
if stems.nom == stems.nompl then
td(
rad_link(stems.nom),
1, 2
)
else
td(
rad_link(stems.nom)
)
td(
rad_link(stems.nompl)
)
end
add("</tr>")
elseif table_type == "sg" then
elseif table_type == "pl" then
elseif table_type == "du" then
elseif table_type == "dupl" then
end
end
add("</table>")
add("</table>")
add("<includeonly>[[Category:Radestrian " .. type_name .. " stems]]</includeonly>")
add("<includeonly>")
add("[[Category:" .. m_languages.get_by_code("rad").name .. " " .. type_name .. " stems]]")
if table_type == "sg" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " singularia tantum]]")
elseif table_type == "pl" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia tantum]]")
elseif table_type == "du" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia binaria]]")
elseif table_type == "dupl" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia binaria tantum]]")
end
add("</includeonly>")
return table.concat(format_table, string.char(10))
return table.concat(format_table, string.char(10))

Revision as of 11:50, 1 December 2023

Underlies:


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

local m_stem = require("Module:rad-stem")
local m_parameters = require("Module:parameters")
local m_links = require("Module:links")
local m_languages = require("Module:languages")

function get_stems(args)
	local shifted = {"noun", "_"}
	
	local i = 1
	while args[i] do
		shifted[i+2] = args[i]
		i = i + 1
	end
	
	return m_stem.getNounStem(shifted)
end

function break_adj(adj)
	local C = "bcdðfghħjĵkķlmnņpqrsștvwxzþ°"
	local temp = adj

	temp = mw.ustring.gsub(temp, "([" .. C .. "])([" .. C .. "])íș$", "%1%2ieș")
	temp = mw.ustring.gsub(temp, "(°)", "")
	temp = mw.ustring.gsub(temp, "(íș)$", "jeș")
	temp = mw.ustring.gsub(temp, "(úș)$", "uoș")
	temp = mw.ustring.gsub(temp, "(ýș)$", "yeș")
	temp = mw.ustring.gsub(temp, "(oș)$", "uș")

	return temp
end

function rad_link(word)
	return m_links.full_link{
    term = word,
    language = m_languages.get_by_code("rad")
}
end

function rad_IPA(word)
	local IPA = require("Module:rad-IPA").generate{
		word,
		"format",
		"nolarge"
	}
	return "<span style=\"color:dimgrey\">" .. IPA .. "</span>" 
end

function export.show(frame)
	local args = getArgs(frame)
	local stem_gen = get_stems(args)
	local stems = {
		nom = args['nom'] or stem_gen.nom,
		acc = args['acc'] or stem_gen.acc,
		dat = args['dat'] or stem_gen.dat,
		gen = args['gen'] or stem_gen.gen,
		ins = args['ins'] or stem_gen.ins,
		nompl = args['nompl'] or stem_gen.nompl,
		genpl = args['genpl'] or stem_gen.genpl,
		genpl_short = args['genpl_short'] or stem_gen.genpl_short,
		['type'] = stem_gen['type']
		}
	local adj = args['adj']
	local adj_broken = ""
	local adj_broken_e = ""
	if adj then
		adj_broken = args['adjbreak'] or break_adj(adj) 
		adj_broken_e = mw.ustring.gsub(adj_broken, "(uș)$", "ûș")
	end
	
	local format_table = {}
	
	local decl_type = {
		["C"] = "heavy",
		["CH"] = "heavy spirant",
		["VH"] = "light spirant",
		["V"] = "light",
		["G"] = "semi-light"
	}
	
	local type_name = decl_type[stems['type']]
	
	local table_type = args['type'] or "sgpl"
	
	local function add(code)
		table.insert(format_table, code)
	end
	
	local function th(data, rowspan, colspan)
		local to_add = "<th"
		if rowspan and rowspan~=1 then to_add = to_add .. " rowspan=" .. rowspan end
		if colspan and colspan~=1 then to_add = to_add .. " colspan=" .. colspan end
		to_add = to_add .. ">" .. data .. "</th>"
		add(to_add)
	end
	
	local function td(data, rowspan, colspan)
		local to_add = "<td"
		if rowspan and rowspan~=1 then to_add = to_add .. " rowspan=" .. rowspan end
		if colspan and colspan~=1 then to_add = to_add .. " colspan=" .. colspan end
		to_add = to_add .. ">" .. data .. "</td>"
		add(to_add)
	end
	
	add("<table class=\"mw-collapsible mw-collapsed wikitable inflection table\" style=\"text-align: center\">")
		if table_type == "sgpl" then
			th("Declension of <i>" .. stems.nom .. "</i> (" .. type_name .. ") &nbsp", 1, 4)
			add("<tr>")
				th("nominative", 1, 2)
				if stems.nom == stems.nompl then
					td(
						rad_link(stems.nom),
						1, 2
					)
				else
					td(
						rad_link(stems.nom)
					)
					td(
						rad_link(stems.nompl)
					)
				end
			add("</tr>")
		elseif table_type == "sg" then
			
		elseif table_type == "pl" then
			
		elseif table_type == "du" then
			
		elseif table_type == "dupl" then
			
		end
	add("</table>")
	
	add("<includeonly>")
		add("[[Category:" .. m_languages.get_by_code("rad").name .. " " .. type_name .. " stems]]")
		if table_type == "sg" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " singularia tantum]]")
		elseif table_type == "pl" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia tantum]]")
		elseif table_type == "du" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia binaria]]")
		elseif table_type == "dupl" then add("[[Category:" .. m_languages.get_by_code("rad").name .. " pluralia binaria tantum]]")
		end
	add("</includeonly>")
	
	return table.concat(format_table, string.char(10))
end

return export

--[[
Debug console test string:
=p.show(mw.getCurrentFrame():newChild{title="whatever",args={"hv", "o~u^u", "þ"}})
]]--