OSDN Git Service

DocumentクラスをPCLでも使えるようにした。これに伴い、ファイル操作はIStreamWriter,IStreamReaderインターフェイスを通じて行うようにした...
[fooeditengine/FooEditEngine.git] / Common / DocumentExtend.cs
diff --git a/Common/DocumentExtend.cs b/Common/DocumentExtend.cs
deleted file mode 100644 (file)
index 69c8b98..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*\r
- * Copyright (C) 2013 FooProject\r
- * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.\r
-\r
- * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of \r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r
-\r
-You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-\r
-//#define TEST_ASYNC\r
-\r
-using System;\r
-using System.IO;\r
-using System.Text;\r
-using System.Threading;\r
-using System.Threading.Tasks;\r
-\r
-namespace FooEditEngine\r
-{\r
-    /// <summary>\r
-    /// Documentの拡張クラス\r
-    /// </summary>\r
-    public static class DocumentExtend\r
-    {\r
-        /// <summary>\r
-        /// 進捗処理を表す\r
-        /// </summary>\r
-        public static event EventHandler<ProgressEventArgs> Progress;\r
-\r
-\r
-#if !METRO\r
-        /// <summary>\r
-        /// ファイルからドキュメントを構築します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="filepath">読み取り先のファイル</param>\r
-        /// <param name="enc">エンコーディング</param>\r
-        /// <remarks>\r
-        /// 非同期操作中はこのメソッドを実行することはできません。\r
-        /// </remarks>\r
-        public static void Load(this Document doc, string filepath, Encoding enc)\r
-        {\r
-            using (StreamReader sr = new StreamReader(filepath, enc))\r
-            {\r
-                Load(doc,sr);\r
-            }\r
-        }\r
-\r
-        /// <summary>\r
-        /// ファイルからドキュメントを非同期的に構築します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="filepath">読み取り先のファイル</param>\r
-        /// <param name="enc">エンコーディング</param>\r
-        /// <param name="token">キャンセル用のトークン</param>\r
-        /// <remarks>\r
-        /// 読み取り操作は別スレッドで行われます。\r
-        /// また、非同期操作中にこのメソッドを読みだすことはできません\r
-        /// </remarks>\r
-        public static async Task LoadAsync(this Document doc, string filepath, Encoding enc, CancellationTokenSource token)\r
-        {\r
-            using (StreamReader sr = new StreamReader(filepath, enc))\r
-            {\r
-                await LoadAsync(doc,sr, token);\r
-            }\r
-        }\r
-#endif\r
-\r
-        /// <summary>\r
-        /// ストリームからドキュメントを構築します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="sr">読み取り先のストリーム</param>\r
-        /// <remarks>\r
-        /// 非同期操作中はこのメソッドを実行することはできません\r
-        /// </remarks>\r
-        public static void Load(this Document doc, TextReader sr)\r
-        {\r
-            Task t = LoadAsync(doc,sr, null);\r
-            t.Wait();\r
-        }\r
-\r
-        /// <summary>\r
-        /// ストリームからドキュメントを非同期的に構築します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="sr">読み取り先のストリーム</param>\r
-        /// <param name="tokenSource">キャンセルトークン</param>\r
-        /// <returns>Taskオブジェクト</returns>\r
-        /// <remarks>\r
-        /// 読み取り操作は別スレッドで行われます。\r
-        /// また、非同期操作中はこのメソッドを実行することはできません。\r
-        /// </remarks>\r
-        public static async Task LoadAsync(this Document doc, TextReader sr, CancellationTokenSource tokenSource = null)\r
-        {\r
-            if (sr.Peek() == -1)\r
-            {\r
-                return;\r
-            }\r
-\r
-            try\r
-            {\r
-                await doc.LockAsync().ConfigureAwait(false);\r
-                Progress(doc,new ProgressEventArgs(ProgressState.Start));\r
-                doc.Clear();\r
-                doc.FireUpdateEvent = false;\r
-                doc.UndoManager.BeginLock();\r
-                string str;\r
-                for (int i = 0; (str = await sr.ReadLineAsync().ConfigureAwait(false)) != null; i++)\r
-                {\r
-                    int index = doc.Length;\r
-                    if (index < 0)\r
-                        index = 0;\r
-\r
-                    doc.Replace(index,0,str + Document.NewLine);\r
-\r
-                    if (tokenSource != null)\r
-                        tokenSource.Token.ThrowIfCancellationRequested();\r
-#if TEST_ASYNC\r
-                    System.Threading.Thread.Sleep(10);\r
-#endif\r
-                }\r
-            }\r
-            finally\r
-            {\r
-                doc.FireUpdateEvent = true;\r
-                doc.UndoManager.EndLock();\r
-                Progress(doc, new ProgressEventArgs(ProgressState.Complete));\r
-                doc.UnLock();\r
-            }\r
-        }\r
-\r
-#if !METRO\r
-        /// <summary>\r
-        /// ドキュメントをファイルに保存します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="filepath">保存先のファイル</param>\r
-        /// <param name="enc">保存したいエンコード</param>\r
-        /// <param name="newline">改行を表す文字列</param>\r
-        /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
-        public static void Save(this Document doc, string filepath, Encoding enc, string newline)\r
-        {\r
-            using (StreamWriter sw = new StreamWriter(filepath, false, enc))\r
-            {\r
-                sw.NewLine = newline;\r
-                Save(doc,sw);\r
-            }\r
-        }\r
-\r
-        /// <summary>\r
-        /// ドキュメントをファイルに保存します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="filepath">保存先のファイル</param>\r
-        /// <param name="enc">保存したいエンコード</param>\r
-        /// <param name="newline">改行を表す文字列</param>\r
-        /// <param name="token">CancellationTokenSourceオブジェクト</param>\r
-        /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
-        public static async Task SaveAsync(this Document doc, string filepath, Encoding enc, string newline,CancellationTokenSource token)\r
-        {\r
-            using (StreamWriter sw = new StreamWriter(filepath, false, enc))\r
-            {\r
-                sw.NewLine = newline;\r
-                await SaveAsync(doc,sw, token);\r
-            }\r
-        }\r
-#endif\r
-\r
-        /// <summary>\r
-        /// ストリームに保存します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="sw">保存先のストリーム</param>\r
-        /// <returns>Taskオブジェクト</returns>\r
-        /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
-        public static void Save(this Document doc, StreamWriter sw)\r
-        {\r
-            Task t = SaveAsync(doc,sw, null);\r
-            t.Wait();\r
-        }\r
-\r
-        /// <summary>\r
-        /// ストリームに非同期モードで保存します\r
-        /// </summary>\r
-        /// <param name="doc">Documentオブジェクト</param>\r
-        /// <param name="sw">保存先のストリーム</param>\r
-        /// <param name="tokenSource">キャンセルトークン</param>\r
-        /// <returns>Taskオブジェクト</returns>\r
-        /// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>\r
-        public static async Task SaveAsync(this Document doc,StreamWriter sw, CancellationTokenSource tokenSource = null)\r
-        {\r
-            try\r
-            {\r
-                await doc.LockAsync().ConfigureAwait(false);\r
-                Progress(doc, new ProgressEventArgs(ProgressState.Start));\r
-                StringBuilder line = new StringBuilder();\r
-                for (int i = 0; i < doc.Length; i++)\r
-                {\r
-                    char c = doc[i];\r
-                    line.Append(c);\r
-                    if (c == Document.NewLine || i == doc.Length - 1)\r
-                    {\r
-                        string str = line.ToString();\r
-                        str = str.Replace(Document.NewLine.ToString(), sw.NewLine);\r
-                        await sw.WriteAsync(str).ConfigureAwait(false);\r
-                        line.Clear();\r
-                        if (tokenSource != null)\r
-                            tokenSource.Token.ThrowIfCancellationRequested();\r
-#if TEST_ASYNC\r
-                    System.Threading.Thread.Sleep(10);\r
-#endif\r
-                    }\r
-                }\r
-            }\r
-            finally\r
-            {\r
-                Progress(doc, new ProgressEventArgs(ProgressState.Complete));\r
-                doc.UnLock();\r
-            }\r
-        }\r
-    }\r
-}\r