1 /******************************************************************** 2 * COPYRIGHT: 3 * Copyright (c) 1999-2002, International Business Machines Corporation and 4 * others. All Rights Reserved. 5 ********************************************************************/ 6 7 #include "unaccent.h" 8 9 /** 10 * Constructor 11 */ 12 UnaccentTransliterator::UnaccentTransliterator() : 13 normalizer("", Normalizer::DECOMP), 14 Transliterator("Unaccent", 0) { 15 } 16 17 /** 18 * Destructor 19 */ 20 UnaccentTransliterator::~UnaccentTransliterator() { 21 } 22 23 /** 24 * Remove accents from a character using Normalizer. 25 */ 26 UChar UnaccentTransliterator::unaccent(UChar c) const { 27 UnicodeString str(c); 28 UErrorCode status = U_ZERO_ERROR; 29 UnaccentTransliterator* t = (UnaccentTransliterator*)this; 30 31 t->normalizer.setText(str, status); 32 if (U_FAILURE(status)) { 33 return c; 34 } 35 return (UChar) t->normalizer.next(); 36 } 37 38 /** 39 * Implement Transliterator API 40 */ 41 void UnaccentTransliterator::handleTransliterate(Replaceable& text, 42 UTransPosition& index, 43 UBool incremental) const { 44 UnicodeString str("a"); 45 while (index.start < index.limit) { 46 UChar c = text.charAt(index.start); 47 UChar d = unaccent(c); 48 if (c != d) { 49 str.setCharAt(0, d); 50 text.handleReplaceBetween(index.start, index.start+1, str); 51 } 52 index.start++; 53 } 54 } 55