Example #1
0
 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);
 }
Example #2
0
        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;
            }
        }
Example #3
0
 public ReplSubBufferInfo(ReplSubBuffer buffer, int codeBufferIndex)
 {
     Buffer          = buffer;
     CodeBufferIndex = codeBufferIndex;
 }
Example #4
0
		public ReplSubBufferInfo(ReplSubBuffer buffer, int codeBufferIndex) {
			Buffer = buffer;
			CodeBufferIndex = codeBufferIndex;
		}
Example #5
0
		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);
		}
Example #6
0
		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;
			}
		}