/** * Finish constructing a transliterator: only to be called by * constructors. Before calling init(), set trans and filter to NULL. * @param id the id containing ';'-separated entries * @param direction either FORWARD or REVERSE * @param idSplitPoint the index into id at which the * adoptedSplitTransliterator should be inserted, if there is one, or * -1 if there is none. * @param adoptedSplitTransliterator a transliterator to be inserted * before the entry at offset idSplitPoint in the id string. May be * NULL to insert no entry. * @param fixReverseID if TRUE, then reconstruct the ID of reverse * entries by calling getID() of component entries. Some constructors * do not require this because they apply a facade ID anyway. * @param status the error code indicating success or failure */ void CompoundTransliterator::init(const UnicodeString& id, UTransDirection direction, int32_t idSplitPoint, Transliterator *adoptedSplitTrans, UBool fixReverseID, UErrorCode& status) { // assert(trans == 0); if (U_FAILURE(status)) { delete adoptedSplitTrans; return; } UVector list(status); UnicodeSet* compoundFilter = NULL; UnicodeString regenID; if (!TransliteratorIDParser::parseCompoundID(id, direction, regenID, list, compoundFilter)) { status = U_INVALID_ID; delete adoptedSplitTrans; delete compoundFilter; return; } compoundRBTIndex = TransliteratorIDParser::instantiateList(list, adoptedSplitTrans, idSplitPoint, status); init(list, direction, fixReverseID, status); if (compoundFilter != NULL) { adoptFilter(compoundFilter); } }
Transliterator& Transliterator::operator=(const Transliterator& other) { ID = other.ID; // NUL-terminate the ID string ID.getTerminatedBuffer(); maximumContextLength = other.maximumContextLength; adoptFilter((other.filter == 0) ? 0 : (UnicodeFilter*) other.filter->clone()); return *this; }