public function parse()

in src/parser/PhutilSimpleOptions.php [38:115]


  public function parse($input) {
    $result = array();

    $lexer = new PhutilSimpleOptionsLexer();
    $tokens = $lexer->getNiceTokens($input);

    $state = 'key';
    $pairs = array();
    foreach ($tokens as $token) {
      list($type, $value) = $token;
      switch ($state) {
        case 'key':
          if ($type != 'word') {
            return array();
          }
          if (!strlen($value)) {
            return array();
          }
          $key = $this->normalizeKey($value);
          $state = '=';
          break;
        case '=':
          if ($type == '=') {
            $state = 'value';
            break;
          }
          if ($type == ',') {
            $pairs[] = array($key, true);
            $state = 'key';
            break;
          }
          return array();
        case 'value':
          if ($type == ',') {
            $pairs[] = array($key, null);
            $state = 'key';
            break;
          }
          if ($type != 'word') {
            return array();
          }
          $pairs[] = array($key, $value);
          $state = ',';
          break;
        case ',':
          if ($type == 'word') {
            $pair = array_pop($pairs);
            $pair[1] .= $value;
            $pairs[] = $pair;
            break;
          }
          if ($type != ',') {
            return array();
          }
          $state = 'key';
          break;
      }
    }

    if ($state == '=') {
      $pairs[] = array($key, true);
    }
    if ($state == 'value') {
      $pairs[] = array($key, null);
    }

    $result = array();
    foreach ($pairs as $pair) {
      list($key, $value) = $pair;
      if ($value === null) {
        unset($result[$key]);
      } else {
        $result[$key] = $value;
      }
    }

    return $result;
  }