Home | History | Annotate | Download | only in translit
      1 /***********************************************************************
      2  *  2016 and later: Unicode, Inc. and others.
      3  * License & terms of use: http://www.unicode.org/copyright.html#License
      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      */
     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      */
     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