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
20U_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 */
27class NameUnicodeTransliterator : public Transliterator {
28public:
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;
80private:
81    /**
82     * Assignment operator.
83     */
84    NameUnicodeTransliterator& operator=(const NameUnicodeTransliterator&);
85};
86
87U_NAMESPACE_END
88
89#endif /* #if !UCONFIG_NO_TRANSLITERATION */
90
91#endif
92