1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*   Copyright (C) 1999-2011, 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/17/99    aliu        Creation.
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef CPDTRANS_H
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CPDTRANS_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 Queruclass U_COMMON_API UVector;
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TransliteratorRegistry;
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * A transliterator that is composed of two or more other
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * transliterator objects linked together.  For example, if one
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * transliterator transliterates from script A to script B, and
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * another transliterates from script B to script C, the two may be
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * combined to form a new transliterator from A to C.
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <p>Composed transliterators may not behave as expected.  For
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * example, inverses may not combine to form the identity
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * transliterator.  See the class documentation for {@link
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Transliterator} for details.
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @author Alan Liu
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass U_I18N_API CompoundTransliterator : public Transliterator {
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Transliterator** trans;
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t count;
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t numAnonymousRBTs;
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Constructs a new compound transliterator given an array of
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * transliterators.  The array of transliterators may be of any
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * length, including zero or one, however, useful compound
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * transliterators have at least two components.
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param transliterators array of <code>Transliterator</code>
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * objects
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param transliteratorCount The number of
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * <code>Transliterator</code> objects in transliterators.
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param adoptedFilter the filter.  Any character for which
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * altered by this transliterator.  If <tt>filter</tt> is
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * <tt>null</tt> then no filtering is applied.
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator(Transliterator* const transliterators[],
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           int32_t transliteratorCount,
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UnicodeFilter* adoptedFilter = 0);
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Constructs a new compound transliterator.
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param id compound ID
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param dir either UTRANS_FORWARD or UTRANS_REVERSE
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param adoptedFilter a global filter for this compound transliterator
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * or NULL
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator(const UnicodeString& id,
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UTransDirection dir,
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UnicodeFilter* adoptedFilter,
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UParseError& parseError,
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UErrorCode& status);
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Constructs a new compound transliterator in the FORWARD
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * direction with a NULL filter.
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator(const UnicodeString& id,
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UParseError& parseError,
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UErrorCode& status);
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Destructor.
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~CompoundTransliterator();
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Copy constructor.
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator(const CompoundTransliterator&);
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Transliterator API.
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual Transliterator* clone(void) const;
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns the number of transliterators in this chain.
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return number of transliterators in this chain.
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual int32_t getCount(void) const;
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns the transliterator at the given index in this chain.
10985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho     * @param idx index into chain, from 0 to <code>getCount() - 1</code>
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return transliterator at the given index
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
11285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    virtual const Transliterator& getTransliterator(int32_t idx) const;
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Sets the transliterators.
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void setTransliterators(Transliterator* const transliterators[],
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            int32_t count);
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Adopts the transliterators.
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void adoptTransliterators(Transliterator* adoptedTransliterators[],
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                              int32_t count);
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Override Transliterator:
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Create a rule string that can be passed to createFromRules()
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * to recreate this transliterator.
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param result the string to receive the rules.  Previous
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * contents will be deleted.
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param escapeUnprintable if TRUE then convert unprintable
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * character to their hex escape representations, \uxxxx or
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * \Uxxxxxxxx.  Unprintable characters are those other than
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * U+000A, U+0020..U+007E.
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual UnicodeString& toRules(UnicodeString& result,
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                                   UBool escapeUnprintable) const;
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru protected:
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Implement Transliterator framework
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual void handleGetSourceSet(UnicodeSet& result) const;
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public:
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Override Transliterator framework
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprotected:
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Implements {@link Transliterator#handleTransliterate}.
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
15685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    virtual void handleTransliterate(Replaceable& text, UTransPosition& idx,
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                                     UBool incremental) const;
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for the actual class.
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual UClassID getDynamicClassID() const;
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ICU "poor man's RTTI", returns a UClassID for this class.
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static UClassID U_EXPORT2 getStaticClassID();
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* @internal */
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static const UChar PASS_STRING[];
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    friend class Transliterator;
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    friend class TransliteratorAlias; // to access private ct
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Assignment operator.
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator& operator=(const CompoundTransliterator&);
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Private constructor for Transliterator.
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator(const UnicodeString& ID,
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UVector& list,
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UnicodeFilter* adoptedFilter,
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           int32_t numAnonymousRBTs,
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UParseError& parseError,
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UErrorCode& status);
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator(UVector& list,
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UParseError& parseError,
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UErrorCode& status);
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    CompoundTransliterator(UVector& list,
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           int32_t anonymousRBTs,
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UParseError& parseError,
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                           UErrorCode& status);
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void init(const UnicodeString& id,
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              UTransDirection direction,
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              UBool fixReverseID,
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              UErrorCode& status);
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void init(UVector& list,
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              UTransDirection direction,
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              UBool fixReverseID,
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              UErrorCode& status);
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Return the IDs of the given list of transliterators, concatenated
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * with ';' delimiting them.  Equivalent to the perlish expression
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * join(';', map($_.getID(), transliterators).
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString joinIDs(Transliterator* const transliterators[],
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                          int32_t transCount);
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void freeTransliterators(void);
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void computeMaximumContextLength(void);
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_TRANSLITERATION */
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif
231