Fandom

Narutopedia

Module:CreditsTable

6,238pages on
this wiki
Add New Page
Talk0
-- @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 = {
			EN = {},
			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 ~= 'EN' then
				mw.log(mw.ustring.format("The language %s is not recognized.", lang))
			else
				table.insert(credit.actors[lang], {
					name = person,
					link = "imdb:"..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 fill-horiz cell-align-center")
	local haseng = false
	for i, credit in ipairs(credits) do
		if #credit.actors.EN > 0 then
			haseng = true
			break
		end
	end
 
	local tr = t:tag('tr')
	tr:tag('th'):wikitext("Role")
	tr:tag('th'):attr('colspan', 3):wikitext("Seiyū")
	if haseng then
		tr:tag('th'):wikitext("English Voice Actor")
	end
 
	local tr = t:tag('tr')
	tr:tag('th'):wikitext("")
	tr:tag('th'):wikitext("English")
	tr:tag('th'):wikitext("Japanese")
	tr:tag('th'):wikitext("Rōmaji")
	if haseng then
		tr:tag('th')
	end
 
	local function actorformat(actors)
		local results = {
			english = {},
			japanese = {},
			romaji = {}
		}
 
		for i, actor in ipairs(actors) do
			table.insert(results.english, 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.english = table.concat(results.english, '<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.english)
		tr:tag('td'):attr('lang', 'ja'):wikitext(jactor.japanese)
		tr:tag('td'):wikitext(jactor.romaji)
		if haseng then
			tr:tag('td'):wikitext(actorformat(credit.actors.EN).english)
		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]]

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on Fandom

Random Wiki