private CommandLineParserResult HandleExcept(CommandLineParserResult result, TokenizedInput tokens, string currentToken) { var index = tokens.IndexOf(currentToken) + 1; if (index >= tokens.Count) { return(null); } var except = new List <Object>(); // process rest of the tokens as objects for (int i = index; i < tokens.Count; i++) { // TODO: handle multiple objects with same name var next = tokens[i]; if (next.IsPreposition() && result.Preposition == null) { result.Preposition = Prepositions.Get(next); continue; } var obj = GetObject(result, next); if (obj == null) { result.Error = Messages.CantSeeObject; return(result); } else if (obj is MultipleObjectsFound) { var input = GetInput(result.Verb); if (input.Error.HasValue()) { return(input); } if (input.Objects.Count > 0) { except.AddRange(input.Objects); } } else { except.Add(obj); } } result.Objects = result.Objects.Where(x => !except.Contains(x)).ToList(); return(null); }