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
10class 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
42public:
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
82private:
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