OSDN Git Service

Documentから直接ロードできるようにした
[fooeditengine/FooEditEngine.git] / Core / Document.cs
index cef3067..0db9009 100644 (file)
@@ -224,6 +224,8 @@ namespace FooEditEngine
             set;
         }
 
+        public event ProgressEventHandler LoadProgress;
+
         /// <summary>
         /// ルーラーやキャレット・行番号などの表示すべきものが変化した場合に呼び出される。ドキュメントの内容が変化した通知を受け取り場合はUpdateを使用してください
         /// </summary>
@@ -980,11 +982,14 @@ namespace FooEditEngine
         /// 読み取り操作は別スレッドで行われます。
         /// また、非同期操作中はこのメソッドを実行することはできません。
         /// </remarks>
-        internal async Task LoadAsync(IStreamReader fs, CancellationTokenSource tokenSource = null)
+        public async Task LoadAsync(TextReader fs, CancellationTokenSource tokenSource = null)
         {
-            if (fs.IsEnd())
+            if (fs.Peek() == -1)
                 return;
 
+            if (this.LoadProgress != null)
+                this.LoadProgress(this, new ProgressEventArgs(ProgressState.Start));
+
             try
             {
                 this.Clear();
@@ -997,6 +1002,8 @@ namespace FooEditEngine
                 this.FireUpdateEvent = true;
                 //これ以降の操作にだけダーティフラグを適用しないとおかしなことになる
                 this.LayoutLines.IsFrozneDirtyFlag = false;
+                if (this.LoadProgress != null)
+                    this.LoadProgress(this, new ProgressEventArgs(ProgressState.Complete));
             }
         }
 
@@ -1007,7 +1014,7 @@ namespace FooEditEngine
         /// <param name="tokenSource">キャンセルトークン</param>
         /// <returns>Taskオブジェクト</returns>
         /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>
-        internal async Task SaveAsync(IStreamWriter fs, CancellationTokenSource tokenSource = null)
+        public async Task SaveAsync(TextWriter fs, CancellationTokenSource tokenSource = null)
         {
             try
             {
@@ -1205,50 +1212,6 @@ namespace FooEditEngine
     }
 
     /// <summary>
-    /// IStreamReaderインターフェイス
-    /// </summary>
-    public interface IStreamReader
-    {
-        /// <summary>
-        /// ストリームが空かどうかを返す
-        /// </summary>
-        bool IsEnd();
-
-        /// <summary>
-        /// ストリームから行を読み取った物を返す。LoadAsyncを呼び出す場合は必ず実装してください
-        /// </summary>
-        Task<string> ReadLineAsync();
-        /// <summary>
-        /// ストリームから指定した文字数だけ読み取る
-        /// </summary>
-        /// <param name="buffer">書き込み先バッファー</param>
-        /// <param name="index">書き込み先バッファーのインデックス</param>
-        /// <param name="count">読み取る文字数</param>
-        /// <returns>読み取った文字数</returns>
-        Task<int> ReadAsync(char[] buffer, int index, int count);
-    }
-
-    /// <summary>
-    /// IStreamWriter
-    /// </summary>
-    public interface IStreamWriter
-    {
-        /// <summary>
-        /// ストリームに書き込む。SaveAsyncを呼び出す場合は必ず実装してください
-        /// </summary>
-        Task WriteAsync(string str);
-
-        /// <summary>
-        /// 書き込む際に使用する改行コード
-        /// </summary>
-        string NewLine
-        {
-            get;
-            set;
-        }
-    }
-
-    /// <summary>
     /// 検索結果を表す
     /// </summary>
     public class SearchResult