aboutsummaryrefslogtreecommitdiff
path: root/string2.lua
diff options
context:
space:
mode:
Diffstat (limited to 'string2.lua')
-rw-r--r--string2.lua134
1 files changed, 134 insertions, 0 deletions
diff --git a/string2.lua b/string2.lua
new file mode 100644
index 0000000..387fd65
--- /dev/null
+++ b/string2.lua
@@ -0,0 +1,134 @@
+local reverse, upper, lower, find, byte, match, gmatch, gsub, sub, format, rep, char
+do
+ local _obj_0 = string
+ reverse, upper, lower, find, byte, match, gmatch, gsub, sub, format, rep, char = _obj_0.reverse, _obj_0.upper, _obj_0.lower, _obj_0.find, _obj_0.byte, _obj_0.match, _obj_0.gmatch, _obj_0.gsub, _obj_0.sub, _obj_0.format, _obj_0.rep, _obj_0.char
+end
+local isplit
+isplit = function(self, sep)
+ if sep == nil then
+ sep = '%s+'
+ end
+ local step
+ step = function(self, i)
+ local start = self.pos
+ if not (start) then
+ return
+ end
+ i = i + 1
+ local nl = find(self.str, self.sep, start)
+ self.pos = nl and (nl + 1) or nil
+ local line = sub(self.str, start, nl and (nl - 1) or #self.str)
+ return i, line, start, (nl and (nl - 1) or #self.str)
+ end
+ return step, {
+ str = self,
+ pos = 1,
+ sep = sep
+ }, 0
+end
+local string2 = {
+ isplit = isplit,
+ uppercase = upper,
+ lowercase = lower,
+ reversed = reverse,
+ capitalized = function(self)
+ return gsub(self, '%l', upper, 1)
+ end,
+ byte = byte,
+ bytes = function(self, i, j)
+ return {
+ byte(self, i or 1, j or -1)
+ }
+ end,
+ split = function(self, sep)
+ local _accum_0 = { }
+ local _len_0 = 1
+ for i, chunk in isplit(self, sep) do
+ _accum_0[_len_0] = chunk
+ _len_0 = _len_0 + 1
+ end
+ return _accum_0
+ end,
+ lines = function(self)
+ local _accum_0 = { }
+ local _len_0 = 1
+ for i, line in isplit(self, '\n') do
+ _accum_0[_len_0] = line
+ _len_0 = _len_0 + 1
+ end
+ return _accum_0
+ end,
+ line = function(self, line_num)
+ for i, line, start in isplit(self, '\n') do
+ if i == line_num then
+ return line
+ end
+ end
+ end,
+ line_at = function(self, pos)
+ assert(type(pos) == 'number', "Invalid string position")
+ if pos < 1 or pos > #self then
+ return
+ end
+ for i, line, start, stop in isplit(self, '\n') do
+ if stop >= pos then
+ return line, i, (pos - start + 1)
+ end
+ end
+ end,
+ wrap = function(self, maxlen, buffer)
+ if maxlen == nil then
+ maxlen = 80
+ end
+ if buffer == nil then
+ buffer = 8
+ end
+ local lines = { }
+ local _list_0 = self:lines()
+ for _index_0 = 1, #_list_0 do
+ local line = _list_0[_index_0]
+ while #line > maxlen do
+ local chunk = line:sub(1, maxlen)
+ local split = chunk:find(' ', maxlen - buffer, true) or maxlen
+ chunk = line:sub(1, split)
+ line = line:sub(split + 1, -1)
+ lines[#lines + 1] = chunk
+ end
+ lines[#lines + 1] = line
+ end
+ return table.concat(lines, "\n")
+ end,
+ as_lua_id = function(str)
+ local orig = str
+ str = gsub(str, "^ *$", "%1 ")
+ str = gsub(str, "x([0-9A-F][0-9A-F])", "x78%1")
+ str = gsub(str, "%W", function(c)
+ if c == ' ' then
+ return '_'
+ else
+ return format("x%02X", byte(c))
+ end
+ end)
+ str = gsub(str, "^_*%d", "_%1")
+ if str.from_lua_id then
+ local re_orig = str:from_lua_id()
+ if re_orig ~= orig then
+ require('ldt').breakpoint()
+ end
+ end
+ return str
+ end,
+ from_lua_id = function(str)
+ str = gsub(str, "^_(_*%d.*)", "%1")
+ str = gsub(str, "_", " ")
+ str = gsub(str, "x([0-9A-F][0-9A-F])", function(hex)
+ return char(tonumber(hex, 16))
+ end)
+ str = gsub(str, "^ ([ ]*)$", "%1")
+ return str
+ end
+}
+for k, v in pairs(string) do
+ string2[k] = string2[k] or v
+end
+return string2