---------------------------------------------------------------------------------- --- Mudlet String Utils ---------------------------------------------------------------------------------- --- Cut string to specified maximum length. --- --- @release post Mudlet 1.1.1 (TODO update before release) --- --- @usage Following call will return 'abc'. ---
--- string.cut("abcde", 3)
---
--- @usage You can easily pad string to certain length.
--- Example bellow will print 'abcde ' e.g. pad/cut string to 10 characters.
---
--- local s = "abcde"
--- s = string.cut(s .. " ", 10) -- append 10 spaces
--- echo("'" .. s .. "'")
---
function string.cut(s, maxLen)
if string.len(s) > maxLen then
return string.sub(s, 1, maxLen)
else
return s
end
end
--- Enclose string by long brackets.
--- echo(string.genNocasePattern("123abc"))
---
function string.genNocasePattern(s)
s = string.gsub(s, "%a",
function (c)
return string.format("[%s%s]", string.lower(c), string.upper(c))
end)
return s
end
--- Return first matching substring or nil.
---
--- @release post Mudlet 1.1.1 (TODO update before release)
---
--- @return nil or first matching substring
---
--- @usage Following example will print: "I did find: Troll" string.
---
--- local match = string.findPattern("Troll is here!", "Troll")
--- if match then
--- echo("I did find: " .. match)
--- end
---
--- @usage This example will find substring regardless of case.
---
--- local match = string.findPattern("Troll is here!", string.genNocasePattern("troll"))
--- if match then
--- echo("I did find: " .. match)
--- end
---
---
--- @see string.genNocasePattern
function string.findPattern(text, pattern)
if string.find(text, pattern, 1) then
return string.sub(text, string.find(text, pattern, 1))
else
return nil
end
end
--- Splits a string into a table by the given delimiter.
---
--- @usage Split string by ", " delimiter.
---
--- names = "Alice, Bob, Peter"
--- name_table = names:split(", ")
--- display(name_table)
---
---
--- Previous code will print out:
---
--- table {
--- 1: 'Alice'
--- 2: 'Bob'
--- 3: 'Peter'
--- }
---
---
--- @return array with split strings
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
--- Test if string is starting with specified prefix.
---
--- @see string.ends
function string.starts(String, Prefix)
return string.sub(String,1,string.len(Prefix))==Prefix
end
--- Capitalize first character in a string.
---
--- @usage Variable testname is now Anna.
---
--- testname = string.title("anna")
---
--- @usage Example will set test to "Bob".
--- --- test = "bob" --- test = string.title(test) ---function string:title() assert(type(self) == "string", "string.title(): no word given to capitalize") self = self:gsub("^%l", string.upper, 1) return self end --- Trim string (remove all white spaces around string). --- --- @release post Mudlet 1.1.1 (TODO update before release) --- --- @usage Example will print 'Troll is here!'. ---
--- local str = string.trim(" Troll is here! ")
--- echo("'" .. str .. "'")
---
function string.trim(s)
if s then
return string.gsub(s, "^%s*(.-)%s*$", "%1")
else
return s
end
end