Модуль: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;