public FrugalList <SnapshotPoint> MapInsertionPointToSourceSnapshots(IElisionSnapshot elisionSnapshot, int exposedPosition) { FrugalList <SnapshotPoint> points = new FrugalList <SnapshotPoint>(); this.root.MapInsertionPointToSourceSnapshots(elisionSnapshot, exposedPosition, 0, points); return(points); }
private Span MapNullSpansToSourceSnapshots(IElisionSnapshot elisionSnapshot, Span span, FrugalList <SnapshotSpan> result) { // TODO: this is identical to projection snapshot; can it be shared? FrugalList <SnapshotPoint> points = MapInsertionPointToSourceSnapshots(elisionSnapshot, span.Start); for (int p = 0; p < points.Count; ++p) { SnapshotPoint point = points[p]; SnapshotSpan mappedSpan = new SnapshotSpan(point.Snapshot, point.Position, 0); if (result.Count == 0 || mappedSpan != result[result.Count - 1]) { result.Add(mappedSpan); } } return(span); }
public void MapToSourceSnapshots(IElisionSnapshot elisionSnapshot, Span span, FrugalList <SnapshotSpan> result) { if (span.Length == 0) { span = MapNullSpansToSourceSnapshots(elisionSnapshot, span, result); } else { this.root.MapToSourceSnapshots(elisionSnapshot.SourceSnapshot, span, 0, result); } #if DEBUG int length = 0; foreach (SnapshotSpan ss in result) { length += ss.Length; } Debug.Assert(length == span.Length); #endif }
public static IEnumerable <Tuple <ITextSnapshotLine, ITextSnapshotLine> > GetSnapshotLinesAndSourceLines(this IElisionSnapshot snapshot, ITextBuffer source) { return((from editLine in snapshot.Lines let position = snapshot.MapToSourceSnapshot(editLine.Start.Position) select new { editLine, dataLine = source.CurrentSnapshot.GetLineFromPosition(position) }).Select(x => Tuple.Create <ITextSnapshotLine, ITextSnapshotLine>(x.editLine, x.dataLine)).ToList <Tuple <ITextSnapshotLine, ITextSnapshotLine> >()); }