// todo: move to version control backend IEnumerable<Conflict> Conflicts (Mono.TextEditor.TextDocument doc) { int mergeStart = 0; while ((mergeStart = doc.IndexOf ("<<<<<<<", mergeStart, doc.TextLength - mergeStart, StringComparison.Ordinal)) >= 0) { LineSegment start = doc.GetLineByOffset (mergeStart); if (start.Offset != mergeStart) continue; int dividerOffset = doc.IndexOf ("=======", mergeStart, doc.TextLength - mergeStart, StringComparison.Ordinal); LineSegment divider = doc.GetLineByOffset (dividerOffset); int endOffset = doc.IndexOf (">>>>>>>", dividerOffset, doc.TextLength - dividerOffset, StringComparison.Ordinal); LineSegment end = doc.GetLineByOffset (endOffset); mergeStart = dividerOffset + 1; yield return new Conflict (new TextSegment (start.EndOffsetIncludingDelimiter, divider.Offset - start.EndOffsetIncludingDelimiter), new TextSegment (divider.EndOffsetIncludingDelimiter, end.Offset - divider.EndOffsetIncludingDelimiter), start, divider, end); } }
// todo: move to version control backend IEnumerable<Conflict> Conflicts (Mono.TextEditor.Document doc) { foreach (int mergeStart in doc.SearchForward ("<<<<<<<", 0)) { LineSegment start = doc.GetLineByOffset (mergeStart); if (start.Offset != mergeStart) continue; int dividerOffset = doc.SearchForward ("=======", mergeStart).First (); LineSegment divider = doc.GetLineByOffset (dividerOffset); int endOffset = doc.SearchForward (">>>>>>>", dividerOffset).First (); LineSegment end = doc.GetLineByOffset (endOffset); yield return new Conflict (new Mono.TextEditor.Segment (start.EndOffset, divider.Offset - start.EndOffset), new Mono.TextEditor.Segment (divider.EndOffset, end.Offset - divider.EndOffset), new Mono.TextEditor.Segment (start), new Mono.TextEditor.Segment (divider), new Mono.TextEditor.Segment (end)); } }