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 {