X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/73c04bcfe1096173b00431f0cdc742894b15eef0..HEAD:/icuSources/i18n/utrans.cpp diff --git a/icuSources/i18n/utrans.cpp b/icuSources/i18n/utrans.cpp index 11da9d79..29013ead 100644 --- a/icuSources/i18n/utrans.cpp +++ b/icuSources/i18n/utrans.cpp @@ -1,6 +1,8 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* - * Copyright (C) 1997-2005, International Business Machines + * Copyright (C) 1997-2009,2014 International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * Date Name Description @@ -20,6 +22,7 @@ #include "unicode/uniset.h" #include "unicode/ustring.h" #include "unicode/uenum.h" +#include "unicode/uset.h" #include "uenumimp.h" #include "cpputils.h" #include "rbt.h" @@ -38,12 +41,12 @@ U_NAMESPACE_BEGIN class ReplaceableGlue : public Replaceable { UReplaceable *rep; - UReplaceableCallbacks *func; + const UReplaceableCallbacks *func; public: ReplaceableGlue(UReplaceable *replaceable, - UReplaceableCallbacks *funcCallback); + const UReplaceableCallbacks *funcCallback); virtual ~ReplaceableGlue(); @@ -85,7 +88,7 @@ protected: UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ReplaceableGlue) ReplaceableGlue::ReplaceableGlue(UReplaceable *replaceable, - UReplaceableCallbacks *funcCallback) + const UReplaceableCallbacks *funcCallback) : Replaceable() { this->rep = replaceable; @@ -166,15 +169,12 @@ utrans_openU(const UChar *id, rules, rulesLength); // r-o alias - RuleBasedTransliterator *trans = NULL; - trans = new RuleBasedTransliterator(ID, ruleStr, dir, - NULL, *parseError, *status); - if (trans == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - } else if (U_FAILURE(*status)) { - delete trans; - trans = NULL; + Transliterator *trans = NULL; + trans = Transliterator::createFromRules(ID, ruleStr, dir, *parseError, *status); + if(U_FAILURE(*status)) { + return NULL; } + return (UTransliterator*) trans; } } @@ -398,7 +398,7 @@ utrans_openIDs(UErrorCode *pErrorCode) { U_CAPI void U_EXPORT2 utrans_trans(const UTransliterator* trans, UReplaceable* rep, - UReplaceableCallbacks* repFunc, + const UReplaceableCallbacks* repFunc, int32_t start, int32_t* limit, UErrorCode* status) { @@ -418,7 +418,7 @@ utrans_trans(const UTransliterator* trans, U_CAPI void U_EXPORT2 utrans_transIncremental(const UTransliterator* trans, UReplaceable* rep, - UReplaceableCallbacks* repFunc, + const UReplaceableCallbacks* repFunc, UTransPosition* pos, UErrorCode* status) { @@ -495,4 +495,39 @@ utrans_transIncrementalUChars(const UTransliterator* trans, } } +U_CAPI int32_t U_EXPORT2 +utrans_toRules( const UTransliterator* trans, + UBool escapeUnprintable, + UChar* result, int32_t resultLength, + UErrorCode* status) { + utrans_ENTRY(status) 0; + if ( (result==NULL)? resultLength!=0: resultLength<0 ) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + UnicodeString res; + res.setTo(result, 0, resultLength); + ((Transliterator*) trans)->toRules(res, escapeUnprintable); + return res.extract(result, resultLength, *status); +} + +U_CAPI USet* U_EXPORT2 +utrans_getSourceSet(const UTransliterator* trans, + UBool ignoreFilter, + USet* fillIn, + UErrorCode* status) { + utrans_ENTRY(status) fillIn; + + if (fillIn == NULL) { + fillIn = uset_openEmpty(); + } + if (ignoreFilter) { + ((Transliterator*) trans)->handleGetSourceSet(*((UnicodeSet*)fillIn)); + } else { + ((Transliterator*) trans)->getSourceSet(*((UnicodeSet*)fillIn)); + } + return fillIn; +} + #endif /* #if !UCONFIG_NO_TRANSLITERATION */