Модуль:Title transformations

Для документации этого модуля может быть создана страница Модуль:Title transformations/doc

-- Этот модуль реализует {{заголовок}}

local p = {}

function p._main(args, frame, title)
	args = args or {}
	frame = frame or mw.getCurrentFrame()
	title = title or mw.title.getCurrentTitle()
	
	local italics, italicsAll, lowerCase = false, false, false
	for k, v in pairs(args) do
		if type(k) == 'number' then
			if v == 'со строчной буквы' or v == 'с маленькой буквы' or v == 'со строчной' or v == 'с маленькой' then
				lowerCase = true
			end
			if v == 'курсивом' then
				italics = true
				italicsAll = false
			end
			if v == 'курсивом весь' then
				italicsAll = true
				italics = false
			end
		end
	end
	
	local result = title.text
	if lowerCase then
		result = mw.language.getContentLanguage():lcfirst(result)
	end
	if italics or italicsAll then
		local prefix, parentheses = mw.ustring.match(result, '^(.+) (%([^%(%)]+%))$')
		if prefix and parentheses and italicsAll == false then
			result = string.format("<i>%s</i> %s", prefix, parentheses)
		else
			result = string.format("<i>%s</i>", result)
		end
	end
	if title.namespace ~= 0 then
		result = title.nsText:gsub('_', ' ') .. ':' .. result
	end
	
	if args['заголовок'] then
		return result
	else
		return frame:callParserFunction('DISPLAYTITLE', result, 'noerror')
	end
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = 'Шаблон:Заголовок'
	})
	local title
	if args['заголовок'] then
		title = mw.title.new(args['заголовок'])
	end
	return p._main(args, frame, title)
end

return p