Index: src/java/org/apache/lucene/analysis/ISOLatin1AccentFilter.java =================================================================== --- src/java/org/apache/lucene/analysis/ISOLatin1AccentFilter.java (revision 559183) +++ src/java/org/apache/lucene/analysis/ISOLatin1AccentFilter.java (working copy) @@ -39,130 +39,171 @@ /** * To replace accented characters in a String by unaccented equivalents. */ - public final static String removeAccents(String input) { - final StringBuffer output = new StringBuffer(); - for (int i = 0; i < input.length(); i++) { - switch (input.charAt(i)) { - case '\u00C0' : // À - case '\u00C1' : // Á - case '\u00C2' : //  - case '\u00C3' : // à - case '\u00C4' : // Ä - case '\u00C5' : // Å - output.append("A"); - break; - case '\u00C6' : // Æ - output.append("AE"); - break; - case '\u00C7' : // Ç - output.append("C"); - break; - case '\u00C8' : // È - case '\u00C9' : // É - case '\u00CA' : // Ê - case '\u00CB' : // Ë - output.append("E"); - break; - case '\u00CC' : // Ì - case '\u00CD' : // Í - case '\u00CE' : // Î - case '\u00CF' : // Ï - output.append("I"); - break; - case '\u00D0' : // Ð - output.append("D"); - break; - case '\u00D1' : // Ñ - output.append("N"); - break; - case '\u00D2' : // Ò - case '\u00D3' : // Ó - case '\u00D4' : // Ô - case '\u00D5' : // Õ - case '\u00D6' : // Ö - case '\u00D8' : // Ø - output.append("O"); - break; - case '\u0152' : // Œ - output.append("OE"); - break; - case '\u00DE' : // Þ - output.append("TH"); - break; - case '\u00D9' : // Ù - case '\u00DA' : // Ú - case '\u00DB' : // Û - case '\u00DC' : // Ü - output.append("U"); - break; - case '\u00DD' : // Ý - case '\u0178' : // Ÿ - output.append("Y"); - break; - case '\u00E0' : // à - case '\u00E1' : // á - case '\u00E2' : // â - case '\u00E3' : // ã - case '\u00E4' : // ä - case '\u00E5' : // å - output.append("a"); - break; - case '\u00E6' : // æ - output.append("ae"); - break; - case '\u00E7' : // ç - output.append("c"); - break; - case '\u00E8' : // è - case '\u00E9' : // é - case '\u00EA' : // ê - case '\u00EB' : // ë - output.append("e"); - break; - case '\u00EC' : // ì - case '\u00ED' : // í - case '\u00EE' : // î - case '\u00EF' : // ï - output.append("i"); - break; - case '\u00F0' : // ð - output.append("d"); - break; - case '\u00F1' : // ñ - output.append("n"); - break; - case '\u00F2' : // ò - case '\u00F3' : // ó - case '\u00F4' : // ô - case '\u00F5' : // õ - case '\u00F6' : // ö - case '\u00F8' : // ø - output.append("o"); - break; - case '\u0153' : // œ - output.append("oe"); - break; - case '\u00DF' : // ß - output.append("ss"); - break; - case '\u00FE' : // þ - output.append("th"); - break; - case '\u00F9' : // ù - case '\u00FA' : // ú - case '\u00FB' : // û - case '\u00FC' : // ü - output.append("u"); - break; - case '\u00FD' : // ý - case '\u00FF' : // ÿ - output.append("y"); - break; - default : - output.append(input.charAt(i)); - break; + public final static String removeAccents(final String input) { + class Charlist { + char[] list; + int index = 0; + + public Charlist(int size) { + list = new char[size]; } - } - return output.toString(); + + public void add(char c) { + if (index > (list.length - 1)) { + char[] newlist = new char[ list.length + input.length()]; + System.arraycopy(list, 0, newlist, 0, list.length); + list = newlist; + } + + list[index] = c; + index++; + } + + public String toString() { + String cleanInput; + if(index < list.length) { + char[] chars = new char[index]; + System.arraycopy(list, 0, chars, 0, index); + cleanInput = new String(chars); + } else { + cleanInput = new String(list); + } + return cleanInput; + } + } + + Charlist charList = new Charlist(input.length()); + + for (int i = 0; i < input.length(); i++) { + switch (input.charAt(i)) { + case '\u00C0': // À + case '\u00C1': // Ã� + case '\u00C2': //  + case '\u00C3': // à + case '\u00C4': // Ä + case '\u00C5': // Ã… + charList.add('A'); + break; + case '\u00C6': // Æ + charList.add('A'); + charList.add('E'); + break; + case '\u00C7': // Ç + charList.add('C'); + break; + case '\u00C8': // È + case '\u00C9': // É + case '\u00CA': // Ê + case '\u00CB': // Ë + charList.add('E'); + break; + case '\u00CC': // ÃŒ + case '\u00CD': // Ã� + case '\u00CE': // ÃŽ + case '\u00CF': // Ã� + charList.add('I'); + break; + case '\u00D0': // Ã� + charList.add('D'); + break; + case '\u00D1': // Ã' + charList.add('N'); + break; + case '\u00D2': // Ã' + case '\u00D3': // Ã" + case '\u00D4': // Ã" + case '\u00D5': // Õ + case '\u00D6': // Ö + case '\u00D8': // Ø + charList.add('O'); + break; + case '\u0152': // Å' + charList.add('O'); + charList.add('E'); + break; + case '\u00DE': // Þ + charList.add('T'); + charList.add('H'); + break; + case '\u00D9': // Ù + case '\u00DA': // Ú + case '\u00DB': // Û + case '\u00DC': // Ü + charList.add('U'); + break; + case '\u00DD': // Ã� + case '\u0178': // Ÿ + charList.add('Y'); + break; + case '\u00E0': // à + case '\u00E1': // á + case '\u00E2': // â + case '\u00E3': // ã + case '\u00E4': // ä + case '\u00E5': // Ã¥ + charList.add('a'); + break; + case '\u00E6': // æ + charList.add('a'); + charList.add('e'); + break; + case '\u00E7': // ç + charList.add('c'); + break; + case '\u00E8': // è + case '\u00E9': // é + case '\u00EA': // ê + case '\u00EB': // ë + charList.add('e'); + break; + case '\u00EC': // ì + case '\u00ED': // í + case '\u00EE': // î + case '\u00EF': // ï + charList.add('i'); + break; + case '\u00F0': // ð + charList.add('d'); + break; + case '\u00F1': // ñ + charList.add('n'); + break; + case '\u00F2': // ò + case '\u00F3': // ó + case '\u00F4': // ô + case '\u00F5': // õ + case '\u00F6': // ö + case '\u00F8': // ø + charList.add('o'); + break; + case '\u0153': // Å" + charList.add('o'); + charList.add('e'); + break; + case '\u00DF': // ß + charList.add('s'); + charList.add ('s'); + break; + case '\u00FE': // þ + charList.add('t'); + charList.add('h'); + break; + case '\u00F9': // ù + case '\u00FA': // ú + case '\u00FB': // û + case '\u00FC': // ü + charList.add('u'); + break; + case '\u00FD': // ý + case '\u00FF': // ÿ + charList.add('y'); + break; + default: + charList.add(input.charAt(i)); + break; + } + } + + return charList.toString(); } } \ No newline at end of file