116 lines
2.3 KiB
Lua
116 lines
2.3 KiB
Lua
|
----------------------------------------------------------
|
||
|
-- Licensed under the GNU General Public License version 2
|
||
|
-- * Copyright (C) 2009 Adrian C. <anrxc_sysphere_org>
|
||
|
----------------------------------------------------------
|
||
|
|
||
|
-- {{{ Grab environment
|
||
|
local pairs = pairs
|
||
|
local tonumber = tonumber
|
||
|
local tostring = tostring
|
||
|
local table = { insert = table.insert }
|
||
|
local math = {
|
||
|
pow = math.pow,
|
||
|
floor = math.floor
|
||
|
}
|
||
|
local string = {
|
||
|
sub = string.sub,
|
||
|
gsub = string.gsub,
|
||
|
find = string.find
|
||
|
}
|
||
|
-- }}}
|
||
|
|
||
|
|
||
|
-- Helpers: provides helper functions for vicious widgets
|
||
|
module("vicious.helpers")
|
||
|
|
||
|
|
||
|
-- {{{ Helper functions
|
||
|
-- {{{ Format a string with args
|
||
|
function format(format, args)
|
||
|
-- TODO: Find a more efficient way to do this
|
||
|
|
||
|
-- Format a string
|
||
|
for var, val in pairs(args) do
|
||
|
format = string.gsub(format, "$"..var, val)
|
||
|
end
|
||
|
|
||
|
-- Return formatted string
|
||
|
return format
|
||
|
end
|
||
|
-- }}}
|
||
|
|
||
|
-- {{{ Padd a number to a minimum amount of digits
|
||
|
function padd(number, padding)
|
||
|
s = tostring(number)
|
||
|
|
||
|
if padding == nil then
|
||
|
return s
|
||
|
end
|
||
|
|
||
|
for i=1, padding do
|
||
|
if math.floor(number/math.pow(10,(i-1))) == 0 then
|
||
|
s = "0"..s
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if number == 0 then
|
||
|
s = s:sub(2)
|
||
|
end
|
||
|
|
||
|
return s
|
||
|
end
|
||
|
-- }}}
|
||
|
|
||
|
-- {{{ Convert amount of bytes to string
|
||
|
function bytes_to_string(bytes, sec, padding)
|
||
|
if bytes == nil or tonumber(bytes) == nil then
|
||
|
return ""
|
||
|
end
|
||
|
|
||
|
bytes = tonumber(bytes)
|
||
|
|
||
|
local signs = {}
|
||
|
signs[1] = " b"
|
||
|
signs[2] = "KiB"
|
||
|
signs[3] = "MiB"
|
||
|
signs[4] = "GiB"
|
||
|
signs[5] = "TiB"
|
||
|
|
||
|
sign = 1
|
||
|
|
||
|
while bytes/1024 > 1 and signs[sign+1] ~= nil do
|
||
|
bytes = bytes/1024
|
||
|
sign = sign+1
|
||
|
end
|
||
|
|
||
|
bytes = bytes*10
|
||
|
bytes = math.floor(bytes)/10
|
||
|
|
||
|
if padding then
|
||
|
bytes = padd(bytes*10, padding+1)
|
||
|
bytes = bytes:sub(1, bytes:len()-1).."."..bytes:sub(bytes:len())
|
||
|
end
|
||
|
|
||
|
if sec then
|
||
|
return tostring(bytes)..signs[sign].."ps"
|
||
|
else
|
||
|
return tostring(bytes)..signs[sign]
|
||
|
end
|
||
|
end
|
||
|
-- }}}
|
||
|
|
||
|
--{{{ Escape a string
|
||
|
function escape(text)
|
||
|
if text then
|
||
|
text = text:gsub("&", "&")
|
||
|
text = text:gsub("<", "<")
|
||
|
text = text:gsub(">", ">")
|
||
|
text = text:gsub("'", "'")
|
||
|
text = text:gsub("\"", """)
|
||
|
end
|
||
|
|
||
|
return text
|
||
|
end
|
||
|
-- }}}
|
||
|
-- }}}
|