private function parseOptionSequence() { $tokens = $this->tokens->pop()->getValue(); for ($i = 0; $i < strlen($tokens); ++$i) { if (!($definition = $this->globalDefinitionRepository->find($tokens[$i]))) { $definition = new OptionDefinition($tokens[$i], null, null, 'bool'); } $this->addOption($definition); } }
public function createFrom($symbols, OptionDefinitionRepository $definitionRepository) { $options = []; $positional = []; for ($i = 0, $max = count($symbols); $i < $max; ++$i) { $symbol = $symbols[$i]; if (empty($symbol)) { continue; } // Command or Argument if ($symbol[0] != '-') { $positional[] = $symbol; continue; } $size = strlen($symbol); // Single Dash if ($size == 1) { $positional[] = $symbol; continue; } // Double Dash if ($size == 2 && $symbol[1] == '-') { $positional[] = $symbol; continue; } // Long Option if ($symbol[1] == '-') { $parts = explode('=', substr($symbol, 2), 2); $name = $parts[0]; $definition = $definitionRepository->find($name); if (!$definition) { return null; } switch ($definition->getType()) { case OptionDefinition::TYPE_BOOL: $options[$definition->getLabel()][] = new Option($name, $definition, true); break; case OptionDefinition::TYPE_VALUE: $value = isset($parts[1]) ? $parts[1] : $symbols[++$i]; $options[$definition->getLabel()][] = new Option($name, $definition, $value); break; } continue; } // Short Options $shortOptions = substr($symbol, 1); while (!empty($shortOptions)) { $name = $shortOptions[0]; $shortOptions = substr($shortOptions, 1); $definition = $definitionRepository->find($name); if (!$definition) { return null; } switch ($definition->getType()) { case OptionDefinition::TYPE_BOOL: $options[$definition->getLabel()][] = new Option($name, $definition, true); break; case OptionDefinition::TYPE_VALUE: $value = null; if (!empty($shortOptions)) { $value = $shortOptions[0] == '=' ? substr($shortOptions, 1) : $shortOptions; $shortOptions = ''; } if ($value === null) { $value = $symbols[++$i]; } $options[$definition->getLabel()][] = new Option($name, $definition, $value); break; } } } $positional = array_reverse($positional); foreach ($options as &$optionGroup) { $optionGroup = array_reverse($optionGroup); } return new InputSequence($options, $positional); }
private function processArgs(OptionDefinitionRepository $optionRepository) { /** @var OptionDefinition $optionDefinition */ foreach ($optionRepository as $optionDefinition) { $this->options[$optionDefinition->getLongName() ?: $optionDefinition->getShortName()] = null; } foreach ($this->args as $arg) { switch (true) { case $arg instanceof Command: $this->command[] = $arg->getName(); break; case $arg instanceof Argument: $this->arguments[$arg->getName()][] = $arg->getValue(); break; case $arg instanceof Option: $this->options[$this->getOptionName($arg)][] = $arg->getValue(); break; } } foreach ($this->options as $key => $value) { if ($value === null) { $this->options[$key] = [$optionRepository->find($key)->getDefault()]; } } }