/* ******************************************************************************* * * Copyright (C) 2002-2004, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * file name: uset_props.cpp * encoding: US-ASCII * 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_CAPI USet* U_EXPORT2 uset_openPattern(const UChar* pattern, int32_t patternLength, UErrorCode* ec) { UnicodeString pat(patternLength==-1, pattern, patternLength); UnicodeSet* set = new UnicodeSet(pat, *ec); /* test for NULL */ if(set == 0) { *ec = U_MEMORY_ALLOCATION_ERROR; return 0; } if (U_FAILURE(*ec)) { delete set; set = NULL; } return (USet*) set; } U_CAPI USet* U_EXPORT2 uset_openPatternOptions(const UChar* pattern, int32_t patternLength, uint32_t options, UErrorCode* ec) { UnicodeString pat(patternLength==-1, pattern, patternLength); UnicodeSet* set = new UnicodeSet(pat, options, NULL, *ec); /* test for NULL */ if(set == 0) { *ec = U_MEMORY_ALLOCATION_ERROR; return 0; } if (U_FAILURE(*ec)) { delete set; set = NULL; } return (USet*) set; } U_CAPI int32_t U_EXPORT2 uset_applyPattern(USet *set, const UChar *pattern, int32_t patternLength, uint32_t options, UErrorCode *status){ // status code needs to be checked since we // dereference it if(status == NULL || U_FAILURE(*status)){ return 0; } // check only the set paramenter // if pattern is NULL or null terminate // UnicodeString constructor takes care of it if(set == NULL){ *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } UnicodeString pat(pattern, patternLength); ParsePosition pos; ((UnicodeSet*) set)->applyPattern(pat, pos, options, NULL, *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 UChar *prop, int32_t propLength, const UChar *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 UChar *pattern, int32_t patternLength, int32_t pos) { UnicodeString pat(pattern, patternLength); return ((pos+1) < pat.length() && pat.charAt(pos) == (UChar)91/*[*/) || UnicodeSet::resemblesPattern(pat, pos); } U_CAPI int32_t U_EXPORT2 uset_toPattern(const USet* set, UChar* result, int32_t resultCapacity, UBool escapeUnprintable, UErrorCode* ec) { UnicodeString pat; ((const UnicodeSet*) set)->toPattern(pat, escapeUnprintable); return pat.extract(result, resultCapacity, *ec); } U_CAPI USet* U_EXPORT2 uprv_openRuleWhiteSpaceSet(UErrorCode* ec) { static const UChar _PATTERN[] = { /* "[[:Cf:][:WSpace:]]" */ 91, 91, 58, 67, 102, 58, 93, 91, 58, 87, 83, 112, 97, 99, 101, 58, 93, 93, 0 }; return uset_openPattern(_PATTERN, sizeof(_PATTERN)/sizeof(_PATTERN[0])-1, ec); }