public void NoSpansOverlap() { var result = ParseSampleLesson(); var spans = result.FlattenSpans(); LessonSpan lastSpan = null; foreach (var span in spans) { if (lastSpan != null) { var iAfterLast = lastSpan.Content.GetIndexAfter(); if (iAfterLast > span.Content.Index) { Assert.Fail("Spans overlap"); } } lastSpan = span; } }
private static void DecorateSpansWithSkippedText(LessonDocument document) { // Decorate the LessonSpans with skipped parts var spans = document.FlattenSpans(); // Find gaps between the spans LessonSpan lastSpan = null; foreach (var span in spans) { var nextExpectedIndex = lastSpan != null?lastSpan.Content.GetIndexAfter() : 0; if (span.Content.Index > nextExpectedIndex) { // Get skipped content var skipLength = span.Content.Index - nextExpectedIndex; var skipContent = new StringWithIndex(document.Content.Source, nextExpectedIndex, skipLength); span.SkippedPreText = skipContent; } else if (span.Content.Index == nextExpectedIndex) { // Blank Skipped span.SkippedPreText = new StringWithIndex(document.Content.Source, nextExpectedIndex, 0); } // TODO: move to testing else { var lastSpanContent = lastSpan.Content; var skipped = span.SkippedPreText; var spanContent = span.Content; throw new ArgumentException("The document is malformed and has overlapping spans"); } lastSpan = span; } }