123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- // © 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- *******************************************************************************
- *
- * Copyright (C) 2002-2011, International Business Machines
- * Corporation and others. All Rights Reserved.
- *
- *******************************************************************************
- * file name: uset_props.cpp
- * encoding: UTF-8
- * 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_NAMESPACE_USE
- U_CAPI USet* U_EXPORT2
- uset_openPattern(const char16_t* pattern, int32_t patternLength,
- UErrorCode* ec)
- {
- UnicodeString pat(patternLength==-1, pattern, patternLength);
- UnicodeSet* set = new UnicodeSet(pat, *ec);
- /* test for nullptr */
- if(set == 0) {
- *ec = U_MEMORY_ALLOCATION_ERROR;
- return 0;
- }
- if (U_FAILURE(*ec)) {
- delete set;
- set = nullptr;
- }
- return (USet*) set;
- }
- U_CAPI USet* U_EXPORT2
- uset_openPatternOptions(const char16_t* pattern, int32_t patternLength,
- uint32_t options,
- UErrorCode* ec)
- {
- UnicodeString pat(patternLength==-1, pattern, patternLength);
- UnicodeSet* set = new UnicodeSet(pat, options, nullptr, *ec);
- /* test for nullptr */
- if(set == 0) {
- *ec = U_MEMORY_ALLOCATION_ERROR;
- return 0;
- }
- if (U_FAILURE(*ec)) {
- delete set;
- set = nullptr;
- }
- return (USet*) set;
- }
- U_CAPI int32_t U_EXPORT2
- uset_applyPattern(USet *set,
- const char16_t *pattern, int32_t patternLength,
- uint32_t options,
- UErrorCode *status){
- // status code needs to be checked since we
- // dereference it
- if(status == nullptr || U_FAILURE(*status)){
- return 0;
- }
- // check only the set paramenter
- // if pattern is nullptr or NUL terminated
- // UnicodeString constructor takes care of it
- if(set == nullptr){
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- return 0;
- }
- UnicodeString pat(pattern, patternLength);
- ParsePosition pos;
-
- ((UnicodeSet*) set)->applyPattern(pat, pos, options, nullptr, *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 char16_t *prop, int32_t propLength,
- const char16_t *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 char16_t *pattern, int32_t patternLength,
- int32_t pos) {
- UnicodeString pat(pattern, patternLength);
- return ((pos+1) < pat.length() &&
- pat.charAt(pos) == (char16_t)91/*[*/) ||
- UnicodeSet::resemblesPattern(pat, pos);
- }
- U_CAPI int32_t U_EXPORT2
- uset_toPattern(const USet* set,
- char16_t* result, int32_t resultCapacity,
- UBool escapeUnprintable,
- UErrorCode* ec) {
- UnicodeString pat;
- ((const UnicodeSet*) set)->toPattern(pat, escapeUnprintable);
- return pat.extract(result, resultCapacity, *ec);
- }
- U_CAPI void U_EXPORT2
- uset_closeOver(USet* set, int32_t attributes) {
- ((UnicodeSet*) set)->UnicodeSet::closeOver(attributes);
- }
|