Halo Esports Wiki

We are currently performing extensive maintenance to this wiki and as a result there will likely be errors. Please be patient while we work to fix all problems.

READ MORE

Halo Esports Wiki
Advertisement

To edit the documentation or categories for this module, click here.
This is an exact copy of the built-in mw.text.gsplit, mw.text.split, and mw.text.trim functions, just using the significantly faster string library instead of the ustring library. As such, this won't work properly if you're trying to split a string by unicode characters, or trim unicode characters from a string. Unicode characters being in the string should be fine though.


-- Source: https://phabricator.wikimedia.org/diffusion/ELUA/browse/master/includes/engines/LuaCommon/lualib/mw.text.lua
local p = {}

function p.gsplit( text, pattern, plain )
  local s, l = 1, text:len()
  return function ()
    if s then
      local e, n = text:find( pattern, s, plain )
      local ret
      if not e then
        ret = text:sub( s )
        s = nil
      elseif n < e then
        -- Empty separator!
        ret = text:sub( s, e )
        if e < l then
          s = e + 1
        else
          s = nil
        end
      else
        ret = e > s and text:sub( s, e - 1 ) or ''
        s = n + 1
      end
      return ret
    end
  end, nil, nil
end

function p.split( text, pattern, plain )
  local ret = {}
  for m in p.gsplit( text, pattern, plain ) do
    ret[#ret+1] = m
  end
  return ret
end

function p.trim( s, charset )
	charset = charset or '\t\r\n\f '
	s = s:gsub( '^[' .. charset .. ']*(.-)[' .. charset .. ']*$', '%1' )
	return s
end

return p
Advertisement