void AddSubBuffer(ReplSubBuffer buffer) { Debug.Assert(subBuffers.Count == 0 || subBuffers[subBuffers.Count - 1].Span.End == buffer.Span.Start); // AddOrUpdateOutputSubBuffer() should be called to merge output sub buffers Debug.Assert(buffer.Kind == ReplBufferKind.Code || subBuffers.Count == 0 || subBuffers[subBuffers.Count - 1].Kind != ReplBufferKind.Output); Debug.Assert(wpfTextView.TextSnapshot.GetLineFromPosition(buffer.Span.Start).Start.Position == buffer.Span.Start); Debug.Assert(wpfTextView.TextSnapshot.GetLineFromPosition(buffer.Span.End).Start.Position == buffer.Span.End); if (buffer.Kind == ReplBufferKind.Output && buffer.Span.Length == 0) { return; } subBuffers.Add(buffer); }
void AddCode(StringBuilder sb, ReplSubBuffer buf, int startOffset, int endOffset) { if (buf.Kind != ReplBufferKind.Code) { return; } startOffset = Math.Max(startOffset, buf.Span.Start); endOffset = Math.Min(endOffset, buf.Span.End); if (startOffset >= endOffset) { return; } var firstLine = wpfTextView.TextSnapshot.GetLineFromPosition(buf.Span.Start); var startLine = wpfTextView.TextSnapshot.GetLineFromPosition(startOffset); var prompt = firstLine.Start == startLine.Start ? PrimaryPrompt : SecondaryPrompt; int offs = startOffset; while (offs < endOffset) { var line = wpfTextView.TextSnapshot.GetLineFromPosition(offs); int skipChars = offs - line.Start.Position; if (skipChars < prompt.Length) { offs += prompt.Length - skipChars; } int eol = line.EndIncludingLineBreak.Position; int end = eol; if (end >= endOffset) { end = endOffset; } if (offs >= end) { break; } var s = wpfTextView.TextSnapshot.GetText(offs, end - offs); Debug.Assert(s.Length == end - offs); sb.Append(s); offs = eol; prompt = SecondaryPrompt; } }
public ReplSubBufferInfo(ReplSubBuffer buffer, int codeBufferIndex) { Buffer = buffer; CodeBufferIndex = codeBufferIndex; }
void AddSubBuffer(ReplSubBuffer buffer) { Debug.Assert(subBuffers.Count == 0 || subBuffers[subBuffers.Count - 1].Span.End == buffer.Span.Start); // AddOrUpdateOutputSubBuffer() should be called to merge output sub buffers Debug.Assert(buffer.Kind == ReplBufferKind.Code || subBuffers.Count == 0 || subBuffers[subBuffers.Count - 1].Kind != ReplBufferKind.Output); Debug.Assert(wpfTextView.TextSnapshot.GetLineFromPosition(buffer.Span.Start).Start.Position == buffer.Span.Start); Debug.Assert(wpfTextView.TextSnapshot.GetLineFromPosition(buffer.Span.End).Start.Position == buffer.Span.End); if (buffer.Kind == ReplBufferKind.Output && buffer.Span.Length == 0) return; subBuffers.Add(buffer); }
void AddCode(StringBuilder sb, ReplSubBuffer buf, int startOffset, int endOffset) { if (buf.Kind != ReplBufferKind.Code) return; startOffset = Math.Max(startOffset, buf.Span.Start); endOffset = Math.Min(endOffset, buf.Span.End); if (startOffset >= endOffset) return; var firstLine = wpfTextView.TextSnapshot.GetLineFromPosition(buf.Span.Start); var startLine = wpfTextView.TextSnapshot.GetLineFromPosition(startOffset); var prompt = firstLine.Start == startLine.Start ? PrimaryPrompt : SecondaryPrompt; int offs = startOffset; while (offs < endOffset) { var line = wpfTextView.TextSnapshot.GetLineFromPosition(offs); int skipChars = offs - line.Start.Position; if (skipChars < prompt.Length) offs += prompt.Length - skipChars; int eol = line.EndIncludingLineBreak.Position; int end = eol; if (end >= endOffset) end = endOffset; if (offs >= end) break; var s = wpfTextView.TextSnapshot.GetText(offs, end - offs); Debug.Assert(s.Length == end - offs); sb.Append(s); offs = eol; prompt = SecondaryPrompt; } }