71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.IO;
|
|
using Microsoft.CodeAnalysis.Text;
|
|
|
|
namespace Microsoft.VisualStudio.Text
|
|
{
|
|
public class StringTextImage : ITextImage
|
|
{
|
|
private readonly SourceText _sourceText;
|
|
private readonly string _text;
|
|
|
|
public StringTextImage(string text)
|
|
{
|
|
_text = text;
|
|
_sourceText = SourceText.From(text);
|
|
}
|
|
|
|
public char this[int position] => _text[position];
|
|
|
|
public ITextImageVersion Version => null;
|
|
|
|
public int Length => _text.Length;
|
|
|
|
public int LineCount => _sourceText.Lines.Count;
|
|
|
|
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count)
|
|
{
|
|
_text.CopyTo(sourceIndex, destination, destinationIndex, count);
|
|
}
|
|
|
|
public TextImageLine GetLineFromLineNumber(int lineNumber)
|
|
{
|
|
var line = _sourceText.Lines[lineNumber];
|
|
return new TextImageLine(this, lineNumber, new Span(line.Start, line.End - line.Start), line.EndIncludingLineBreak - line.End);
|
|
}
|
|
|
|
public TextImageLine GetLineFromPosition(int position)
|
|
{
|
|
var line = _sourceText.Lines.GetLineFromPosition(position);
|
|
return new TextImageLine(this, line.LineNumber, new Span(line.Start, line.End - line.Start), line.EndIncludingLineBreak - line.End);
|
|
}
|
|
|
|
public int GetLineNumberFromPosition(int position)
|
|
{
|
|
return _sourceText.Lines.GetLineFromPosition(position).LineNumber;
|
|
}
|
|
|
|
public ITextImage GetSubText(Span span)
|
|
{
|
|
return new StringTextImage(_text.Substring(span.Start, span.Length));
|
|
}
|
|
|
|
public string GetText(Span span)
|
|
{
|
|
return _text.Substring(span.Start, span.Length);
|
|
}
|
|
|
|
public char[] ToCharArray(int startIndex, int length)
|
|
{
|
|
return _text.ToCharArray(startIndex, length);
|
|
}
|
|
|
|
public void Write(TextWriter writer, Span span)
|
|
{
|
|
writer.Write(_text.Substring(span.Start, span.Length));
|
|
}
|
|
}
|
|
}
|