You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.9 KiB
96 lines
2.9 KiB
/***********************************************************************
|
|
* © 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 "unicode/translit.h"
|
|
#include "unicode/normlzr.h"
|
|
|
|
using namespace icu;
|
|
|
|
class UnaccentTransliterator : public Transliterator {
|
|
|
|
public:
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
UnaccentTransliterator();
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
virtual ~UnaccentTransliterator();
|
|
|
|
protected:
|
|
|
|
/**
|
|
* Implement Transliterator API
|
|
*/
|
|
virtual void handleTransliterate(Replaceable& text,
|
|
UTransPosition& index,
|
|
UBool incremental) const;
|
|
|
|
private:
|
|
|
|
/**
|
|
* Unaccent a single character using normalizer.
|
|
*/
|
|
UChar unaccent(UChar c) const;
|
|
|
|
Normalizer normalizer;
|
|
|
|
public:
|
|
|
|
/**
|
|
* Return the class ID for this class. This is useful only for
|
|
* comparing to a return value from getDynamicClassID(). For example:
|
|
* <pre>
|
|
* . Base* polymorphic_pointer = createPolymorphicObject();
|
|
* . if (polymorphic_pointer->getDynamicClassID() ==
|
|
* . Derived::getStaticClassID()) ...
|
|
* </pre>
|
|
* @return The class ID for all objects of this class.
|
|
* @stable ICU 2.0
|
|
*/
|
|
static inline UClassID getStaticClassID(void) { return (UClassID)&fgClassID; };
|
|
|
|
/**
|
|
* Returns a unique class ID <b>polymorphically</b>. This method
|
|
* is to implement a simple version of RTTI, since not all C++
|
|
* compilers support genuine RTTI. Polymorphic operator==() and
|
|
* clone() methods call this method.
|
|
*
|
|
* <p>Concrete subclasses of Transliterator that wish clients to
|
|
* be able to identify them should implement getDynamicClassID()
|
|
* and also a static method and data member:
|
|
*
|
|
* <pre>
|
|
* static UClassID getStaticClassID() { return (UClassID)&fgClassID; }
|
|
* static char fgClassID;
|
|
* </pre>
|
|
*
|
|
* Subclasses that do not implement this method will have a
|
|
* dynamic class ID of Transliterator::getStatisClassID().
|
|
*
|
|
* @return The class ID for this object. All objects of a given
|
|
* class have the same class ID. Objects of other classes have
|
|
* different class IDs.
|
|
* @stable ICU 2.0
|
|
*/
|
|
virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); };
|
|
|
|
private:
|
|
|
|
/**
|
|
* Class identifier for subclasses of Transliterator that do not
|
|
* define their class (anonymous subclasses).
|
|
*/
|
|
static const char fgClassID;
|
|
};
|