Module:Slope

From ALttP Speedrunning Wiki
Jump to: navigation, search

Documentation for this module may be created at Module:Slope/doc

local p = {}

local slope_symbols = {
	['◢'] = { '/', '/bottom', 'bottom/', 'acute', 'acutebottom', 'bottomacute' },
	['◣'] = { '\\', '\\bottom', 'bottom\\', 'grave', 'gravebottom', 'bottomgrave' },
	['◤'] = { '/top', 'top/', 'acutetop', 'topacute' },
	['◥'] = { '\\top', 'top\\', 'gravetop', 'topgrave' }
}

function p.main(frame)
	local args = frame:getParent().args

	local slope = args[1] or ''
	slope = slope:lower():gsub(' ','')

	local ret

	for v, w in pairs(slope_symbols) do
		for _, x in ipairs(w) do
			if slope == x then
				ret = v
				break
			end
		end
	end

	if not ret then
		error('No valid slope defined')
	end

	return ret
end

function p.selfdoc()
	local ret = mw.html.create('table')
			:addClass('wikitable center-1')

	ret	:tag('tr')
			:tag('th')
				:wikitext('Slope')
				:done()
			:tag('th')
				:wikitext('Valid keys')
				:done()
			:done()

	for v, w in pairs(slope_symbols) do
		local temp_row = ret:tag('tr')
		temp_row:tag('td')
				:wikitext(v)
			:done()
		local temp_text = { }
		for _, x in ipairs(w) do
			table.insert(temp_text, string.format('<code>%s</code>', x))
		end

		temp_row:tag('td')
				:wikitext(table.concat(temp_text, ', '))
			:done()
		temp_row:done()
	end

	return ret
end

return p