/// <summary> /// Moves forward by one char or one classification span /// </summary> /// <returns>true, if moved</returns> public override bool MoveNext() { if (!AtEnd()) { //operators are processed char by char, because the classifier can merge several operators into one span (like "]]", "[]") CurrentPoint = CurrentSpan != null && CurrentSpan.ClassificationType.Classification != "punctuation" ? CurrentSpan.Span.End : CurrentPoint + 1; if (SpanIndex.ContainsKey(CurrentPoint.Position)) { CurrentSpan = SpanIndex[CurrentPoint.Position]; } else { if (CurrentSpan != null && CurrentPoint.Position >= CurrentSpan.Span.End.Position) //we're out of current span { CurrentSpan = null; } } return(true); } return(false); }