docs: def split(self):
          """Start parsing the pattern."""
  
          split_index = []
          parts = []
          start = -1
  
          pattern = self.pattern.decode('latin-1') if self.is_bytes else self.pattern
  
          i = util.StringIter(pattern)
          iter(i)
  
          # Detect and store away windows drive as a literal
          if self.win_drive_detect:
              m = RE_WIN_PATH.match(pattern)
              if m:
                  drive = m.group(0).replace('\\\\', '\\')
                  if self.is_bytes:
                      drive = drive.encode('latin-1')
                  parts.append(WcGlob(drive, False, False, True, True))
                  start = m.end(0) - 1
                  i.advance(start + 1)
              elif pattern.startswith('\\\\'):
                  parts.append(WcGlob(b'\\' if self.is_bytes else '\\', False, False, True, True))
                  start = 1
                  i.advance(2)
          elif not self.win_drive_detect and pattern.startswith('/'):
              parts.append(WcGlob(b'/' if self.is_bytes else '/', False, False, True, True))
              start = 0
              i.advance(1)
  
          for c in i:
              if self.extend and c in EXT_TYPES and self.parse_extend(c, i):
                  continue
  
              if c == '\\':
                  index = i.index
                  value = ''
                  try:
                      value = self._references(i)
                      if self.bslash_abort and value == '\\':
                          split_index.append((i.index - 2, 1))
                  except StopIteration:
                      i.rewind(i.index - index)
                      if self.bslash_abort:
                          split_index.append((i.index - 1, 0))
              elif c == '/':
                  split_index.append((i.index - 1, 0))
              elif c == '[':
                  index = i.index
                  try:
                      self._sequence(i)
                  except StopIteration:
                      i.rewind(i.index - index)
  
          for split, offset in split_index:
              if self.is_bytes:
                  value = pattern[start + 1:split].encode('latin-1')
              else:
                  value = pattern[start + 1:split]
              self.store(value, parts, True)
              start = split + offset
  
          if start < len(pattern):
              if self.is_bytes:
                  value = pattern[start + 1:].encode('latin-1')
              else:
                  value = pattern[start + 1:]
              if value:
                  self.store(value, parts, False)
          if len(pattern) == 0:
              parts.append(WcGlob(pattern.encode('latin-1') if self.is_bytes else pattern, False, False, False, False))
  
          return parts