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