Files
SzmediTools/Szmedi.RvKits/ScriptPad/editor/TextContainer.cs

42 lines
1.4 KiB
C#
Raw Normal View History

2025-09-16 16:06:41 +08:00
using System;
using ICSharpCode.AvalonEdit.Document;
using Microsoft.CodeAnalysis.Text;
namespace ScriptPad.Editor
{
public class TextContainer : SourceTextContainer , IDisposable
{
public TextContainer(TextDocument document)
{
this.TextDocument = document;
this.currentText = SourceText.From(document.GetText(0, document.TextLength));
document.Changed += Document_Changed;
}
private void Document_Changed(object sender, DocumentChangeEventArgs e)
{
var old = currentText;
var remove = new TextChange(new TextSpan(e.Offset, e.RemovalLength), "");
currentText = currentText.WithChanges(remove);
var insert = new TextChange(new TextSpan(e.Offset, 0), e.InsertedText.Text);
currentText = currentText.WithChanges(insert);
TextChanged?.Invoke(this, new Microsoft.CodeAnalysis.Text.TextChangeEventArgs(old, currentText, remove, insert));
}
public TextDocument TextDocument { get; private set; }
private SourceText currentText;
public override SourceText CurrentText => currentText;
public override event EventHandler<Microsoft.CodeAnalysis.Text.TextChangeEventArgs> TextChanged;
public void Dispose()
{
this.TextDocument.Changed -= Document_Changed;
}
}
}