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