Browse Source

Removed gtkMode from Next/PreviousWord.

As we always want this behaviour.
Steven Kirk 9 years ago
parent
commit
af696acc69
2 changed files with 28 additions and 98 deletions
  1. 4 4
      src/Avalonia.Controls/TextBox.cs
  2. 24 94
      src/Avalonia.Controls/Utils/StringUtils.cs

+ 4 - 4
src/Avalonia.Controls/TextBox.cs

@@ -495,10 +495,10 @@ namespace Avalonia.Controls
                         case 2:
                             if (!StringUtils.IsStartOfWord(text, index))
                             {
-                                SelectionStart = StringUtils.PreviousWord(text, index, true);
+                                SelectionStart = StringUtils.PreviousWord(text, index);
                             }
 
-                            SelectionEnd = StringUtils.NextWord(text, index, true);
+                            SelectionEnd = StringUtils.NextWord(text, index);
                             break;
                         case 3:
                             SelectionStart = 0;
@@ -638,11 +638,11 @@ namespace Avalonia.Controls
             {
                 if (direction > 0)
                 {
-                    CaretIndex += StringUtils.NextWord(text, caretIndex, true) - caretIndex;
+                    CaretIndex += StringUtils.NextWord(text, caretIndex) - caretIndex;
                 }
                 else
                 {
-                    CaretIndex += StringUtils.PreviousWord(text, caretIndex, true) - caretIndex;
+                    CaretIndex += StringUtils.PreviousWord(text, caretIndex) - caretIndex;
                 }
             }
         }

+ 24 - 94
src/Avalonia.Controls/Utils/StringUtils.cs

@@ -57,7 +57,7 @@ namespace Avalonia.Controls.Utils
             }
         }
 
-        public static int PreviousWord(string text, int cursor, bool gtkMode)
+        public static int PreviousWord(string text, int cursor)
         {
             int begin;
             int i;
@@ -81,60 +81,21 @@ namespace Avalonia.Controls.Utils
                 return (cr > 0) ? cr : 0;
             }
 
-            if (gtkMode)
-            {
-                CharClass cc = GetCharClass(text[cursor - 1]);
-                begin = lf + 1;
-                i = cursor;
-
-                // skip over the word, punctuation, or run of whitespace
-                while (i > begin && GetCharClass(text[i - 1]) == cc)
-                {
-                    i--;
-                }
+            CharClass cc = GetCharClass(text[cursor - 1]);
+            begin = lf + 1;
+            i = cursor;
 
-                // if the cursor was at whitespace, skip back a word too
-                if (cc == CharClass.CharClassWhitespace && i > begin)
-                {
-                    cc = GetCharClass(text[i - 1]);
-                    while (i > begin && GetCharClass(text[i - 1]) == cc)
-                    {
-                        i--;
-                    }
-                }
-            }
-            else
+            // skip over the word, punctuation, or run of whitespace
+            while (i > begin && GetCharClass(text[i - 1]) == cc)
             {
-                begin = lf + 1;
-                i = cursor;
-
-                if (cursor < text.Length)
-                {
-                    // skip to the beginning of this word
-                    while (i > begin && !char.IsWhiteSpace(text[i - 1]))
-                    {
-                        i--;
-                    }
-
-                    if (i < cursor && IsStartOfWord(text, i))
-                    {
-                        return i;
-                    }
-                }
-
-                // skip to the start of the lwsp
-                while (i > begin && char.IsWhiteSpace(text[i - 1]))
-                {
-                    i--;
-                }
-
-                if (i > begin)
-                {
-                    i--;
-                }
+                i--;
+            }
 
-                // skip to the beginning of the word
-                while (i > begin && !IsStartOfWord(text, i))
+            // if the cursor was at whitespace, skip back a word too
+            if (cc == CharClass.CharClassWhitespace && i > begin)
+            {
+                cc = GetCharClass(text[i - 1]);
+                while (i > begin && GetCharClass(text[i - 1]) == cc)
                 {
                     i--;
                 }
@@ -143,7 +104,7 @@ namespace Avalonia.Controls.Utils
             return i;
         }
 
-        public static int NextWord(string text, int cursor, bool gtkMode)
+        public static int NextWord(string text, int cursor)
         {
             int i, lf, cr;
 
@@ -169,50 +130,19 @@ namespace Avalonia.Controls.Utils
                 return cursor;
             }
 
-            if (gtkMode)
-            {
-                CharClass cc = GetCharClass(text[cursor]);
-                i = cursor;
-
-                // skip over the word, punctuation, or run of whitespace
-                while (i < cr && GetCharClass(text[i]) == cc)
-                {
-                    i++;
-                }
+            CharClass cc = GetCharClass(text[cursor]);
+            i = cursor;
 
-                // skip any whitespace after the word/punct
-                while (i < cr && char.IsWhiteSpace(text[i]))
-                {
-                    i++;
-                }
-            }
-            else
+            // skip over the word, punctuation, or run of whitespace
+            while (i < cr && GetCharClass(text[i]) == cc)
             {
-                i = cursor;
-
-                // skip any whitespace before the word
-                while (i < cr && char.IsWhiteSpace(text[i]))
-                {
-                    i++;
-                }
-
-                // skip to the end of the current word
-                while (i < cr && !char.IsWhiteSpace(text[i]))
-                {
-                    i++;
-                }
-
-                // skip any whitespace after the word
-                while (i < cr && char.IsWhiteSpace(text[i]))
-                {
-                    i++;
-                }
+                i++;
+            }
 
-                // find the start of the next word
-                while (i < cr && !IsStartOfWord(text, i))
-                {
-                    i++;
-                }
+            // skip any whitespace after the word/punct
+            while (i < cr && char.IsWhiteSpace(text[i]))
+            {
+                i++;
             }
 
             return i;