/**
  * Explodes a string as explode() does, however, not if $sep is escaped or within a string.
  *
  * @since 1.0.0
  *
  * @param string  $sep    Separator.
  * @param string  $string String.
  * @return array
  */
 public function explode_ws($sep, $string)
 {
     $status = 'st';
     $to = '';
     $output = array();
     $num = 0;
     for ($i = 0, $len = strlen($string); $i < $len; $i++) {
         switch ($status) {
             case 'st':
                 if ($string[$i] === $sep && !$this->parser->escaped($string, $i)) {
                     ++$num;
                 } elseif ('"' === $string[$i] || "'" === $string[$i] || '(' === $string[$i] && !$this->parser->escaped($string, $i)) {
                     $status = 'str';
                     $to = '(' === $string[$i] ? ')' : $string[$i];
                     isset($output[$num]) ? $output[$num] .= $string[$i] : ($output[$num] = $string[$i]);
                 } else {
                     isset($output[$num]) ? $output[$num] .= $string[$i] : ($output[$num] = $string[$i]);
                 }
                 break;
             case 'str':
                 if ($string[$i] === $to && !$this->parser->escaped($string, $i)) {
                     $status = 'st';
                 }
                 isset($output[$num]) ? $output[$num] .= $string[$i] : ($output[$num] = $string[$i]);
                 break;
         }
     }
     if (isset($output[0])) {
         return $output;
     } else {
         return array($output);
     }
 }