]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/uset_props.cpp
ICU-6.2.4.tar.gz
[apple/icu.git] / icuSources / common / uset_props.cpp
diff --git a/icuSources/common/uset_props.cpp b/icuSources/common/uset_props.cpp
new file mode 100644 (file)
index 0000000..d2f8824
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+*******************************************************************************
+*
+*   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);
+}
+