diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs index 5913667065..7d4c0799da 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs @@ -105,6 +105,31 @@ namespace ICSharpCode.AvalonEdit.Document undoStack.AttachToDocument(this); FireChangeEvents(); } + + /// + /// Create a new text document with the specified initial text. + /// + public TextDocument(ITextSource initialText) + : this(GetTextFromTextSource(initialText)) + { + } + + // gets the text from a text source, directly retrieving the underlying rope where possible + static IEnumerable GetTextFromTextSource(ITextSource textSource) + { + if (textSource == null) + throw new ArgumentNullException("textSource"); + + RopeTextSource rts = textSource as RopeTextSource; + if (rts != null) + return rts.GetRope(); + + TextDocument doc = textSource as TextDocument; + if (doc != null) + return doc.rope; + + return textSource.Text; + } #endregion #region Text diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs index e284fb2503..f3777caa1f 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditor.cs @@ -58,18 +58,16 @@ namespace ICSharpCode.AvalonEdit textArea.TextView.Services.AddService(typeof(TextEditor), this); - SetCurrentPropertyValue(OptionsProperty, textArea.Options); - SetCurrentPropertyValue(DocumentProperty, new TextDocument()); + SetCurrentValue(OptionsProperty, textArea.Options); + SetCurrentValue(DocumentProperty, new TextDocument()); } - void SetCurrentPropertyValue(DependencyProperty property, object value) + #if !DOTNET4 + void SetCurrentValue(DependencyProperty property, object value) { - #if DOTNET4 - SetCurrentValue(property, value); - #else SetValue(property, value); - #endif } + #endif #endregion /// @@ -440,7 +438,7 @@ namespace ICSharpCode.AvalonEdit if (e.PropertyName == "IsOriginalFile") { TextDocument document = this.Document; if (document != null) { - SetCurrentPropertyValue(IsModifiedProperty, Boxes.Box(!document.UndoStack.IsOriginalFile)); + SetCurrentValue(IsModifiedProperty, Boxes.Box(!document.UndoStack.IsOriginalFile)); } return true; } else {