Jump to content

Module:Decimal-align: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
+different column alignments
Line 6: Line 6:
string = frame:preprocess( input_string_raw )
string = frame:preprocess( input_string_raw )


local left_percent = tonumber(frame.args['left'])
local left_percent_default = tonumber(frame.args['left'])
local left_percents = {}
if not left_percent then
left_percents[1] = tonumber(frame.args['left1'])
left_percent = 50
left_percents[2] = tonumber(frame.args['left2'])
end
left_percents[3] = tonumber(frame.args['left3'])
right_percent = 100 - left_percent
left_percents[4] = tonumber(frame.args['left4'])
left_percents[5] = tonumber(frame.args['left5'])
left_percents[6] = tonumber(frame.args['left6'])
left_percents[7] = tonumber(frame.args['left7'])
left_percents[8] = tonumber(frame.args['left8'])
left_percents[9] = tonumber(frame.args['left9'])
left_percents[10] = tonumber(frame.args['left10'])

local column = 1
for number in mw.ustring.gmatch( string, '%|[%d%.,]+' ) do
for number in mw.ustring.gmatch( string, '%|[%d%.,]+' ) do
local left_percent = left_percents[column] or left_percent_default or 50
left = mw.ustring.sub(mw.ustring.match(number, '^%|[%d, ]*'),2)
local right_percent = 100 - left_percent
right = mw.ustring.match(number, '%.[%d ]*$')
column = column + 1
if left=='' then left='0' end
formatted_number = '%|<span style=\"float: left; text-align: right; width: ' .. tostring(left_percent) .. '%;\">' .. left .. '</span>'
left_string = mw.ustring.sub(mw.ustring.match(number, '^%|[%d, ]*'),2)
if right then
right_string = mw.ustring.match(number, '%.[%d ]*$')
formatted_number = formatted_number .. '<span style=\"float: right; text-align: left; width: ' .. tostring(right_percent) .. '%;\">' .. right .. '</span>'
if left_string == '' then left_string = '0' end
formatted_number = '%|<span style=\"float: left; text-align: right; width: ' .. tostring(left_percent) .. '%;\">' .. left_string .. '</span>'
if right_string then
formatted_number = formatted_number .. '<span style=\"float: right; text-align: left; width: ' .. tostring(right_percent) .. '%;\">' .. right_string .. '</span>'
end
end
string = mw.ustring.gsub( string, number, formatted_number )
string = mw.ustring.gsub( string, number, formatted_number )

Revision as of 20:07, 24 January 2019

--Align numbers in table cells on the decimal point	
local p = {}

function p.main(frame)
	local input_string_raw = frame.args[1]
	string = frame:preprocess( input_string_raw )

	local left_percent_default = tonumber(frame.args['left'])
	local left_percents = {}
	left_percents[1] = tonumber(frame.args['left1'])
	left_percents[2] = tonumber(frame.args['left2'])
	left_percents[3] = tonumber(frame.args['left3'])
	left_percents[4] = tonumber(frame.args['left4'])
	left_percents[5] = tonumber(frame.args['left5'])
	left_percents[6] = tonumber(frame.args['left6'])
	left_percents[7] = tonumber(frame.args['left7'])
	left_percents[8] = tonumber(frame.args['left8'])
	left_percents[9] = tonumber(frame.args['left9'])
	left_percents[10] = tonumber(frame.args['left10'])

	local column = 1
	for number in mw.ustring.gmatch( string, '%|[%d%.,]+' ) do
		local left_percent = left_percents[column] or left_percent_default or 50
		local right_percent = 100 - left_percent
		column = column + 1
		
		left_string = mw.ustring.sub(mw.ustring.match(number, '^%|[%d, ]*'),2)
		right_string = mw.ustring.match(number, '%.[%d ]*$')
		if left_string == '' then left_string = '0' end
		formatted_number = '%|<span style=\"float: left; text-align: right; width: ' .. tostring(left_percent) .. '%;\">' .. left_string .. '</span>'
		if right_string then
			formatted_number = formatted_number .. '<span style=\"float: right; text-align: left; width: ' .. tostring(right_percent) .. '%;\">' .. right_string .. '</span>'
		end
		string = mw.ustring.gsub( string, number, formatted_number )
	end

	return string
	end

return p