• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
9 const char UnaccentTransliterator::fgClassID = 0;
10 
11 /**
12  * Constructor
13  */
UnaccentTransliterator()14 UnaccentTransliterator::UnaccentTransliterator() :
15     normalizer("", UNORM_NFD),
16     Transliterator("Unaccent", 0) {
17 }
18 
19 /**
20  * Destructor
21  */
~UnaccentTransliterator()22 UnaccentTransliterator::~UnaccentTransliterator() {
23 }
24 
25 /**
26  * Remove accents from a character using Normalizer.
27  */
unaccent(UChar c) const28 UChar 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  */
handleTransliterate(Replaceable & text,UTransPosition & index,UBool incremental) const43 void 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