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