internal IInteractiveWindowCommand TryParseCommand(SnapshotSpan span, out SnapshotSpan prefixSpan, out SnapshotSpan commandSpan, out SnapshotSpan argumentsSpan) { string prefix = CommandPrefix; SnapshotSpan trimmed = span.TrimStart(); if (!trimmed.StartsWith(prefix)) { prefixSpan = commandSpan = argumentsSpan = default(SnapshotSpan); return(null); } prefixSpan = trimmed.SubSpan(0, prefix.Length); var nameAndArgs = trimmed.SubSpan(prefix.Length).TrimStart(); SnapshotPoint nameEnd = nameAndArgs.IndexOfAnyWhiteSpace() ?? span.End; commandSpan = new SnapshotSpan(span.Snapshot, Span.FromBounds(nameAndArgs.Start.Position, nameEnd.Position)); argumentsSpan = new SnapshotSpan(span.Snapshot, Span.FromBounds(nameEnd.Position, span.End.Position)).Trim(); return(this[commandSpan.GetText()]); }