Перейти до вмісту

Модуль:inflection

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

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

local dev_prefix = ''
-- dev_prefix = 'User:Vitalik/'  -- comment this on active version

local export = {}
local u = require("Module:utils")
local wu = require("Module:wiki-utils")
local _ = require('Module:' .. dev_prefix .. 'inflection/tools')

-- Function to load corresponding unit
local function load_unit(unit_name)
	if unit_name == '' then
		return nil
	end
	return require("Module:" .. dev_prefix .. "inflection/" .. unit_name);
end

local function remove_stress(value)
	value = mw.ustring.gsub(value, '́', '')
	value = mw.ustring.gsub(value, '̀', '')
	value = mw.ustring.gsub(value, 'ѐ', 'е')
	value = mw.ustring.gsub(value, 'ѝ', 'и')
	return value	
end

local function fix_args(base, args)
	-- TODO: make `for` here
	if args[1] then
		args['слово'] = args[1]
	end
	if not args['слово'] then
		args['слово'] = ''
	end
	if args[2] then
		args['индекс'] = args[2]
	end
	if not args['индекс'] then
		args['индекс'] = ''
	end
    args['слово'] = mw.text.trim(args['слово'])
    args['индекс'] = mw.text.trim(args['индекс'])
	if remove_stress(args['индекс']) == base then
		local tmp = args['индекс']
		args['индекс'] = args['слово']
		args['слово'] = tmp
	end
end

-- This export function is used from testcases
function export.test(unit_name, base, args)
	local unit = load_unit(unit_name)
	-- fix_args(args)
	return unit.forms(base, args, nil)
end

-- This export function is used from templates
function export.get(frame)
	local base = u.get_base()
	local args = frame:getParent().args
	-- res = ''
	-- for i, key in pairs(args) do
		-- res = res .. i .. ','
	-- end
	-- return args[1]
	local unit_name = frame.args['unit']
	local unit = load_unit(unit_name)
	if unit == nil then
		return 'Error: Name of unit is absent'
	end

	fix_args(base, args)

    local forms = unit.forms(base, args, frame)
    local template = unit.template(base, args)

    local output = frame:expandTemplate{title=template, args=forms }

--	output = '{{' .. template .. '\n'
--	for key, value in pairs(forms) do
--		output = output .. '|' .. key .. '=' .. value .. '\n'
--		mw.log(key .. ' => ' .. type(key))
--		mw.log(value .. ' => ' .. type(value))
--	end
--	output = output .. '}}'

    if _.set(forms['error']) then
         output = output .. '\n' .. wu.div_red(forms['error'])
    end
    if _.set(forms['error_category']) then
         output = output .. '[[Категорія:' .. forms['error_category'] .. ']]'
    end

--	return frame:preprocess(output)
	return output
end

return export