Module:Nomenclature: Difference between revisions

From Zelda Wiki, the Zelda encyclopedia
Jump to navigation Jump to search
(i think this should be here? (via Mediawiker ST3))
(actually here ig (via Mediawiker ST3))
Line 92: Line 92:
td:wikitext(row["translation"] .. " " .. expgame.Display(games))
td:wikitext(row["translation"] .. " " .. expgame.Display(games))
for _, row2 in ipairs(cargoData) do
for _, row2 in ipairs(cargoData) do
games = {}
if h.SameLangDifTranslations(row, row2) then
if h.SameLangDifTranslations(row, row2) then
games = {}
for _, row3 in ipairs(cargoData) do
for _, row3 in ipairs(cargoData) do
if h.SameLangSameTranslation(row2, row3) then
if h.SameLangSameTranslation(row2, row3) then

Revision as of 17:16, 2 May 2019

This is the main module for Template:Nomenclature.

Lua error in package.lua at line 80: module 'Module:UtilsLanguage' not found.


local cargo = mw.ext.cargo
local translation = require('Module:Translation')
local expgame = require('Module:Exp Game')
local utilsCode = require('Module:UtilsCode')
local utilsLanguage = require('Module:UtilsLanguage')
local utilsTable = require('Module:UtilsTable')

local p = {}
local h = {}

function p.Main( frame )
	local args = frame:getParent().args
	local resultTable = h.CreateTable()
	local resultTable = h.CreateRows(resultTable, "Dynalfos")
	return resultTable
end

--Create an empty table with headers
function h.CreateTable()
	--Table structure
	local resultTable = mw.html.create("table")
		:addClass("wikitable")
		:css{
			["margin"] = "1em",
			["font-size"] = "95%",
		}:done()
	
	--Global header
	local headerRow = mw.html.create("tr"):done()
	local headerContent = mw.html.create("th")
		:wikitext("[[File:TMC Forest Minish Artwork.png|20px]] Names in Other Regions [[File:TMC Jabber Nut Sprite.png]]")
		:attr("colspan", "4")
		:css{
			["font-size"] = "110%",
		}:done()
	
	headerRow:node(headerContent)
	resultTable:node(headerRow)
	
	--Individual headers
	--Language
	headerRow = mw.html.create("tr"):done()
	headerContent = mw.html.create("th")
		:wikitext("Language")
		:attr("colspan", "2"):done()
	headerRow:node(headerContent)
	
	--Name
	headerContent = mw.html.create("th")
		:wikitext("Name"):done()
	headerRow:node(headerContent)
	
	--Meaning
	headerContent = mw.html.create("th")
		:wikitext("Meaning"):done()
	headerRow:node(headerContent)
	
	resultTable:node(headerRow)
	
	return resultTable
end

function h.CreateRows(output, term)
	local cargoData = translation.fetchTranslations(term)
	h.SortTranslations(cargoData)
	for _, row in ipairs(cargoData) do
		if not row.skip then
			h.ProcessRow(output, cargoData, row)
		end
	end
	
	return output
end

function h.SortTranslations(translations)
	local lookup = utilsTable.hash(utilsLanguage.GetCodeSortOrder())
	table.sort(translations, function (a,b)
			return (lookup[a.language] or 0) < (lookup[b.language] or 0)
		end
	)
end

function h.ProcessRow(output, cargoData, row)
	local games = {}
	local meanings = h.GetMeanings(cargoData, row)
	local tr = output:tag('tr')
	local td
	h.PrintFlag(tr, row)
	h.PrintLanguage(tr, row)
	td = mw.html.create("td"):done()
	local games = h.GamesWithSameTranslation(row, cargoData)
	td:wikitext(row["translation"] .. " " .. expgame.Display(games))
	for _, row2 in ipairs(cargoData) do
		if h.SameLangDifTranslations(row, row2) then
			games = {}
			for _, row3 in ipairs(cargoData) do
				if h.SameLangSameTranslation(row2, row3) then
					table.insert(games, row3["game"])
				end
			end
			td:wikitext("<br>" .. row2["translation"] .. " " .. expgame.Display(games))
		end
	end
	tr:node(td)
	h.MarkRowsToSkip(cargoData, row)
	h.PrintMeanings(tr, meanings)
end

function h.GetMeanings(cargoData, row)
	local ret = { row.meaning }
	for _, row2 in ipairs(cargoData) do
		if h.SameLangDifTranslations(row, row2) then
			ret[#ret+1] = row2.meaning
		end
	end
	return ret
end

function h.PrintFlag(tr, row)
	tr:tag('td')
		:wikitext(utilsLanguage.CodeToFlag(row.language))
end

function h.PrintLanguage(tr, row)
	tr:tag('td')
		:wikitext(utilsLanguage.CodeToLanguage(row.language))
end

function h.GamesWithSameTranslation(row, cargoData)
	local ret = {}
	for _, row2 in ipairs(cargoData) do
		if h.SameLangSameTranslation(row, row2) then
			ret[#ret+1] = row2.game
		end
	end
	return ret
end

function h.SameLangSameTranslation(row1, row2)
	return row1.language == row2.language and row1.translation == row2.translation
end

function h.SameLangDifTranslations(row1, row2)
	return row1.language == row2.language and row1.translation ~= row2.translation
end

function h.SameLang(row1, row2)
	return row1.language == row2.language
end

function h.PrintMeanings(tr, meanings)
	local meaningsDisplays = h.ProcessMeanings(meanings)
	td = tr:tag('td')
		:wikitext(table.concat(meaningsDisplays, '<br>'))
end

function h.MarkRowsToSkip(cargoData, row)
	for _, row2 in ipairs(cargoData) do
		if h.SameLang(row, row2) then
			row2.skip = true
		end
	end
end

function h.ProcessMeanings(meanings)
	local ret = {}
	for k, v in pairs(meanings) do
		if utilsCode.IsEmpty(v) then
			ret[#ret+1] = '-'
		else
			ret[#ret+1] = v
		end
	end
	return ret
end

return p