tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

uset_props.cpp (3975B)


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