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