docs: def split_delimited(delimiters, split_by, text):
      """
      Generator that walks the ``text`` and splits it into an array on
      ``split_by``, being careful not to break inside a delimiter pair.
      ``delimiters`` should be an even-length string with each pair of matching
      delimiters listed together, open first.
  
  
      >>> list(split_delimited('{}[]', ',', ''))
      ['']
      >>> list(split_delimited('', ',', 'foo,bar'))
      ['foo', 'bar']
      >>> list(split_delimited('[]', ',', 'foo,[bar, baz]'))
      ['foo', '[bar, baz]']
      >>> list(split_delimited('{}', ' ', '{Type Name} name Desc'))
      ['{Type Name}', 'name', 'Desc']
      >>> list(split_delimited('[]{}', ',', '[{foo,[bar, baz]}]'))
      ['[{foo,[bar, baz]}]']
  
      Two adjacent delimiters result in a zero-length string between them:
  
      >>> list(split_delimited('{}', ' ', '{Type Name}  Desc'))
      ['{Type Name}', '', 'Desc']
  
      ``split_by`` may be a predicate function instead of a string, in which
      case it should return true on a character to split.
  
      >>> list(split_delimited('', lambda c: c in '[]{}, ', '[{foo,[bar, baz]}]'))
      ['', '', 'foo', '', 'bar', '', 'baz', '', '', '']
  
      """
      delims = [0] * (old_div(len(delimiters), 2))
      actions = {}
      for i in range(0, len(delimiters), 2):
          actions[delimiters[i]] = (old_div(i, 2), 1)
          actions[delimiters[i + 1]] = (old_div(i, 2), -1)
  
      if isinstance(split_by, str):
          def split_fn(c): return c == split_by
      else:
          split_fn = split_by
      last = 0
  
      for i in range(len(text)):
          c = text[i]
          if split_fn(c) and not any(delims):
              yield text[last:i]
              last = i + 1
          try:
              which, dir = actions[c]
              delims[which] = delims[which] + dir
          except KeyError:
              pass # Normal character
      yield text[last:]