1// Copyright (C) 2016 and later: Unicode, Inc. and others. 2// License & terms of use: http://www.unicode.org/copyright.html 3/* 4******************************************************************************* 5* 6* Copyright (C) 2002-2011, International Business Machines 7* Corporation and others. All Rights Reserved. 8* 9******************************************************************************* 10* file name: uset_props.cpp 11* encoding: US-ASCII 12* tab size: 8 (not used) 13* indentation:4 14* 15* created on: 2004aug30 16* created by: Markus W. Scherer 17* 18* C wrappers around UnicodeSet functions that are implemented in 19* uniset_props.cpp, split off for modularization. 20*/ 21 22#include "unicode/utypes.h" 23#include "unicode/uobject.h" 24#include "unicode/uset.h" 25#include "unicode/uniset.h" 26#include "cmemory.h" 27#include "unicode/ustring.h" 28#include "unicode/parsepos.h" 29 30U_NAMESPACE_USE 31 32U_CAPI USet* U_EXPORT2 33uset_openPattern(const UChar* pattern, int32_t patternLength, 34 UErrorCode* ec) 35{ 36 UnicodeString pat(patternLength==-1, pattern, patternLength); 37 UnicodeSet* set = new UnicodeSet(pat, *ec); 38 /* test for NULL */ 39 if(set == 0) { 40 *ec = U_MEMORY_ALLOCATION_ERROR; 41 return 0; 42 } 43 44 if (U_FAILURE(*ec)) { 45 delete set; 46 set = NULL; 47 } 48 return (USet*) set; 49} 50 51U_CAPI USet* U_EXPORT2 52uset_openPatternOptions(const UChar* pattern, int32_t patternLength, 53 uint32_t options, 54 UErrorCode* ec) 55{ 56 UnicodeString pat(patternLength==-1, pattern, patternLength); 57 UnicodeSet* set = new UnicodeSet(pat, options, NULL, *ec); 58 /* test for NULL */ 59 if(set == 0) { 60 *ec = U_MEMORY_ALLOCATION_ERROR; 61 return 0; 62 } 63 64 if (U_FAILURE(*ec)) { 65 delete set; 66 set = NULL; 67 } 68 return (USet*) set; 69} 70 71 72U_CAPI int32_t U_EXPORT2 73uset_applyPattern(USet *set, 74 const UChar *pattern, int32_t patternLength, 75 uint32_t options, 76 UErrorCode *status){ 77 78 // status code needs to be checked since we 79 // dereference it 80 if(status == NULL || U_FAILURE(*status)){ 81 return 0; 82 } 83 84 // check only the set paramenter 85 // if pattern is NULL or null terminate 86 // UnicodeString constructor takes care of it 87 if(set == NULL){ 88 *status = U_ILLEGAL_ARGUMENT_ERROR; 89 return 0; 90 } 91 92 UnicodeString pat(pattern, patternLength); 93 94 ParsePosition pos; 95 96 ((UnicodeSet*) set)->applyPattern(pat, pos, options, NULL, *status); 97 98 return pos.getIndex(); 99} 100 101U_CAPI void U_EXPORT2 102uset_applyIntPropertyValue(USet* set, 103 UProperty prop, int32_t value, UErrorCode* ec) { 104 ((UnicodeSet*) set)->applyIntPropertyValue(prop, value, *ec); 105} 106 107U_CAPI void U_EXPORT2 108uset_applyPropertyAlias(USet* set, 109 const UChar *prop, int32_t propLength, 110 const UChar *value, int32_t valueLength, 111 UErrorCode* ec) { 112 113 UnicodeString p(prop, propLength); 114 UnicodeString v(value, valueLength); 115 116 ((UnicodeSet*) set)->applyPropertyAlias(p, v, *ec); 117} 118 119U_CAPI UBool U_EXPORT2 120uset_resemblesPattern(const UChar *pattern, int32_t patternLength, 121 int32_t pos) { 122 123 UnicodeString pat(pattern, patternLength); 124 125 return ((pos+1) < pat.length() && 126 pat.charAt(pos) == (UChar)91/*[*/) || 127 UnicodeSet::resemblesPattern(pat, pos); 128} 129 130U_CAPI int32_t U_EXPORT2 131uset_toPattern(const USet* set, 132 UChar* result, int32_t resultCapacity, 133 UBool escapeUnprintable, 134 UErrorCode* ec) { 135 UnicodeString pat; 136 ((const UnicodeSet*) set)->toPattern(pat, escapeUnprintable); 137 return pat.extract(result, resultCapacity, *ec); 138} 139 140U_CAPI void U_EXPORT2 141uset_closeOver(USet* set, int32_t attributes) { 142 ((UnicodeSet*) set)->UnicodeSet::closeOver(attributes); 143} 144