Module:Ikiusu: Difference between revisions

using mediawiki is an exercise in spending hours debugging the most inane issues that could ever occur
fix brackets inside definition
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local replacements = {
["{"] = "{",
["}"] = "}",
["|"] = "|",
["="] = "{{=}}",
}
local function escape(s)
return (s:gsub(".", replacements))
end


function p.main(frame)
function p.main(frame)
Line 24: Line 35:
end
end
if tonumber(param) then
if tonumber(param) then
langs[lang][tonumber(param)] = v
langs[lang][tonumber(param)] = escape(v)
else
else
langs[lang][param] = v
langs[lang][param] = escape(v)
end
end
end
end
Line 44: Line 55:
)
)
end
end
local entry_start = " ''' "..word.." ''' "
local entry_start = "'''"..mw.text.trim(word).."'''"
if langs[lang].pos then
if langs[lang].pos then
entry_start = entry_start.." (''"..langs[lang].pos.."'')"
entry_start = entry_start.." (''"..mw.text.trim(langs[lang].pos).."'')"
end
end
table.insert(result, entry_start)
table.insert(result, entry_start)
for _, defn in ipairs(langs[lang]) do
for _, defn in ipairs(langs[lang]) do
table.insert(result, "# [[Ikiusu:definition::"..defn.."@"..lang.."|"..defn.."]]")
table.insert(result, "# {{#set:Ikiusu:definition="..defn.."@"..lang.."}}"..defn)
end
end
if options.inflect then
if options.inflect then

Latest revision as of 11:31, 29 September 2025

Documentation for this module may be created at Module:Ikiusu/doc

local p = {}

local replacements = {
	["{"] = "{",
	["}"] = "}",
	["|"] = "|",
	["="] = "{{=}}",
}

local function escape(s)
	return (s:gsub(".", replacements))
end

function p.main(frame)
	local args = frame:getParent().args
	local word = args[1]
	local options = {}
	for i = 1, math.huge do
		if not args[i] then
			break
		end
		options[mw.text.trim(args[i])] = true
	end
	options.image = args.image
	
	local langs = {}
	local lang_list = {}
	for k, v in pairs(args) do
		if type(k) == "string" then
			local lang, param = k:match "([^-]*)-(.*)"
			if lang then
				if not langs[lang] then
					table.insert(lang_list, lang)
					langs[lang] = {}	
				end
				if tonumber(param) then
					langs[lang][tonumber(param)] = escape(v)
				else
					langs[lang][param] = escape(v)
				end
			end
		end
	end
	table.sort(lang_list)
	
	local result = {}
	table.insert(result, "[[Ikiusu:lemma::"..word.."|]]")
	table.insert(result, "{{langs|")
	for _, lang in ipairs(lang_list) do
		table.insert(result, "{{langs/in|"..lang.."|")
		if options.image then
			local caption = langs[lang].caption or ""
			table.insert(result,
				"[[File:"..options.image.."|200px|thumb|"..caption.."]]"
			)
		end
		local entry_start = "'''"..mw.text.trim(word).."'''"
		if langs[lang].pos then
			entry_start = entry_start.." (''"..mw.text.trim(langs[lang].pos).."'')"
		end
		table.insert(result, entry_start)
		for _, defn in ipairs(langs[lang]) do
			table.insert(result, "# {{#set:Ikiusu:definition="..defn.."@"..lang.."}}"..defn)
		end
		if options.inflect then
			table.insert(result, "{{inflect senra|"..lang.."|"..word.."}}")
		end
		table.insert(result, langs[lang].extra or "")
		table.insert(result, "}}")
	end
	table.insert(result, "}}")
	return frame:preprocess(table.concat(result, "\n"))
end

return p