Module:Pad

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
local p = {};
local arguments = require("Module:Arguments");

local function padStart(str, maxLength, fillString)
	s = ""
	for i = 0, maxLength - #str, 1 do
		f = "";
		for j = 0, #fill, 1 do
			c = string.sub(fill, j, j);
			if (#s + j + #str > maxLength) then
				return s..f..str;
			end
			f = f..c;
		end
		s = s..f;
	end
	return s..str;
end

local function padEnd(str, maxLength, fillString)
	s = str;
	for i = 0, maxLength - #str, 1 do
		f = "";
		for j = 0, #fill, 1 do
			c = string.sub(fill, j, j);
			if (#s + j > maxLength) then
				return s..f;
			end
			f = f..c;
		end
		s = s..f;
	end
	return s;
end

function p._pad(args)
	str = args.str;
	len = args.len;
	mode = args.mode;
	fill = args.fill;
	if (str == nil) then
		str = "";
	end
	if (len == nil) then
		return args.str;
	end
	if (mode == nill) then
		mode = "end";
	end
	if (fill == nil) then
		return str;
	end
	if (mode == "start") then
		return padStart(str, tonumber(len), fill);
	elseif (mode == "end") then
		return padEnd(str, tonumber(len), fill);
	else
		error("Invalid mode argument '"..mode.."'")
	end
end

function p.pad(frame)
	return p._pad(frame.args);
end

return p;