1 /*********************************************************************** 2 * © 2016 and later: Unicode, Inc. and others. 3 * License & terms of use: http://www.unicode.org/copyright.html 4 *********************************************************************** 5 *********************************************************************** 6 * COPYRIGHT: 7 * Copyright (c) 1999-2003, International Business Machines Corporation and 8 * others. All Rights Reserved. 9 ***********************************************************************/ 10 11 #include "unicode/translit.h" 12 #include "unicode/normlzr.h" 13 14 using namespace icu; 15 16 class UnaccentTransliterator : public Transliterator { 17 18 public: 19 20 /** 21 * Constructor 22 */ 23 UnaccentTransliterator(); 24 25 /** 26 * Destructor 27 */ 28 virtual ~UnaccentTransliterator(); 29 30 protected: 31 32 /** 33 * Implement Transliterator API 34 */ 35 virtual void handleTransliterate(Replaceable& text, 36 UTransPosition& index, 37 UBool incremental) const; 38 39 private: 40 41 /** 42 * Unaccent a single character using normalizer. 43 */ 44 UChar unaccent(UChar c) const; 45 46 Normalizer normalizer; 47 48 public: 49 50 /** 51 * Return the class ID for this class. This is useful only for 52 * comparing to a return value from getDynamicClassID(). For example: 53 * <pre> 54 * . Base* polymorphic_pointer = createPolymorphicObject(); 55 * . if (polymorphic_pointer->getDynamicClassID() == 56 * . Derived::getStaticClassID()) ... 57 * </pre> 58 * @return The class ID for all objects of this class. 59 * @stable ICU 2.0 60 */ getStaticClassID(void)61 static inline UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }; 62 63 /** 64 * Returns a unique class ID <b>polymorphically</b>. This method 65 * is to implement a simple version of RTTI, since not all C++ 66 * compilers support genuine RTTI. Polymorphic operator==() and 67 * clone() methods call this method. 68 * 69 * <p>Concrete subclasses of Transliterator that wish clients to 70 * be able to identify them should implement getDynamicClassID() 71 * and also a static method and data member: 72 * 73 * <pre> 74 * static UClassID getStaticClassID() { return (UClassID)&fgClassID; } 75 * static char fgClassID; 76 * </pre> 77 * 78 * Subclasses that do not implement this method will have a 79 * dynamic class ID of Transliterator::getStatisClassID(). 80 * 81 * @return The class ID for this object. All objects of a given 82 * class have the same class ID. Objects of other classes have 83 * different class IDs. 84 * @stable ICU 2.0 85 */ getDynamicClassID(void)86 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }; 87 88 private: 89 90 /** 91 * Class identifier for subclasses of Transliterator that do not 92 * define their class (anonymous subclasses). 93 */ 94 static const char fgClassID; 95 }; 96