mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-10 15:42:14 +00:00
https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/google/readability-casting.html
60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
/**********************************************************************
|
|
* © 2016 and later: Unicode, Inc. and others.
|
|
* License & terms of use: http://www.unicode.org/copyright.html
|
|
**********************************************************************
|
|
**********************************************************************
|
|
* COPYRIGHT:
|
|
* Copyright (c) 1999-2003, International Business Machines Corporation and
|
|
* others. All Rights Reserved.
|
|
**********************************************************************/
|
|
|
|
#include "unaccent.h"
|
|
|
|
const char UnaccentTransliterator::fgClassID = 0;
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
UnaccentTransliterator::UnaccentTransliterator() :
|
|
normalizer("", UNORM_NFD),
|
|
Transliterator("Unaccent", nullptr) {
|
|
}
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
UnaccentTransliterator::~UnaccentTransliterator() {
|
|
}
|
|
|
|
/**
|
|
* Remove accents from a character using Normalizer.
|
|
*/
|
|
char16_t UnaccentTransliterator::unaccent(char16_t c) const {
|
|
UnicodeString str(c);
|
|
UErrorCode status = U_ZERO_ERROR;
|
|
UnaccentTransliterator* t = const_cast<UnaccentTransliterator*>(this);
|
|
|
|
t->normalizer.setText(str, status);
|
|
if (U_FAILURE(status)) {
|
|
return c;
|
|
}
|
|
return static_cast<char16_t>(t->normalizer.next());
|
|
}
|
|
|
|
/**
|
|
* Implement Transliterator API
|
|
*/
|
|
void UnaccentTransliterator::handleTransliterate(Replaceable& text,
|
|
UTransPosition& index,
|
|
UBool incremental) const {
|
|
UnicodeString str("a");
|
|
while (index.start < index.limit) {
|
|
char16_t c = text.charAt(index.start);
|
|
char16_t d = unaccent(c);
|
|
if (c != d) {
|
|
str.setCharAt(0, d);
|
|
text.handleReplaceBetween(index.start, index.start+1, str);
|
|
}
|
|
index.start++;
|
|
}
|
|
}
|