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 */
12UnaccentTransliterator::UnaccentTransliterator() :
13    normalizer("", Normalizer::DECOMP),
14    Transliterator("Unaccent", 0) {
15}
16
17/**
18 * Destructor
19 */
20UnaccentTransliterator::~UnaccentTransliterator() {
21}
22
23/**
24 * Remove accents from a character using Normalizer.
25 */
26UChar 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 */
41void 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