1 /*
2 **********************************************************************
3 *   Copyright (C) 2001-2007, International Business Machines
4 *   Corporation and others.  All Rights Reserved.
5 **********************************************************************
6 *   Date        Name        Description
7 *   06/07/01    aliu        Creation.
8 **********************************************************************
9 */
10 #ifndef NAME2UNI_H
11 #define NAME2UNI_H
12 
13 #include "unicode/utypes.h"
14 
15 #if !UCONFIG_NO_TRANSLITERATION
16 
17 #include "unicode/translit.h"
18 #include "unicode/uniset.h"
19 
20 U_NAMESPACE_BEGIN
21 
22 /**
23  * A transliterator that performs name to character mapping.
24  * It recognizes the Perl syntax \N{name}.
25  * @author Alan Liu
26  */
27 class NameUnicodeTransliterator : public Transliterator {
28 public:
29 
30     /**
31      * Constructs a transliterator.
32      * @param adoptedFilter    the filter for this transliterator.
33      */
34     NameUnicodeTransliterator(UnicodeFilter* adoptedFilter = 0);
35 
36     /**
37      * Destructor.
38      */
39     virtual ~NameUnicodeTransliterator();
40 
41     /**
42      * Copy constructor.
43      */
44     NameUnicodeTransliterator(const NameUnicodeTransliterator&);
45 
46     /**
47      * Transliterator API.
48      * @return    A copy of the object.
49      */
50     virtual Transliterator* clone(void) const;
51 
52     /**
53      * ICU "poor man's RTTI", returns a UClassID for the actual class.
54      */
55     virtual UClassID getDynamicClassID() const;
56 
57     /**
58      * ICU "poor man's RTTI", returns a UClassID for this class.
59      */
60     U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
61 
62  protected:
63 
64     /**
65      * Implements {@link Transliterator#handleTransliterate}.
66      * @param text          the buffer holding transliterated and
67      *                      untransliterated text
68      * @param offset        the start and limit of the text, the position
69      *                      of the cursor, and the start and limit of transliteration.
70      * @param incremental   if true, assume more text may be coming after
71      *                      pos.contextLimit. Otherwise, assume the text is complete.
72      */
73     virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
74                                      UBool isIncremental) const;
75 
76     /**
77      * Set of characters which occur in Unicode character names.
78      */
79     UnicodeSet legal;
80 private:
81     /**
82      * Assignment operator.
83      */
84     NameUnicodeTransliterator& operator=(const NameUnicodeTransliterator&);
85 };
86 
87 U_NAMESPACE_END
88 
89 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
90 
91 #endif
92