private void ParseOption( CommandTreeParserContext context, CommandTreeTokenStream stream, CommandTreeToken token, CommandTree node, bool isLongOption) { // Consume the option token. stream.Consume(isLongOption ? CommandTreeToken.Kind.LongOption : CommandTreeToken.Kind.ShortOption); if (context.State == State.Normal) { // Find the option. var option = node.FindOption(token.Value, isLongOption, CaseSensitivity); if (option != null) { node.Mapped.Add(new MappedCommandParameter( option, ParseOptionValue(context, stream, token, node, option))); return; } // Help? if (_help?.IsMatch(token.Value) == true) { node.ShowHelp = true; return; } } if (context.State == State.Remaining) { ParseOptionValue(context, stream, token, node, null); return; } if (context.ParsingMode == ParsingMode.Strict) { throw CommandParseException.UnknownOption(context.Arguments, token); } else { ParseOptionValue(context, stream, token, node, null); } }