Эта страница бессрочно защищена от изменения

Модуль:phrase

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

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

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

  • text — функция форматирования строки.
    Принимает неограниченное количество параметров переданных в вызывающий шаблон, которые могут иметь значения:
    • слово1=, слово2=, слово3=, … — — слово в той своей форме, в которой оно присутствует во фразе. Здесь указывается ударение и разбиение по слогам.
    • лемма1=, лемма2=, лемма3=, … — лемма слова («основная» форма, в которой оно даётся в словаре).
    • знак1=, знак2=, знак3=, … — знак препинания после слова (знак1 — после первого, знак2 — после второго и т. д.).
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
    }
    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
    		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;