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