intl/icu/source/common/unifilt.cpp

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /*
     2 **********************************************************************
     3 * Copyright (c) 2001-2012, International Business Machines
     4 * Corporation and others.  All Rights Reserved.
     5 **********************************************************************
     6 *   Date        Name        Description
     7 *   07/18/01    aliu        Creation.
     8 **********************************************************************
     9 */
    11 #include "unicode/unifilt.h"
    12 #include "unicode/rep.h"
    13 #include "unicode/utf16.h"
    15 U_NAMESPACE_BEGIN
    16 UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(UnicodeFilter)
    19 /* Define this here due to the lack of another file.
    20    It can't be defined in the header */
    21 UnicodeMatcher::~UnicodeMatcher() {}
    23 UnicodeFilter::~UnicodeFilter() {}
    25 /**
    26  * UnicodeFunctor API.
    27  *   Note that UnicodeMatcher is a base class of UnicodeFilter.
    28  */
    29 UnicodeMatcher* UnicodeFilter::toMatcher() const {
    30   return const_cast<UnicodeFilter *>(this);
    31 }
    33 void UnicodeFilter::setData(const TransliterationRuleData*) {}
    35 /**
    36  * Default implementation of UnicodeMatcher::matches() for Unicode
    37  * filters.  Matches a single code point at offset (either one or
    38  * two 16-bit code units).
    39  */
    40 UMatchDegree UnicodeFilter::matches(const Replaceable& text,
    41                                     int32_t& offset,
    42                                     int32_t limit,
    43                                     UBool incremental) {
    44     UChar32 c;
    45     if (offset < limit &&
    46         contains(c = text.char32At(offset))) {
    47         offset += U16_LENGTH(c);
    48         return U_MATCH;
    49     }
    50     if (offset > limit &&
    51         contains(c = text.char32At(offset))) {
    52         // Backup offset by 1, unless the preceding character is a
    53         // surrogate pair -- then backup by 2 (keep offset pointing at
    54         // the lead surrogate).
    55         --offset;
    56         if (offset >= 0) {
    57             offset -= U16_LENGTH(text.char32At(offset)) - 1;
    58         }
    59         return U_MATCH;
    60     }
    61     if (incremental && offset == limit) {
    62         return U_PARTIAL_MATCH;
    63     }
    64     return U_MISMATCH;
    65 }
    67 U_NAMESPACE_END
    69 //eof

mercurial