     value2 = @value.substring(splitIndex)
     [new Token(value: value1, scopes: @scopes), new Token(value: value2, scopes: @scopes)]
 
+  whitespaceRegexForTabLength: (tabLength) ->
+    whitespaceRegexesByTabLength[tabLength] ?= new RegExp("([ ]{#{tabLength}})|(\t)|([^\t]+)", "g")
+
   breakOutAtomicTokens: (tabLength, breakOutLeadingWhitespace) ->
     if @hasSurrogatePair
       outputTokens = []

        return [this] unless /\t/.test(@value)

      outputTokens = []
      regex = new RegExp("([ ]{#{tabLength}})|(\t)|([^\t]+)", "g")

      while match = regex.exec(@value)
        [fullMatch, softTab, hardTab] = match
        if softTab and breakOutLeadingWhitespace

_ = require 'underscore'
textUtils = require 'text-utils'

whitespaceRegexesByTabLength = {}

module.exports =
class Token
