OSDN Git Service

Split jazzy into a separate jar and add the ability to index MicroSoft & PDF document...
[neighbornote/NeighborNote.git] / src / com / swabunga / spell / engine / DoubleMeta.java
diff --git a/src/com/swabunga/spell/engine/DoubleMeta.java b/src/com/swabunga/spell/engine/DoubleMeta.java
deleted file mode 100644 (file)
index 343c169..0000000
+++ /dev/null
@@ -1,713 +0,0 @@
-/*\r
-Jazzy - a Java library for Spell Checking\r
-Copyright (C) 2001 Mindaugas Idzelis\r
-Full text of license can be found in LICENSE.txt\r
-\r
-This library is free software; you can redistribute it and/or\r
-modify it under the terms of the GNU Lesser General Public\r
-License as published by the Free Software Foundation; either\r
-version 2.1 of the License, or (at your option) any later version.\r
-\r
-This library is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-Lesser General Public License for more details.\r
-\r
-You should have received a copy of the GNU Lesser General Public\r
-License along with this library; if not, write to the Free Software\r
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
-*/\r
-package com.swabunga.spell.engine;\r
-\r
-\r
-/**\r
- * A phonetic encoding algorithm that takes an English word and computes a phonetic version of it. This\r
- * allows for phonetic matches in a spell checker. This class is a port of the C++ DoubleMetaphone() class,\r
- * which was intended to return two possible phonetic translations for certain words, although the Java version\r
- * only seems to be concerned with one, making the "double" part erroneous.\r
- * <br>\r
- * source code for the original C++ can be found\r
- * here: <a href="http://aspell.sourceforge.net/metaphone/"/>http://aspell.sourceforge.net/metaphone/</a>\r
- * DoubleMetaphone does some processing, such as uppercasing, on the input string first to normalize it. Then, to\r
- * create the key, the function traverses the input string in a while loop, sending successive characters into a giant\r
- * switch statement. Before determining the appropriate pronunciation, the algorithm considers the context\r
- * surrounding each character within the input string.\r
- * <p>\r
- * Things that were changed:\r
- *   <br/>The alternate flag could be set to true but was never checked so why bother with it. REMOVED\r
- *   <br/>Why was this class serializable?\r
- *   <br/>The primary, in, length and last variables could be initialized and local to the\r
- *   process method and references passed around the appropriate methods. As such there are\r
- *   no class variables and this class becomes firstly threadsafe and secondly could be static final.\r
- *   <br/>The function call SlavoGermaic was called repeatedly in the process function, it is now only called once.\r
- *\r
- */\r
-public class DoubleMeta implements Transformator {\r
-\r
-  /**\r
-   * The replace list is used in the getSuggestions method.\r
-   * All of the letters in the misspelled word are replaced with the characters from\r
-   * this list to try and generate more suggestions, which implies l*n tries,\r
-   * if l is the size of the string, and n is the size of this list.\r
-   *\r
-   * In addition to that, each of these letters is added to the misspelled word.\r
-   */\r
-  private static char[] replaceList = {'A', 'B', 'X', 'S', 'K', 'J', 'T', 'F', 'H', 'L', 'M', 'N', 'P', 'R', '0'};\r
-\r
-\r
-  private static final String[] myList = {"GN", "KN", "PN", "WR", "PS", ""};\r
-  private static final String[] list1 = {"ACH", ""};\r
-  private static final String[] list2 = {"BACHER", "MACHER", ""};\r
-  private static final String[] list3 = {"CAESAR", ""};\r
-  private static final String[] list4 = {"CHIA", ""};\r
-  private static final String[] list5 = {"CH", ""};\r
-  private static final String[] list6 = {"CHAE", ""};\r
-  private static final String[] list7 = {"HARAC", "HARIS", ""};\r
-  private static final String[] list8 = {"HOR", "HYM", "HIA", "HEM", ""};\r
-  private static final String[] list9 = {"CHORE", ""};\r
-  private static final String[] list10 = {"VAN ", "VON ", ""};\r
-  private static final String[] list11 = {"SCH", ""};\r
-  private static final String[] list12 = {"ORCHES", "ARCHIT", "ORCHID", ""};\r
-  private static final String[] list13 = {"T", "S", ""};\r
-  private static final String[] list14 = {"A", "O", "U", "E", ""};\r
-  private static final String[] list15 = {"L", "R", "N", "M", "B", "H", "F", "V", "W", " ", ""};\r
-  private static final String[] list16 = {"MC", ""};\r
-  private static final String[] list17 = {"CZ", ""};\r
-  private static final String[] list18 = {"WICZ", ""};\r
-  private static final String[] list19 = {"CIA", ""};\r
-  private static final String[] list20 = {"CC", ""};\r
-  private static final String[] list21 = {"I", "E", "H", ""};\r
-  private static final String[] list22 = {"HU", ""};\r
-  private static final String[] list23 = {"UCCEE", "UCCES", ""};\r
-  private static final String[] list24 = {"CK", "CG", "CQ", ""};\r
-  private static final String[] list25 = {"CI", "CE", "CY", ""};\r
-// DMV: used by the orininal code which returned two phonetic code, but not the current code\r
-//    private static final String[] list26 = {\r
-//        "CIO", "CIE", "CIA", ""\r
-//    };\r
-  private static final String[] list27 = {" C", " Q", " G", ""};\r
-  private static final String[] list28 = {"C", "K", "Q", ""};\r
-  private static final String[] list29 = {"CE", "CI", ""};\r
-  private static final String[] list30 = {"DG", ""};\r
-  private static final String[] list31 = {"I", "E", "Y", ""};\r
-  private static final String[] list32 = {"DT", "DD", ""};\r
-  private static final String[] list33 = {"B", "H", "D", ""};\r
-  private static final String[] list34 = {"B", "H", "D", ""};\r
-  private static final String[] list35 = {"B", "H", ""};\r
-  private static final String[] list36 = {"C", "G", "L", "R", "T", ""};\r
-  private static final String[] list37 = {"EY", ""};\r
-  private static final String[] list38 = {"LI", ""};\r
-  private static final String[] list39 = {"ES", "EP", "EB", "EL", "EY", "IB", "IL", "IN", "IE", "EI", "ER", ""};\r
-  private static final String[] list40 = {"ER", ""};\r
-  private static final String[] list41 = {"DANGER", "RANGER", "MANGER", ""};\r
-  private static final String[] list42 = {"E", "I", ""};\r
-  private static final String[] list43 = {"RGY", "OGY", ""};\r
-  private static final String[] list44 = {"E", "I", "Y", ""};\r
-  private static final String[] list45 = {"AGGI", "OGGI", ""};\r
-  private static final String[] list46 = {"VAN ", "VON ", ""};\r
-  private static final String[] list47 = {"SCH", ""};\r
-  private static final String[] list48 = {"ET", ""};\r
-\r
-//  DMV: used by the orininal code which returned two phonetic code, but not the current code\r
-//    private static final String[] list49 = {\r
-//        "IER ", ""\r
-//    };\r
-  private static final String[] list50 = {"JOSE", ""};\r
-  private static final String[] list51 = {"SAN ", ""};\r
-  private static final String[] list52 = {"SAN ", ""};\r
-  private static final String[] list53 = {"JOSE", ""};\r
-  private static final String[] list54 = {"L", "T", "K", "S", "N", "M", "B", "Z", ""};\r
-  private static final String[] list55 = {"S", "K", "L", ""};\r
-  private static final String[] list56 = {"ILLO", "ILLA", "ALLE", ""};\r
-  private static final String[] list57 = {"AS", "OS", ""};\r
-  private static final String[] list58 = {"A", "O", ""};\r
-  private static final String[] list59 = {"ALLE", ""};\r
-  private static final String[] list60 = {"UMB", ""};\r
-  private static final String[] list61 = {"ER", ""};\r
-  private static final String[] list62 = {"P", "B", ""};\r
-  private static final String[] list63 = {"IE", ""};\r
-  private static final String[] list64 = {"ME", "MA", ""};\r
-  private static final String[] list65 = {"ISL", "YSL", ""};\r
-  private static final String[] list66 = {"SUGAR", ""};\r
-  private static final String[] list67 = {"SH", ""};\r
-  private static final String[] list68 = {"HEIM", "HOEK", "HOLM", "HOLZ", ""};\r
-  private static final String[] list69 = {"SIO", "SIA", ""};\r
-  private static final String[] list70 = {"SIAN", ""};\r
-  private static final String[] list71 = {"M", "N", "L", "W", ""};\r
-  private static final String[] list72 = {"Z", ""};\r
-  private static final String[] list73 = {"Z", ""};\r
-  private static final String[] list74 = {"SC", ""};\r
-  private static final String[] list75 = {"OO", "ER", "EN", "UY", "ED", "EM", ""};\r
-  private static final String[] list76 = {"ER", "EN", ""};\r
-  private static final String[] list77 = {"I", "E", "Y", ""};\r
-  private static final String[] list78 = {"AI", "OI", ""};\r
-  private static final String[] list79 = {"S", "Z", ""};\r
-  private static final String[] list80 = {"TION", ""};\r
-  private static final String[] list81 = {"TIA", "TCH", ""};\r
-  private static final String[] list82 = {"TH", ""};\r
-  private static final String[] list83 = {"TTH", ""};\r
-  private static final String[] list84 = {"OM", "AM", ""};\r
-  private static final String[] list85 = {"VAN ", "VON ", ""};\r
-  private static final String[] list86 = {"SCH", ""};\r
-  private static final String[] list87 = {"T", "D", ""};\r
-  private static final String[] list88 = {"WR", ""};\r
-  private static final String[] list89 = {"WH", ""};\r
-  private static final String[] list90 = {"EWSKI", "EWSKY", "OWSKI", "OWSKY", ""};\r
-  private static final String[] list91 = {"SCH", ""};\r
-  private static final String[] list92 = {"WICZ", "WITZ", ""};\r
-  private static final String[] list93 = {"IAU", "EAU", ""};\r
-  private static final String[] list94 = {"AU", "OU", ""};\r
-  private static final String[] list95 = {"C", "X", ""};\r
-\r
-//  DMV: used by the orininal code which returned two phonetic code, but not the current code\r
-//    private static final String[] list96 = {\r
-//        "ZO", "ZI", "ZA", ""\r
-//    };\r
-\r
-  /**\r
-   * put your documentation comment here\r
-   * @return\r
-   */\r
-  private final static boolean SlavoGermanic(String in) {\r
-    if ((in.indexOf("W") > -1) || (in.indexOf("K") > -1) || (in.indexOf("CZ") > -1) || (in.indexOf("WITZ") > -1))\r
-      return true;\r
-    return false;\r
-  }\r
-\r
-  /**\r
-   * put your documentation comment here\r
-   * @param main\r
-   */\r
-  private final static void MetaphAdd(StringBuffer primary, String main) {\r
-    if (main != null) {\r
-      primary.append(main);\r
-    }\r
-  }\r
-\r
-  private final static void MetaphAdd(StringBuffer primary, char main) {\r
-    primary.append(main);\r
-  }\r
-\r
-  /**\r
-   * put your documentation comment here\r
-   * @param at\r
-   * @return\r
-   */\r
-  private final static boolean isVowel(String in, int at, int length) {\r
-    if ((at < 0) || (at >= length))\r
-      return false;\r
-    char it = in.charAt(at);\r
-    if ((it == 'A') || (it == 'E') || (it == 'I') || (it == 'O') || (it == 'U') || (it == 'Y'))\r
-      return true;\r
-    return false;\r
-  }\r
-\r
-  /**\r
-   * put your documentation comment here\r
-   * @param string\r
-   * @param start\r
-   * @param length\r
-   * @param list\r
-   * @return\r
-   */\r
-  private final static boolean stringAt(String string, int start, int length, String[] list) {\r
-    if ((start < 0) || (start >= string.length()) || list.length == 0)\r
-      return false;\r
-    String substr = string.substring(start, start + length);\r
-    for (int i = 0; i < list.length; i++) {\r
-      if (list[i].equals(substr))\r
-        return true;\r
-    }\r
-    return false;\r
-  }\r
-\r
-  /**\r
-   * Take the given word, and return the best phonetic hash for it.\r
-   * Vowels are minimized as much as possible, and consenants\r
-   * that have similiar sounds are converted to the same consenant\r
-   * for example, 'v' and 'f' are both converted to 'f'\r
-   * @param word the texte to transform\r
-   * @return the result of the phonetic transformation\r
-   */\r
-  public final String transform(String word) {\r
-    StringBuffer primary = new StringBuffer(word.length() + 5);\r
-    String in = word.toUpperCase() + "     ";\r
-    int current = 0;\r
-    int length = in.length();\r
-    if (length < 1)\r
-      return "";\r
-    int last = length - 1;\r
-    boolean isSlavoGermaic = SlavoGermanic(in);\r
-    if (stringAt(in, 0, 2, myList))\r
-      current += 1;\r
-    if (in.charAt(0) == 'X') {\r
-      MetaphAdd(primary, 'S');\r
-      current += 1;\r
-    }\r
-    while (current < length) {\r
-      switch (in.charAt(current)) {\r
-        case 'A':\r
-        case 'E':\r
-        case 'I':\r
-        case 'O':\r
-        case 'U':\r
-        case 'Y':\r
-          if (current == 0)\r
-            MetaphAdd(primary, 'A');\r
-          current += 1;\r
-          break;\r
-        case 'B':\r
-          MetaphAdd(primary, 'P');\r
-          if (in.charAt(current + 1) == 'B')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          break;\r
-        case '\u00C7':\r
-          MetaphAdd(primary, 'S');\r
-          current += 1;\r
-          break;\r
-        case 'C':\r
-          if ((current > 1) && !isVowel(in, current - 2, length) && stringAt(in, (current - 1), 3, list1) && (in.charAt(current + 2) != 'I') && (in.charAt(current + 2) != 'E') || stringAt(in, (current - 2), 6, list2)) {\r
-            MetaphAdd(primary, 'K');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if ((current == 0) && stringAt(in, current, 6, list3)) {\r
-            MetaphAdd(primary, 'S');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 4, list4)) {\r
-            MetaphAdd(primary, 'K');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 2, list5)) {\r
-            if ((current > 0) && stringAt(in, current, 4, list6)) {\r
-              MetaphAdd(primary, 'K');\r
-              current += 2;\r
-              break;\r
-            }\r
-            if ((current == 0) && stringAt(in, (current + 1), 5, list7) || stringAt(in, current + 1, 3, list8) && !stringAt(in, 0, 5, list9)) {\r
-              MetaphAdd(primary, 'K');\r
-              current += 2;\r
-              break;\r
-            }\r
-            if (stringAt(in, 0, 4, list10) || stringAt(in, 0, 3, list11) || stringAt(in, current - 2, 6, list12) || stringAt(in, current + 2, 1, list13) || (stringAt(in, current - 1, 1, list14) || (current == 0)) && stringAt(in, current + 2, 1, list15)) {\r
-              MetaphAdd(primary, 'K');\r
-            } else {\r
-              if (current > 0) {\r
-                if (stringAt(in, 0, 2, list16))\r
-                  MetaphAdd(primary, 'K');\r
-                else\r
-                  MetaphAdd(primary, 'X');\r
-              } else {\r
-                MetaphAdd(primary, 'X');\r
-              }\r
-            }\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 2, list17) && !stringAt(in, current, 4, list18)) {\r
-            MetaphAdd(primary, 'S');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 2, list19)) {\r
-            MetaphAdd(primary, 'X');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 2, list20) && !((current == 1) && in.charAt(0) == 'M')) {\r
-            if (stringAt(in, current + 2, 1, list21) && !stringAt(in, current + 2, 2, list22)) {\r
-              if (((current == 1) && (in.charAt(current - 1) == 'A')) || stringAt(in, (current - 1), 5, list23))\r
-                MetaphAdd(primary, "KS");\r
-              else\r
-                MetaphAdd(primary, 'X');\r
-              current += 3;\r
-              break;\r
-            } else {\r
-              MetaphAdd(primary, 'K');\r
-              current += 2;\r
-              break;\r
-            }\r
-          }\r
-          if (stringAt(in, current, 2, list24)) {\r
-            MetaphAdd(primary, 'K');\r
-            current += 2;\r
-            break;\r
-          } else if (stringAt(in, current, 2, list25)) {\r
-            MetaphAdd(primary, 'S');\r
-            current += 2;\r
-            break;\r
-          }\r
-\r
-          MetaphAdd(primary, 'K');\r
-          if (stringAt(in, current + 1, 2, list27))\r
-            current += 3;\r
-          else if (stringAt(in, current + 1, 1, list28) && !stringAt(in, current + 1, 2, list29))\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          break;\r
-        case 'D':\r
-          if (stringAt(in, current, 2, list30)) {\r
-            if (stringAt(in, current + 2, 1, list31)) {\r
-              MetaphAdd(primary, 'J');\r
-              current += 3;\r
-              break;\r
-            } else {\r
-              MetaphAdd(primary, "TK");\r
-              current += 2;\r
-              break;\r
-            }\r
-          }\r
-          MetaphAdd(primary, 'T');\r
-          if (stringAt(in, current, 2, list32)) {\r
-            current += 2;\r
-          } else {\r
-            current += 1;\r
-          }\r
-          break;\r
-        case 'F':\r
-          if (in.charAt(current + 1) == 'F')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'F');\r
-          break;\r
-        case 'G':\r
-          if (in.charAt(current + 1) == 'H') {\r
-            if ((current > 0) && !isVowel(in, current - 1, length)) {\r
-              MetaphAdd(primary, 'K');\r
-              current += 2;\r
-              break;\r
-            }\r
-            if (current < 3) {\r
-              if (current == 0) {\r
-                if (in.charAt(current + 2) == 'I')\r
-                  MetaphAdd(primary, 'J');\r
-                else\r
-                  MetaphAdd(primary, 'K');\r
-                current += 2;\r
-                break;\r
-              }\r
-            }\r
-            if ((current > 1) && stringAt(in, current - 2, 1, list33) || ((current > 2) && stringAt(in, current - 3, 1, list34)) || ((current > 3) && stringAt(in, current - 4, 1, list35))) {\r
-              current += 2;\r
-              break;\r
-            } else {\r
-              if ((current > 2) && (in.charAt(current - 1) == 'U') && stringAt(in, current - 3, 1, list36)) {\r
-                MetaphAdd(primary, 'F');\r
-              } else {\r
-                if ((current > 0) && (in.charAt(current - 1) != 'I'))\r
-                  MetaphAdd(primary, 'K');\r
-              }\r
-              current += 2;\r
-              break;\r
-            }\r
-          }\r
-          if (in.charAt(current + 1) == 'N') {\r
-            if ((current == 1) && isVowel(in, 0, length) && !isSlavoGermaic) {\r
-              MetaphAdd(primary, "KN");\r
-            } else {\r
-              if (!stringAt(in, current + 2, 2, list37) && (in.charAt(current + 1) != 'Y') && !isSlavoGermaic) {\r
-                MetaphAdd(primary, "N");\r
-              } else {\r
-                MetaphAdd(primary, "KN");\r
-              }\r
-            }\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current + 1, 2, list38) && !isSlavoGermaic) {\r
-            MetaphAdd(primary, "KL");\r
-            current += 2;\r
-            break;\r
-          }\r
-          if ((current == 0) && ((in.charAt(current + 1) == 'Y') || stringAt(in, current + 1, 2, list39))) {\r
-            MetaphAdd(primary, 'K');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if ((stringAt(in, current + 1, 2, list40) || (in.charAt(current + 1) == 'Y')) && !stringAt(in, 0, 6, list41) && !stringAt(in, current - 1, 1, list42) && !stringAt(in, current - 1, 3, list43)) {\r
-            MetaphAdd(primary, 'K');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current + 1, 1, list44) || stringAt(in, current - 1, 4, list45)) {\r
-            if (stringAt(in, 0, 4, list46) || stringAt(in, 0, 3, list47) || stringAt(in, current + 1, 2, list48)) {\r
-              MetaphAdd(primary, 'K');\r
-            } else {\r
-              MetaphAdd(primary, 'J');\r
-            }\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (in.charAt(current + 1) == 'G')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'K');\r
-          break;\r
-        case 'H':\r
-          if (((current == 0) || isVowel(in, current - 1, length)) && isVowel(in, current + 1, length)) {\r
-            MetaphAdd(primary, 'H');\r
-            current += 2;\r
-          } else {\r
-            current += 1;\r
-          }\r
-          break;\r
-        case 'J':\r
-          if (stringAt(in, current, 4, list50) || stringAt(in, 0, 4, list51)) {\r
-            if ((current == 0) && (in.charAt(current + 4) == ' ') || stringAt(in, 0, 4, list52)) {\r
-              MetaphAdd(primary, 'H');\r
-            } else {\r
-              MetaphAdd(primary, 'J');\r
-            }\r
-            current += 1;\r
-            break;\r
-          }\r
-          if ((current == 0) && !stringAt(in, current, 4, list53)) {\r
-            MetaphAdd(primary, 'J');\r
-          } else {\r
-            if (isVowel(in, current - 1, length) && !isSlavoGermaic && ((in.charAt(current + 1) == 'A') || in.charAt(current + 1) == 'O')) {\r
-              MetaphAdd(primary, 'J');\r
-            } else {\r
-              if (current == last) {\r
-                MetaphAdd(primary, 'J');\r
-              } else {\r
-                if (!stringAt(in, current + 1, 1, list54) && !stringAt(in, current - 1, 1, list55)) {\r
-                  MetaphAdd(primary, 'J');\r
-                }\r
-              }\r
-            }\r
-          }\r
-          if (in.charAt(current + 1) == 'J')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          break;\r
-        case 'K':\r
-          if (in.charAt(current + 1) == 'K')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'K');\r
-          break;\r
-        case 'L':\r
-          if (in.charAt(current + 1) == 'L') {\r
-            if (((current == (length - 3)) && stringAt(in, current - 1, 4, list56)) || ((stringAt(in, last - 1, 2, list57) || stringAt(in, last, 1, list58)) && stringAt(in, current - 1, 4, list59))) {\r
-              MetaphAdd(primary, 'L');\r
-              current += 2;\r
-              break;\r
-            }\r
-            current += 2;\r
-          } else\r
-            current += 1;\r
-          MetaphAdd(primary, 'L');\r
-          break;\r
-        case 'M':\r
-          if ((stringAt(in, current - 1, 3, list60) && (((current + 1) == last) || stringAt(in, current + 2, 2, list61))) || (in.charAt(current + 1) == 'M'))\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'M');\r
-          break;\r
-        case 'N':\r
-          if (in.charAt(current + 1) == 'N')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'N');\r
-          break;\r
-        case '\u00D1':\r
-          current += 1;\r
-          MetaphAdd(primary, 'N');\r
-          break;\r
-        case 'P':\r
-          if (in.charAt(current + 1) == 'N') {\r
-            MetaphAdd(primary, 'F');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current + 1, 1, list62))\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'P');\r
-          break;\r
-        case 'Q':\r
-          if (in.charAt(current + 1) == 'Q')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'K');\r
-          break;\r
-        case 'R':\r
-          if ((current == last) && !isSlavoGermaic && stringAt(in, current - 2, 2, list63) && !stringAt(in, current - 4, 2, list64)) {\r
-//            MetaphAdd(primary, "");\r
-          } else\r
-            MetaphAdd(primary, 'R');\r
-          if (in.charAt(current + 1) == 'R')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          break;\r
-        case 'S':\r
-          if (stringAt(in, current - 1, 3, list65)) {\r
-            current += 1;\r
-            break;\r
-          }\r
-          if ((current == 0) && stringAt(in, current, 5, list66)) {\r
-            MetaphAdd(primary, 'X');\r
-            current += 1;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 2, list67)) {\r
-            if (stringAt(in, current + 1, 4, list68))\r
-              MetaphAdd(primary, 'S');\r
-            else\r
-              MetaphAdd(primary, 'X');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 3, list69) || stringAt(in, current, 4, list70)) {\r
-            MetaphAdd(primary, 'S');\r
-            current += 3;\r
-            break;\r
-          }\r
-          if (((current == 0) && stringAt(in, current + 1, 1, list71)) || stringAt(in, current + 1, 1, list72)) {\r
-            MetaphAdd(primary, 'S');\r
-            if (stringAt(in, current + 1, 1, list73))\r
-              current += 2;\r
-            else\r
-              current += 1;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 2, list74)) {\r
-            if (in.charAt(current + 2) == 'H')\r
-              if (stringAt(in, current + 3, 2, list75)) {\r
-                if (stringAt(in, current + 3, 2, list76)) {\r
-                  MetaphAdd(primary, "X");\r
-                } else {\r
-                  MetaphAdd(primary, "SK");\r
-                }\r
-                current += 3;\r
-                break;\r
-              } else {\r
-                MetaphAdd(primary, 'X');\r
-                current += 3;\r
-                break;\r
-              }\r
-            if (stringAt(in, current + 2, 1, list77)) {\r
-              MetaphAdd(primary, 'S');\r
-              current += 3;\r
-              break;\r
-            }\r
-            MetaphAdd(primary, "SK");\r
-            current += 3;\r
-            break;\r
-          }\r
-          if ((current == last) && stringAt(in, current - 2, 2, list78)) {\r
-            //MetaphAdd(primary, "");\r
-          } else\r
-            MetaphAdd(primary, 'S');\r
-          if (stringAt(in, current + 1, 1, list79))\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          break;\r
-        case 'T':\r
-          if (stringAt(in, current, 4, list80)) {\r
-            MetaphAdd(primary, 'X');\r
-            current += 3;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 3, list81)) {\r
-            MetaphAdd(primary, 'X');\r
-            current += 3;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 2, list82) || stringAt(in, current, 3, list83)) {\r
-            if (stringAt(in, (current + 2), 2, list84) || stringAt(in, 0, 4, list85) || stringAt(in, 0, 3, list86)) {\r
-              MetaphAdd(primary, 'T');\r
-            } else {\r
-              MetaphAdd(primary, '0');\r
-            }\r
-            current += 2;\r
-            break;\r
-          }\r
-          if (stringAt(in, current + 1, 1, list87)) {\r
-            current += 2;\r
-          } else\r
-            current += 1;\r
-          MetaphAdd(primary, 'T');\r
-          break;\r
-        case 'V':\r
-          if (in.charAt(current + 1) == 'V')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          MetaphAdd(primary, 'F');\r
-          break;\r
-        case 'W':\r
-          if (stringAt(in, current, 2, list88)) {\r
-            MetaphAdd(primary, 'R');\r
-            current += 2;\r
-            break;\r
-          }\r
-          if ((current == 0) && (isVowel(in, current + 1, length) || stringAt(in, current, 2, list89))) {\r
-            MetaphAdd(primary, 'A');\r
-          }\r
-          if (((current == last) && isVowel(in, current - 1, length)) || stringAt(in, current - 1, 5, list90) || stringAt(in, 0, 3, list91)) {\r
-            MetaphAdd(primary, 'F');\r
-            current += 1;\r
-            break;\r
-          }\r
-          if (stringAt(in, current, 4, list92)) {\r
-            MetaphAdd(primary, "TS");\r
-            current += 4;\r
-            break;\r
-          }\r
-          current += 1;\r
-          break;\r
-        case 'X':\r
-          if (!((current == last) && (stringAt(in, current - 3, 3, list93) || stringAt(in, current - 2, 2, list94))))\r
-            MetaphAdd(primary, "KS");\r
-          if (stringAt(in, current + 1, 1, list95))\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          break;\r
-        case 'Z':\r
-          if (in.charAt(current + 1) == 'H') {\r
-            MetaphAdd(primary, 'J');\r
-            current += 2;\r
-            break;\r
-          } else {\r
-            MetaphAdd(primary, 'S');\r
-          }\r
-          if (in.charAt(current + 1) == 'Z')\r
-            current += 2;\r
-          else\r
-            current += 1;\r
-          break;\r
-        default:\r
-          current += 1;\r
-      }\r
-    }\r
-    return primary.toString();\r
-  }\r
-\r
-  /**\r
-   * @see com.swabunga.spell.engine.Transformator#getReplaceList()\r
-   */\r
-  public char[] getReplaceList() {\r
-    return replaceList;\r
-  }\r
-}\r
-\r
-\r
-\r