Модуль:semantcat

Материал из Викисловаря
Перейти к навигации Перейти к поиску
Документация Документация

Используется для генерации родительских понятий (и категорий), вызывается шаблоном {{semantcat1}}.

Дата-модули

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