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;
}