Дополнительные действия
Этому шаблону не хватает документации. Вы можете помочь проекту, сделав описание шаблона: что он делает, как его использовать, какие параметры он принимает. Это поможет другим использовать его. Для оформления можете воспользоваться {{doc}} или {{doc-inline}}. Не забывайте помещать описание внутрь <noinclude></noinclude>. P.S. Также не забываем про категорию. |
-- @author Dantman
local p = {}
local names = mw.loadData( 'Module:CreditsTable/names' )
local function parse(text)
local blocks = mw.text.gsplit(mw.text.trim(text), '\n\n+')
local credits = {}
for block in blocks do
local lines = mw.text.split(block, '\n')
local nameline = table.remove(lines, 1)
local credit = {}
local link, name = mw.ustring.match(mw.text.trim(nameline), '^(.+)%[(.+)%]$')
if not link then
name = mw.ustring.match(mw.text.trim(nameline), '^%[(.+)%]$')
if name then
link = nil
else
link = nameline
name = nameline
end
end
credit.link = link and mw.text.trim(link)
credit.name = mw.text.trim(name)
credit.actors = {
RU = {},
JA = {}
}
for ii, line in ipairs(lines) do
lang, person = mw.ustring.match(mw.text.trim(line), '^(%a+): *(.+)$')
lang = mw.ustring.upper(lang)
if lang ~= 'JA' and lang ~= 'RU' then
mw.log(mw.ustring.format("Язык %s не распознается.", lang))
else
table.insert(credit.actors[lang], {
name = person,
link = ""..person
})
end
end
table.insert(credits, credit)
end
return credits
end
local function link(target, text)
if target then
wt = mw.ustring.format('[[%s|%s]]', target, text)
else
wt = text
end
wt = tostring(mw.html.create('b'):wikitext(wt))
return wt
end
local function render(credits)
local t = mw.html.create('table'):attr('class', "wikitable cell-align-center")
local haseng = false
for i, credit in ipairs(credits) do
if #credit.actors.RU > 0 then
haseng = true
break
end
end
local tr = t:tag('tr')
tr:tag('th'):wikitext("Персонаж")
tr:tag('th'):attr('colspan', 3):wikitext("Сэйю")
if haseng then
tr:tag('th'):wikitext("Русский Актер озвучивания")
end
local tr = t:tag('tr')
tr:tag('th'):wikitext("")
tr:tag('th'):wikitext("Русское")
tr:tag('th'):wikitext("Японское")
tr:tag('th'):wikitext("Ромадзи")
if haseng then
tr:tag('th')
end
local function actorformat(actors)
local results = {
russian = {},
japanese = {},
romaji = {}
}
for i, actor in ipairs(actors) do
table.insert(results.russian, link(actor.link, actor.name))
n = names[actor.name] or {}
table.insert(results.japanese, n[1] or '')
table.insert(results.romaji, n[2] or '')
end
results.russian = table.concat(results.russian, '<br>')
results.japanese = table.concat(results.japanese, '<br>')
results.romaji = table.concat(results.romaji, '<br>')
return results
end
for i, credit in ipairs(credits) do
local jactor = actorformat(credit.actors.JA)
tr = t:tag('tr')
tr:tag('td'):wikitext(link(credit.link, credit.name))
tr:tag('td'):wikitext(jactor.russian)
tr:tag('td'):wikitext(jactor.japanese)
tr:tag('td'):wikitext(jactor.romaji)
if haseng then
tr:tag('td'):wikitext(actorformat(credit.actors.RU).russian)
end
end
return tostring(t)
end
function p._main(text)
local credits = parse(text)
return render(credits)
end
function p.main(frame)
local text = frame.args[1] or frame:getParent().args[1]
return p._main(text)
end
return p
--[[Category:Lua Modules]]