]>
Commit | Line | Data |
---|---|---|
374ca955 A |
1 | /* |
2 | ******************************************************************************* | |
3 | * | |
46f4442e | 4 | * Copyright (C) 2002-2006, International Business Machines |
374ca955 A |
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 | ||
46f4442e A |
28 | U_NAMESPACE_USE |
29 | ||
374ca955 A |
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 | } |