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