// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * * Copyright (C) 2002-2011, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * file name: uset_props.cpp * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * * created on: 2004aug30 * created by: Markus W. Scherer * * C wrappers around UnicodeSet functions that are implemented in * uniset_props.cpp, split off for modularization. */ #include "unicode/utypes.h" #include "unicode/uobject.h" #include "unicode/uset.h" #include "unicode/uniset.h" #include "cmemory.h" #include "unicode/ustring.h" #include "unicode/parsepos.h" U_NAMESPACE_USE U_CAPI USet* U_EXPORT2 uset_openPattern(const char16_t* pattern, int32_t patternLength, UErrorCode* ec) { UnicodeString pat(patternLength==-1, pattern, patternLength); UnicodeSet* set = new UnicodeSet(pat, *ec); /* test for nullptr */ if (set == nullptr) { *ec = U_MEMORY_ALLOCATION_ERROR; return nullptr; } if (U_FAILURE(*ec)) { delete set; set = nullptr; } return (USet*) set; } U_CAPI USet* U_EXPORT2 uset_openPatternOptions(const char16_t* pattern, int32_t patternLength, uint32_t options, UErrorCode* ec) { UnicodeString pat(patternLength==-1, pattern, patternLength); UnicodeSet* set = new UnicodeSet(pat, options, nullptr, *ec); /* test for nullptr */ if (set == nullptr) { *ec = U_MEMORY_ALLOCATION_ERROR; return nullptr; } if (U_FAILURE(*ec)) { delete set; set = nullptr; } return (USet*) set; } U_CAPI int32_t U_EXPORT2 uset_applyPattern(USet *set, const char16_t *pattern, int32_t patternLength, uint32_t options, UErrorCode *status){ // status code needs to be checked since we // dereference it if(status == nullptr || U_FAILURE(*status)){ return 0; } // check only the set paramenter // if pattern is nullptr or NUL terminated // UnicodeString constructor takes care of it if(set == nullptr){ *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } UnicodeString pat(pattern, patternLength); ParsePosition pos; ((UnicodeSet*) set)->applyPattern(pat, pos, options, nullptr, *status); return pos.getIndex(); } U_CAPI void U_EXPORT2 uset_applyIntPropertyValue(USet* set, UProperty prop, int32_t value, UErrorCode* ec) { ((UnicodeSet*) set)->applyIntPropertyValue(prop, value, *ec); } U_CAPI void U_EXPORT2 uset_applyPropertyAlias(USet* set, const char16_t *prop, int32_t propLength, const char16_t *value, int32_t valueLength, UErrorCode* ec) { UnicodeString p(prop, propLength); UnicodeString v(value, valueLength); ((UnicodeSet*) set)->applyPropertyAlias(p, v, *ec); } U_CAPI UBool U_EXPORT2 uset_resemblesPattern(const char16_t *pattern, int32_t patternLength, int32_t pos) { UnicodeString pat(pattern, patternLength); return ((pos+1) < pat.length() && pat.charAt(pos) == (char16_t)91/*[*/) || UnicodeSet::resemblesPattern(pat, pos); } U_CAPI int32_t U_EXPORT2 uset_toPattern(const USet* set, char16_t* result, int32_t resultCapacity, UBool escapeUnprintable, UErrorCode* ec) { UnicodeString pat; ((const UnicodeSet*) set)->toPattern(pat, escapeUnprintable); return pat.extract(result, resultCapacity, *ec); } U_CAPI void U_EXPORT2 uset_closeOver(USet* set, int32_t attributes) { ((UnicodeSet*) set)->UnicodeSet::closeOver(attributes); }