შეგიძლიათ შექმნათ დოკუმენტაცია ამ მოდულისათვის: მოდული:Documentation/ინფო

local p = {}

local yesno = require('Module:Yesno')

local medal = 'მენდალი'
local order = 'ორდენი'
local insignia = 'წოდებაშ შანი'
local badge = 'ჭარაფაშ შანი'
local badge2 = 'ჭარაფაშ შანი'
local title = 'წოდება' --ჭარაფაშ
local rank = 'წოდება' --ოურდუმე
local prize = 'პრემია'
local commemorative = 'ოშვენე შანი'
local awardTypes = {medal, order, insignia, badge, badge2, title, prize, commemorative}
local exampleTitle = '== გჷმორინაფაშ სამანგა ==\n'
local namePlaceholder = 'ჯოხო დო გვარი'
local textPrefix = 'თანგი გჷმირინუაფუ ადამიერეფიშ ეიოშანალო'
local orDivisons = ' ვარ-და გჷმეგიმნართიშ'
local typesTitle = '== ვარიანტეფიშ რცხილი  ==\n'
local _type = 'ტიპი'
local note = 'ხვილაფა'

local function expand(frame, tname, targs)
	return frame:expandTemplate({title = tname, args = targs})
end

local parameters = {
	['ჯოხო'] = {['მენცარი'] = 'ჯოხო', ['ჩინებული'] = 'ჯოხო', ['პოლიტიკოსი'] = 'ჯოხო', ['თეატრალური მოღალე'] = 'ჯოხო', default = 'ჯოხო'},
	['ჯილდოეფი'] = {['მენცარი'] = 'ჯილდოეფი დო პრემიეფი', ['მენცარი'] = 'ჯილდოეფი დო პრემიეფი', ['პიჯი'] = 'ჯილდოეფი დო პრემიეფი', ['სპორტსმენი'] = 'მენდალეფი', ['პოლიტიკოსი'] = 'ჯილდოეფი', ['თეატრალური მოღალე'] = 'ჯილდოეფი', default = 'ჯილდოეფი' },
	['звание'] = {default = 'წოდება'}
}

local function get_param_name(tname, pname) 
	if not parameters[pname] then
		return pname
	end
	return parameters[pname][mw.ustring.lower(tname)] or parameters[pname].default or pname
end

local function instead_of_link(link) 
	return ' იმოდოხოდუ რსხილი [[' .. link .. ']]-შ მანგიორო'
end

local function in_param(frame, tname, pname) 
	return ' კერძოთ, გრაფას ' .. expand(frame, 'para', {[1]=pname}) .. ' თანგიშ ' .. expand(frame, 'tl', {[1]=tname}) .. '.\n\n'
end

function repeat_whitespace(n)
	local r = '' 
	for i = 1, n do
		 r = r .. ' '
	end
	return r
end

local function render_example(frame, pageName, tname, paramName, paramTarget, example)
	local templateResult = expand(frame, tname, {[paramTarget] = example, [paramName] = namePlaceholder})
	local nameLen = mw.ustring.len(paramName)
	local targetLen = mw.ustring.len(paramTarget)
	local maxLen = math.max(nameLen, targetLen)
	local pre = '<pre>\n{{' .. tname .. '\n|' .. paramName .. repeat_whitespace(3 + maxLen - nameLen) .. '= ' .. namePlaceholder .. '\n|'  .. paramTarget .. repeat_whitespace(3 + maxLen - targetLen) ..  '= {{' .. pageName .. '}}\n}}</pre>'
	return templateResult .. '\n\n' .. pre
end

local function template_res_and_pre(frame, pageName, tname, paramName, paramTarget) 
	return render_example(frame, pageName, tname, paramName, paramTarget, expand(frame, pageName))
end

local function cat_link(cat) 
	return '[[:К:' .. cat .. '|' .. cat .. ']]'
end

local function format_categories(categories)
	local cats = {}
	for s in mw.ustring.gmatch(categories, '[^/]+') do
		table.insert(cats, cat_link(s))
	end
	if #cats == 0 then
		return ''
	end
	local ret = 'თანგი ხასჷლას ავტომატურო გეთმუძინანს კატეგორიას'
	if #cats > 1 then
		ret = ret ..'и'
	else
		ret = ret .. 'ю'
	end
	ret = ret .. ' ' .. mw.text.listToText(cats) .. '.'
	return ret
end

local function starts_with(st, prefix)
	return mw.ustring.sub(st, 1, mw.ustring.len(prefix)) == prefix
end
local function quotate_default(st, quotes)
	if (quotes == nil or yesno(quotes)) and not starts_with(st, '«') then
		return '«' .. st .. '»'
	end
	return st
end

local function get_param_num(args, prefix)
	local num = 0
	while args[prefix .. tostring(num+1)] ~= nil do
		num = num + 1
	end
	return num
end

local function types_table(frame, pageName, args)
	local t = mw.html.create('table'):addClass('wide center')
	local headers = t:tag('tr')
	headers:tag('th'):wikitext('თანგიშ კოდი<br />(კოპირაფაშო)')
	headers:tag('th'):wikitext('თანგი ოძირანს')
	headers:tag('th'):wikitext('ოძირაფონი თანგიშ ხვილაფა')
	local varCount = get_param_num(args, _type)
	local defaultStr = t:tag('tr')
	defaultStr:tag('td'):addClass('nowrap'):wikitext('{{' .. pageName .. '}}')
	defaultStr:tag('td'):wikitext(expand(frame, pageName, {}))
	defaultStr:tag('td'):wikitext(args[note .. '0'])
	for i = 1, varCount do 
		local varStr = t:tag('tr')
		local istr = tostring(i)
		local var = args[_type .. istr]
		varStr:tag('td'):addClass('nowrap'):wikitext('{{' .. pageName .. '|ტიპი=' .. var .. '}}')
		varStr:tag('td'):wikitext(expand(frame, pageName, {[_type]=var}))
		varStr:tag('td'):wikitext(args[note .. istr])
	end
	return typesTitle .. tostring(t) .. '\n'
end

local function guess_type(pageName)
	for _, awardType in ipairs(awardTypes) do
		if starts_with(mw.ustring.lower(pageName), awardType) then
			return awardType
		end
	end
	return nil
end

local function trim_parentheses(str)
	for s in mw.ustring.gmatch(str, '[^%(]+') do
		return s:match('^%s*(.-)%s*$')
	end
	return str
end

local function trim_type_and_parentheses(pageName)
	local autoType = guess_type(pageName) 
	if autoType ~= nil then 
		local typeLen = mw.ustring.len(autoType)
		pageName = mw.ustring.sub(pageName, typeLen + 2, mw.ustring.len(pageName))
	end
	return trim_parentheses(pageName)
end

local function get_award_type_text(awardType)
	if awardType == order then
		return ', დოჯილდაფილი ორდენით'
	elseif awardType == medal then
		return ', დოჯილდაფილ მენდალით'
	elseif awardType == insignia then
		return ', დოჯილდაფილ წოდებაშ შანით'
	elseif awardType == badge or awardType == badge2 then
		return ', დოჯილდაფილ ჭარაფაშ შანით'
	elseif awardType == title then
		return ', გინოჩამილი წოდებათ'
	elseif awardType == prize then
		return ' — პრემიაშ ლაურეატეფი'
	elseif awardType == commemorative then
		return ', დოჯილდაგილი ოშვენე შანით'
	end
	return ''
end

function p.print_types_table(frame)
	local mt = mw.html.create('table'):addClass('wikitable')
	local headers = mt:tag('tr'):css('text-align', 'center')
	headers:tag('th'):wikitext('პარამეტრიშ შანულობა')
	headers:tag('th'):wikitext('ოძირაფე ტექსტი')
	for _, awardType in ipairs(awardTypes) do
		local row = mt:tag('tr')
		row:tag('td'):wikitext(expand(frame, 'para', {'ტიპი', awardType}))
		row:tag('td'):wikitext('…' .. get_award_type_text(awardType))
	end
	return tostring(mt)
end

local function _award_base(frame, args, pageName, tname, paramAward)
	local res = textPrefix
	if yesno(args['გჷმეგიმნართეფი']) then
		res = res .. orDivisons
	end
	local awardType = args['тип'] or guess_type(pageName) or medal
	res = res .. get_award_type_text(awardType)
	if not yesno(args['без названия']) then
		local quotes = args['ჯღვალეფი']
		local titleString = args[1] or args['ჯოხო'] or trim_type_and_parentheses(pageName)
		res = res .. ' ' .. quotate_default(titleString, quotes)
	end
	res = res .. '.'
	local link = args[2] or args['რსხილი'] or pageName
	res = res .. instead_of_link(link) .. ';'
	local paramAward = get_param_name(tname, 'ჯილდოეფი')
	res = res .. in_param(frame, tname, paramAward)

	local categories = args['კატეგორია'] or args['კატეგორიეფი']
	if categories then
		res = res .. format_categories(categories) .. '\n'
	end

	local filename = args['ფაილი']
	if filename then
		res = res .. '\nსურათიშ სახეთ გჷმირინუაფუ ფაილი [[:ფაილი:' .. filename .. '|' .. filename .. ']] [[ფაილი:' .. filename .. '|x17px|link=|alt=]]\n'
	end

	if get_param_num(args, _type) > 0 then
		res = res .. types_table(frame, pageName, args)
	end

	res = res .. exampleTitle
	return res
end

function p.award(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	local args = getArgs(frame)
	local pageName = mw.title.getCurrentTitle().text
	local tname = args['თარგი'] or 'ოურდუმე მოღალე'
	local paramAward = get_param_name(tname, 'ჯილდოეფი')
	local res = _award_base(frame, args, pageName, tname, paramAward)
	local paramName = get_param_name(tname, 'ჯოხო')
	res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramAward)
	res = res .. '<br clear="all" />'
	return res
end

function p.award_demo(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	local args = getArgs(frame)
	local pageName = mw.title.getCurrentTitle().text
	local tname = args['თარგი'] or 'ოურდუმე მოღალე'
	local paramAward = get_param_name(tname, 'ჯილდოეფი')
	local res = _award_base(frame, args, pageName, tname, paramAward)
	local paramName = get_param_name(tname, 'ჯოხო')
	local demo = args['დემო'] or args['demo']
	res = res .. render_example(frame, pageName, tname, paramName, paramAward, demo)
	res = res .. '<br clear="all" />'
	return res
end
function p.rank(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	local args = getArgs(frame)
	local pageName = mw.title.getCurrentTitle().text
	local rankNameDefault = mw.text.trim(mw.ustring.sub(pageName, (mw.ustring.find(pageName, ',', 1, true) or 0) +1))
	local tname = args['თარგი'] or 'ოურდუმე მოღალე'
	local res = textPrefix
	local special = yesno(args['სპეციალური'])
	res = res .. ', მოღელ '
	if special then 
		res = 'სპეციალური '
	end
	local rankType = args['ტიპი'] or 'წოდება'
	res = res ..  rankType .. ' '
	local rankName = args[1] or args['წოდება'] or rankNameDefault
	local quotes = args['ჯღვალეფი']
	res = res .. quotate_default(rankName, quotes) .. '.'
	local link = args[2] or args['ссылка'] or mw.ustring.lower(rankNameDefault)
	res = res .. instead_of_link(link) .. ';' 
	local paramRank = get_param_name(tname, 'წოდება')
	res = res .. in_param(frame, tname, paramRank)

	local categories = args['კატეგორია'] or args['კატეგორიეფი']
	if categories then
		res = res .. format_categories(categories) .. '\n'
	end

	if get_param_num(args, _type) > 0 then
		res = res .. types_table(frame, pageName, args)
	end

	res = res .. exampleTitle
	local paramName = get_param_name(tname, 'ჯოხო')
	res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramRank)
	res = res .. '<br clear="all" />'
	return res
end

local function templates_set()
	local set = {['ოურდუმე მოღალე'] = true}
	for p, tl in pairs(parameters) do
		for t, _ in pairs(tl) do
			if t ~= 'default' then
				set[t] = true
			end
		end
	end
	return set
end

function p.supported_templates(frame)
	local res = ''
	local set = templates_set()
	for tl, _ in pairs(set) do
		res = res .. '* ' .. expand(frame, 'tl', {tl}) .. '\n'
	end
	return res
end

return p