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