OSDN Git Service

大文字小文字を区別しないオプションが機能しない問題を修正した
authorgdkhd812 <jbh03215@htmil.co.jp>
Thu, 26 Sep 2013 09:07:09 +0000 (18:07 +0900)
committergdkhd812 <jbh03215@htmil.co.jp>
Thu, 26 Sep 2013 09:07:09 +0000 (18:07 +0900)
Common/StringBuffer.cs
WPF/UnitTest/UnitTest2.cs

index 3fda41a..ac7d7e6 100644 (file)
@@ -137,9 +137,9 @@ namespace FooEditEngine
 \r
         internal void Replace(string target, string pattern,bool ci = false)\r
         {\r
-            TextSearch ts = new TextSearch(target);\r
+            TextSearch ts = new TextSearch(target,ci);\r
             int left = 0, right = 0;\r
-            while((right = ts.IndexOf(this.buf,left,ci)) != -1)\r
+            while((right = ts.IndexOf(this.buf,left)) != -1)\r
             {\r
                 this.buf.RemoveRange(right, target.Length);\r
                 this.buf.InsertRange(right, pattern, pattern.Length);\r
@@ -151,8 +151,8 @@ namespace FooEditEngine
 \r
         internal int IndexOf(string target, int start,bool ci = false)\r
         {\r
-            TextSearch ts = new TextSearch(target);\r
-            return ts.IndexOf(this.buf, start,ci);\r
+            TextSearch ts = new TextSearch(target,ci);\r
+            return ts.IndexOf(this.buf, start);\r
         }\r
 \r
         /// <summary>\r
@@ -196,11 +196,21 @@ namespace FooEditEngine
         string pattern;\r
         int patternLength;\r
         Dictionary<char, int> qsTable = new Dictionary<char, int>();\r
-        public TextSearch(string pattern)\r
+        bool caseInsenstive;\r
+        public TextSearch(string pattern,bool ci = false)\r
         {\r
             this.pattern = pattern;\r
             this.patternLength = pattern.Length;\r
-            this.CreateQSTable(pattern);\r
+            this.caseInsenstive = ci;\r
+            if (ci)\r
+            {\r
+                this.CreateQSTable(pattern.ToLower());\r
+                this.CreateQSTable(pattern.ToUpper());\r
+            }\r
+            else\r
+            {\r
+                this.CreateQSTable(pattern);\r
+            }\r
         }\r
         void CreateQSTable(string pattern)\r
         {\r
@@ -213,7 +223,7 @@ namespace FooEditEngine
                     this.qsTable[pattern[i]] = len - i;\r
             }\r
         }\r
-        public int IndexOf(GapBuffer<char> buf, int start, bool ci = false)\r
+        public int IndexOf(GapBuffer<char> buf, int start)\r
         {\r
             //QuickSearch法\r
             int buflen = buf.Count - 1;\r
@@ -226,7 +236,7 @@ namespace FooEditEngine
                 while (j < plen)\r
                 {\r
                     bool unmatch;\r
-                    if (ci)\r
+                    if (this.caseInsenstive)\r
                         unmatch = Char.ToUpper(buf[i + j]) != Char.ToUpper(this.pattern[j]);\r
                     else\r
                         unmatch = buf[i + j] != this.pattern[j];\r
index 32d760d..cdb94b6 100644 (file)
@@ -145,6 +145,12 @@ namespace UnitTest
             buf.Replace(0, 0, str, str.Length);
             index = buf.IndexOf("ABC", 0);
             Assert.IsTrue(index == 1);
+
+            index = buf.IndexOf("abc", 0,true);
+            Assert.IsTrue(index == 1);
+
+            index = buf.IndexOf("abc", 0);
+            Assert.IsTrue(index == -1);
         }
 
         [TestMethod]