Модуль:semantcat

Матеріал з Вікісловника

Документацію для цього модуля можна створити у Модуль:semantcat/документація

local export = {}
local u = require("Module:utils")

-- Головна функція, що виклкається у модулі.
function export.get(frame)
	--local lang = frame.args['lang']
	--local args = u.clone(frame:getParent().args)
	local title = u.get_base()
	local first_letter = mw.ustring.sub(title, 1, 1)
	local data = mw.loadData("Module:semantcat/data/" .. first_letter);
	local parts = mw.text.split(title, '/')
	local parts_count = table.getn(parts)
	local lang = ''
	if parts_count == 2 then
		title = parts[1]
		lang = parts[2]
	elseif parts_count > 2 then
		return 'ERROR #1. Забагато косих рисок у назві категорії'
	else
		if mw.ustring.sub(title, -10) == ' за мовою' then
			title = mw.ustring.sub(title, 1, -11)
			lang = 'all'
		end
	end
	text = ''
	local key
	if data[title] then
		for _, value in pairs(data[title]) do
			key = ''
			parts = mw.text.split(value, '%|')
			if table.getn(parts) > 1 then
				value = parts[1]
				key = parts[2]
			end
			text = text .. '* {{semantcat/cat|' .. value .. '|' .. lang
			if key ~= '' then
				text = text .. '|sortkey=' .. key
			end
			text = text .. '}}\n'
		end
	else
		text = '<span style="color: red;">Додайте підкатегорії до масиву на сторінці: [[Модуль:semantcat/data/' .. first_letter .. ']]</span>'
	end
	return frame:preprocess(text)
end

-- Генерація документації для дата-модулів
function export.docs(frame)
	title = u.get_base()
	title = title:gsub("/Документація$", "")
	local first_letter = mw.ustring.sub(title, -1)
	data = mw.loadData("Module:semantcat/data/" .. first_letter);
	local result = '=== Батьківські поняття для шаблону ' .. frame:preprocess("{{шаблон|semantcat}}") .. ', буква «' .. first_letter .. '» ===\n'
	result = result .. '→ [[:Категорія:Модулі:semantcat|Решту букв]]\n'
	result = result .. '{| class="prettytable" cellpadding="15" cellspacing="5"\n'
	result = result .. '! &nbsp;№&nbsp; || Категорія || Батьківські поняття (надкатегорії) \n'
	result = result .. '|-\n'
	local i = 0
	text = ''
	for name, chain in u.spairs(data) do
		result = result .. "| align=center | &nbsp;" .. i .. "&nbsp; "
		result = result .. "|| &nbsp;[[:Категорія:" .. name .. "|" .. name .. "]]&nbsp; "
		result = result .. "|| &nbsp;"
		local j = 0
		for _, value in pairs(data[name]) do
			key = ''
			parts = mw.text.split(value, '%|')
			if table.getn(parts) > 1 then
				value = parts[1]
				key = parts[2]
			end
			if j > 0 then
				result = result .. ', &nbsp;'
			end
			result = result .. '[[:Категорія:' .. value .. '|' .. value .. ']]'
			if key ~= '' then
				result = result .. " ''(" .. key .. ")''"
			end
			j = j + 1
		end
		result = result .. '&nbsp;\n'
		result = result .. '|-\n'
		i = i + 1
	end
	result = result .. '|}'
	return result
end

return export