1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru **********************************************************************
3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *   Copyright (c) 2001-2007, International Business Machines
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *   Corporation and others.  All Rights Reserved.
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru **********************************************************************
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *   Date        Name        Description
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *   11/20/2001  aliu        Creation.
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru **********************************************************************
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef UNESCTRN_H
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define UNESCTRN_H
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h"
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_TRANSLITERATION
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/translit.h"
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * A transliterator that converts Unicode escape forms to the
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * characters they represent.  Escape forms have a prefix, a suffix, a
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * radix, and minimum and maximum digit counts.
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <p>This class is package private.  It registers several standard
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * variants with the system which are then accessed via their IDs.
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @author Alan Liu
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass UnescapeTransliterator : public Transliterator {
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private:
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * The encoded pattern specification.  The pattern consists of
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * zero or more forms.  Each form consists of a prefix, suffix,
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * radix, minimum digit count, and maximum digit count.  These
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * values are stored as a five character header.  That is, their
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * numeric values are cast to 16-bit characters and stored in the
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * string.  Following these five characters, the prefix
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * characters, then suffix characters are stored.  Each form thus
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * takes n+5 characters, where n is the total length of the prefix
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * and suffix.  The end is marked by a header of length one
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * consisting of the character END.
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar* spec; // owned; may not be NULL
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public:
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Registers standard variants with the system.  Called by
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Transliterator during initialization.
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static void registerIDs();
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Constructor.  Takes the encoded spec array (does not adopt it).
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param ID   the string identifier for this transliterator
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param spec the encoded spec array
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnescapeTransliterator(const UnicodeString& ID,
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           const UChar *spec);
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Copy constructor.
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnescapeTransliterator(const UnescapeTransliterator&);
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Destructor.
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~UnescapeTransliterator();
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Transliterator API.
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual Transliterator* clone() const;
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for the actual class.
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual UClassID getDynamicClassID() const;
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for this class.
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru protected:
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Implements {@link Transliterator#handleTransliterate}.
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param text        the buffer holding transliterated and
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *                    untransliterated text
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param offset      the start and limit of the text, the position
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *                    of the cursor, and the start and limit of transliteration.
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param incremental if true, assume more text may be coming after
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *                    pos.contextLimit.  Otherwise, assume the text is complete.
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                             UBool isIncremental) const;
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_TRANSLITERATION */
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif
111