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

Модуль:phrase

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

Модуль призначений для форматування рядка фрази з посиланнями; використовується у шаблоні {{phrase}}.

Опис функцій та параметрів

[ред.]
  • text — функція форматування рядка.
    Приймає необмежену кількість параметрів переданих шаблоном виклику:
    • слово1=, слово2=, слово3=, … — слово у тій своїй формі, в котрій воно є у фразі зі вказанням наголосів та складоподілу.
    • лема1=, лема2=, лема3=, … — лема слова («основна» форма, в котрій воно дається у словнику).
    • знак1=, знак2=, знак3=, … — розділовий знак після слова (знак1 — після першого, знак2 — після другого і т. д.).
    • lang= — код мови ISO 639.

local p = {}

--[[
text
Ця функція компонує фразу зі слів та роздільників, переданих шаблоном.

Застосування: 

{{#invoke:phrase|text}}
]]

function p.text(frame)
	-- разбір параметрів
    local pframe = frame:getParent()
    mw.logObject(pframe)
    local words = {};
    local param_names = {
    	['лема'] = true, 
    	['слово'] = true, 
    	['знак']  = true
    }
    local lang=pframe.args['lang'] or '';
    local langlink = '';
	if lang ~= '' then
		local trimmed = mw.text.trim(lang);
		if trimmed == 'uk' then
			langlink = "Українська"	
		else
			local languages = mw.loadData("Module:languages/data");
			local l = languages[trimmed];
			if l and l[2] then
				langlink = l[2];
			end
		end
	end
    for key, value in pairs(pframe.args) do
        if type(key) == 'string' and key ~= '' then
        	key = mw.ustring.lower(key)
        	local name, num = mw.ustring.match(key, '^(%D+)(%d+)$', 1)
        	num = tonumber(num)
        	if name ~= nil and num ~= nil and param_names[name] ~= nil then 
        		local word = words[num]
        		if word == nil then
        			words[num] = {[name] = value}
        		else
        			word[name] = value
        		end
        	end
        end
    end	
    -- компонування рядка
    result = ''
    for i, word in ipairs(words) do
    	local link = word['лема']
    	local text = word['слово']
    	local sep = word['знак']
    	if result ~= '' then
    		if words[i-1]['знак'] ~= '-' then
    			result = result .. ' '
    		end
    	end
    	-- mw.logObject(word)
    	if link ~= nil and link ~= '' and text ~= nil and text ~= '' then
    		if langlink ~= '' then
    			link = link .. '#' ..  langlink
    		end
    		result = result .. '[[' ..link .. '|' .. text  .. ']]' 
    	elseif text ~= nil and text ~= '' then
    		result = result .. text
    	end
    	if sep ~= nil then
			if sep == '—' then
				sep = ' ' .. sep
			end
			result = result .. sep
    	end
    end
    return result
end

return p;