123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- // © 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- **********************************************************************
- * Copyright (C) 1999-2011, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- * Date Name Description
- * 11/17/99 aliu Creation.
- **********************************************************************
- */
- #ifndef CPDTRANS_H
- #define CPDTRANS_H
- #include "unicode/utypes.h"
- #if !UCONFIG_NO_TRANSLITERATION
- #include "unicode/translit.h"
- U_NAMESPACE_BEGIN
- class U_COMMON_API UVector;
- class TransliteratorRegistry;
- /**
- * A transliterator that is composed of two or more other
- * transliterator objects linked together. For example, if one
- * transliterator transliterates from script A to script B, and
- * another transliterates from script B to script C, the two may be
- * combined to form a new transliterator from A to C.
- *
- * <p>Composed transliterators may not behave as expected. For
- * example, inverses may not combine to form the identity
- * transliterator. See the class documentation for {@link
- * Transliterator} for details.
- *
- * @author Alan Liu
- */
- class U_I18N_API CompoundTransliterator : public Transliterator {
- Transliterator** trans;
- int32_t count;
- int32_t numAnonymousRBTs;
- public:
- /**
- * Constructs a new compound transliterator given an array of
- * transliterators. The array of transliterators may be of any
- * length, including zero or one, however, useful compound
- * transliterators have at least two components.
- * @param transliterators array of <code>Transliterator</code>
- * objects
- * @param transliteratorCount The number of
- * <code>Transliterator</code> objects in transliterators.
- * @param adoptedFilter the filter. Any character for which
- * <tt>filter.contains()</tt> returns <tt>false</tt> will not be
- * altered by this transliterator. If <tt>filter</tt> is
- * <tt>null</tt> then no filtering is applied.
- */
- CompoundTransliterator(Transliterator* const transliterators[],
- int32_t transliteratorCount,
- UnicodeFilter* adoptedFilter = 0);
- /**
- * Constructs a new compound transliterator.
- * @param id compound ID
- * @param dir either UTRANS_FORWARD or UTRANS_REVERSE
- * @param adoptedFilter a global filter for this compound transliterator
- * or NULL
- */
- CompoundTransliterator(const UnicodeString& id,
- UTransDirection dir,
- UnicodeFilter* adoptedFilter,
- UParseError& parseError,
- UErrorCode& status);
- /**
- * Constructs a new compound transliterator in the FORWARD
- * direction with a NULL filter.
- */
- CompoundTransliterator(const UnicodeString& id,
- UParseError& parseError,
- UErrorCode& status);
- /**
- * Destructor.
- */
- virtual ~CompoundTransliterator();
- /**
- * Copy constructor.
- */
- CompoundTransliterator(const CompoundTransliterator&);
- /**
- * Transliterator API.
- */
- virtual CompoundTransliterator* clone() const;
- /**
- * Returns the number of transliterators in this chain.
- * @return number of transliterators in this chain.
- */
- virtual int32_t getCount(void) const;
- /**
- * Returns the transliterator at the given index in this chain.
- * @param idx index into chain, from 0 to <code>getCount() - 1</code>
- * @return transliterator at the given index
- */
- virtual const Transliterator& getTransliterator(int32_t idx) const;
- /**
- * Sets the transliterators.
- */
- void setTransliterators(Transliterator* const transliterators[],
- int32_t count);
- /**
- * Adopts the transliterators.
- */
- void adoptTransliterators(Transliterator* adoptedTransliterators[],
- int32_t count);
- /**
- * Override Transliterator:
- * Create a rule string that can be passed to createFromRules()
- * to recreate this transliterator.
- * @param result the string to receive the rules. Previous
- * contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
- * character to their hex escape representations, \uxxxx or
- * \Uxxxxxxxx. Unprintable characters are those other than
- * U+000A, U+0020..U+007E.
- */
- virtual UnicodeString& toRules(UnicodeString& result,
- UBool escapeUnprintable) const;
- protected:
- /**
- * Implement Transliterator framework
- */
- virtual void handleGetSourceSet(UnicodeSet& result) const;
- public:
- /**
- * Override Transliterator framework
- */
- virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
- protected:
- /**
- * Implements {@link Transliterator#handleTransliterate}.
- */
- virtual void handleTransliterate(Replaceable& text, UTransPosition& idx,
- UBool incremental) const;
- public:
- /**
- * ICU "poor man's RTTI", returns a UClassID for the actual class.
- */
- virtual UClassID getDynamicClassID() const;
- /**
- * ICU "poor man's RTTI", returns a UClassID for this class.
- */
- static UClassID U_EXPORT2 getStaticClassID();
- /* @internal */
- static const UChar PASS_STRING[];
- private:
- friend class Transliterator;
- friend class TransliteratorAlias; // to access private ct
- /**
- * Assignment operator.
- */
- CompoundTransliterator& operator=(const CompoundTransliterator&);
- /**
- * Private constructor for Transliterator.
- */
- CompoundTransliterator(const UnicodeString& ID,
- UVector& list,
- UnicodeFilter* adoptedFilter,
- int32_t numAnonymousRBTs,
- UParseError& parseError,
- UErrorCode& status);
-
- CompoundTransliterator(UVector& list,
- UParseError& parseError,
- UErrorCode& status);
- CompoundTransliterator(UVector& list,
- int32_t anonymousRBTs,
- UParseError& parseError,
- UErrorCode& status);
- void init(const UnicodeString& id,
- UTransDirection direction,
- UBool fixReverseID,
- UErrorCode& status);
- void init(UVector& list,
- UTransDirection direction,
- UBool fixReverseID,
- UErrorCode& status);
- /**
- * Return the IDs of the given list of transliterators, concatenated
- * with ';' delimiting them. Equivalent to the perlish expression
- * join(';', map($_.getID(), transliterators).
- */
- UnicodeString joinIDs(Transliterator* const transliterators[],
- int32_t transCount);
- void freeTransliterators(void);
- void computeMaximumContextLength(void);
- };
- U_NAMESPACE_END
- #endif /* #if !UCONFIG_NO_TRANSLITERATION */
- #endif
|