--[[
Functions that operate on strings that *really* should be present in the Lua
standard library, but somehow aren't.
A good rule of thumb is to ask "does Javascript have a built-in function for
this?". If yes, then your implementation probably belongs here.
]]--

--- Pads str to length len with char from right
-- @source https://snipplr.com/view/13092/strlpad--pad-string-to-the-left
local function str_padend(str, len, char)
	if char == nil then char = ' ' end
	return str .. string.rep(char, len - #str)
end
--- Pads str to length len with char from left
-- Adapted from the above
local function str_padstart(str, len, char)
	if char == nil then char = ' ' end
	return string.rep(char, len - #str) .. str
end

--- Equivalent to string.startsWith in JS
-- @param	str		string	The string to operate on
-- @param	start	number	The start string to look for
-- @returns	bool	Whether start is present at the beginning of str
local function str_starts(str, start)
   return string.sub(str, 1, string.len(start)) == start
end

--- Equivalent to string.endsWith in JS
-- @param	str			string	The string to operate on
-- @param	substr_end	number	The ending string to look for
-- @returns	bool		Whether substr_end is present at the end of str
local function str_ends(str, substr_end)
	return string.sub(str, -string.len(substr_end)) == substr_end
end

--- Trims whitespace from a string from the beginning and the end.
-- From http://lua-users.org/wiki/StringTrim
-- @param	str		string	The string to trim the whitespace from.
-- @returns	string	A copy of the original string with the whitespace trimmed.
local function trim(str)
   return (str:gsub("^%s*(.-)%s*$", "%1"))
end


return {
	str_padend = str_padend,
	str_padstart = str_padstart,
	str_starts = str_starts,
	str_ends = str_ends,
	trim = trim
}
