protected static function eatMap($input)
{
$map = [];
$cluster = null;
$input = ltrim($input, ' ');
while (strlen($input)) {
$c = $input[0];
if ($c === ' ') {
$input = ltrim(substr($input, 1), ' ');
continue;
} elseif ($c === ',') {
$input = ltrim(substr($input, 1), ' ');
} elseif ($c === '}') {
$input = substr($input, 1);
break;
}
$chunk = self::eatKey($input);
$key = $chunk[0];
$input = ltrim($chunk[1], ' ');
if (strlen($input)) {
$chunk = self::eatValue($input);
$map[$key] = $chunk[0];
$input = ltrim($chunk[1], ' ');
} else {
$map[$key] = null;
break;
}
}
return [$map, $input];
}