private static int SkipWhileForward(IReadOnlyLineView lineView, int start, Predicate <char> predicate) { int pos; for (pos = start; pos < lineView.Length; pos++) { char symbol = lineView[pos]; if (!predicate(symbol)) { break; } } return(pos); }
private static int SkipWhileBackward(IReadOnlyLineView lineView, int start, Predicate <char> predicate) { int pos; for (pos = start; pos >= 0; pos--) { char symbol = lineView[pos]; if (!predicate(symbol)) { break; } } return(pos); }
public int FindNextPosition(IReadOnlyLineView lineView) { if (lineView.Position >= lineView.Length - 1) { return(lineView.Length); } int nextPos = lineView.Position + 1; char nextSymbol = lineView[nextPos]; if (IsWhitespace(nextSymbol)) { nextPos = SkipWhileForward(lineView, nextPos, IsWhitespace); return(SkipWhileForward(lineView, nextPos, NotWhitespace)); } else { return(SkipWhileForward(lineView, nextPos, NotWhitespace)); } }
public int FindPrevPosition(IReadOnlyLineView lineView) { if (lineView.Position == 0) { return(0); } int prevPos = lineView.Position - 1; char prevSymbol = lineView[prevPos]; if (IsWhitespace(prevSymbol)) { prevPos = SkipWhileBackward(lineView, prevPos, IsWhitespace); return(SkipWhileBackward(lineView, prevPos, NotWhitespace) + 1); } else { return(SkipWhileBackward(lineView, prevPos, NotWhitespace) + 1); } }