|
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 } |