16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 1999-2011, International Business Machines
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Date        Name        Description
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   11/17/99    aliu        Creation.
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef CPDTRANS_H
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CPDTRANS_H
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_TRANSLITERATION
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/translit.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_COMMON_API UVector;
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass TransliteratorRegistry;
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A transliterator that is composed of two or more other
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * transliterator objects linked together.  For example, if one
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * transliterator transliterates from script A to script B, and
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * another transliterates from script B to script C, the two may be
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * combined to form a new transliterator from A to C.
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Composed transliterators may not behave as expected.  For
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * example, inverses may not combine to form the identity
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * transliterator.  See the class documentation for {@link
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Transliterator} for details.
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @author Alan Liu
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_I18N_API CompoundTransliterator : public Transliterator {
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Transliterator** trans;
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t count;
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t numAnonymousRBTs;
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constructs a new compound transliterator given an array of
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * transliterators.  The array of transliterators may be of any
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * length, including zero or one, however, useful compound
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * transliterators have at least two components.
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param transliterators array of <code>Transliterator</code>
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * objects
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param transliteratorCount The number of
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <code>Transliterator</code> objects in transliterators.
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param adoptedFilter the filter.  Any character for which
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * altered by this transliterator.  If <tt>filter</tt> is
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <tt>null</tt> then no filtering is applied.
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator(Transliterator* const transliterators[],
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           int32_t transliteratorCount,
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UnicodeFilter* adoptedFilter = 0);
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constructs a new compound transliterator.
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param id compound ID
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param dir either UTRANS_FORWARD or UTRANS_REVERSE
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param adoptedFilter a global filter for this compound transliterator
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * or NULL
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator(const UnicodeString& id,
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UTransDirection dir,
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UnicodeFilter* adoptedFilter,
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UParseError& parseError,
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UErrorCode& status);
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constructs a new compound transliterator in the FORWARD
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * direction with a NULL filter.
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator(const UnicodeString& id,
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UParseError& parseError,
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UErrorCode& status);
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Destructor.
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~CompoundTransliterator();
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Copy constructor.
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator(const CompoundTransliterator&);
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Transliterator API.
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual Transliterator* clone(void) const;
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the number of transliterators in this chain.
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return number of transliterators in this chain.
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t getCount(void) const;
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the transliterator at the given index in this chain.
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param idx index into chain, from 0 to <code>getCount() - 1</code>
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return transliterator at the given index
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual const Transliterator& getTransliterator(int32_t idx) const;
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Sets the transliterators.
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setTransliterators(Transliterator* const transliterators[],
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            int32_t count);
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Adopts the transliterators.
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void adoptTransliterators(Transliterator* adoptedTransliterators[],
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                              int32_t count);
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Override Transliterator:
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create a rule string that can be passed to createFromRules()
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * to recreate this transliterator.
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param result the string to receive the rules.  Previous
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * contents will be deleted.
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param escapeUnprintable if TRUE then convert unprintable
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * character to their hex escape representations, \uxxxx or
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * \Uxxxxxxxx.  Unprintable characters are those other than
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * U+000A, U+0020..U+007E.
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UnicodeString& toRules(UnicodeString& result,
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                   UBool escapeUnprintable) const;
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected:
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Implement Transliterator framework
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void handleGetSourceSet(UnicodeSet& result) const;
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public:
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Override Transliterator framework
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected:
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Implements {@link Transliterator#handleTransliterate}.
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void handleTransliterate(Replaceable& text, UTransPosition& idx,
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                     UBool incremental) const;
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * ICU "poor man's RTTI", returns a UClassID for the actual class.
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UClassID getDynamicClassID() const;
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * ICU "poor man's RTTI", returns a UClassID for this class.
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UClassID U_EXPORT2 getStaticClassID();
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* @internal */
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const UChar PASS_STRING[];
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    friend class Transliterator;
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    friend class TransliteratorAlias; // to access private ct
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Assignment operator.
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator& operator=(const CompoundTransliterator&);
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Private constructor for Transliterator.
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator(const UnicodeString& ID,
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UVector& list,
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UnicodeFilter* adoptedFilter,
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           int32_t numAnonymousRBTs,
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UParseError& parseError,
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UErrorCode& status);
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator(UVector& list,
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UParseError& parseError,
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UErrorCode& status);
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CompoundTransliterator(UVector& list,
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           int32_t anonymousRBTs,
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UParseError& parseError,
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UErrorCode& status);
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void init(const UnicodeString& id,
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              UTransDirection direction,
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              UBool fixReverseID,
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              UErrorCode& status);
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void init(UVector& list,
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              UTransDirection direction,
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              UBool fixReverseID,
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org              UErrorCode& status);
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the IDs of the given list of transliterators, concatenated
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * with ';' delimiting them.  Equivalent to the perlish expression
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * join(';', map($_.getID(), transliterators).
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString joinIDs(Transliterator* const transliterators[],
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          int32_t transCount);
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void freeTransliterators(void);
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void computeMaximumContextLength(void);
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_TRANSLITERATION */
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
231