1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // © 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- **********************************************************************
- * Copyright (c) 2001-2012, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- * Date Name Description
- * 07/18/01 aliu Creation.
- **********************************************************************
- */
- #include "unicode/unifilt.h"
- #include "unicode/rep.h"
- #include "unicode/utf16.h"
- U_NAMESPACE_BEGIN
- UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(UnicodeFilter)
- /* Define this here due to the lack of another file.
- It can't be defined in the header */
- UnicodeMatcher::~UnicodeMatcher() {}
- UnicodeFilter::~UnicodeFilter() {}
- /**
- * UnicodeFunctor API.
- * Note that UnicodeMatcher is a base class of UnicodeFilter.
- */
- UnicodeMatcher* UnicodeFilter::toMatcher() const {
- return const_cast<UnicodeFilter *>(this);
- }
- void UnicodeFilter::setData(const TransliterationRuleData*) {}
- /**
- * Default implementation of UnicodeMatcher::matches() for Unicode
- * filters. Matches a single code point at offset (either one or
- * two 16-bit code units).
- */
- UMatchDegree UnicodeFilter::matches(const Replaceable& text,
- int32_t& offset,
- int32_t limit,
- UBool incremental) {
- UChar32 c;
- if (offset < limit &&
- contains(c = text.char32At(offset))) {
- offset += U16_LENGTH(c);
- return U_MATCH;
- }
- if (offset > limit &&
- contains(c = text.char32At(offset))) {
- // Backup offset by 1, unless the preceding character is a
- // surrogate pair -- then backup by 2 (keep offset pointing at
- // the lead surrogate).
- --offset;
- if (offset >= 0) {
- offset -= U16_LENGTH(text.char32At(offset)) - 1;
- }
- return U_MATCH;
- }
- if (incremental && offset == limit) {
- return U_PARTIAL_MATCH;
- }
- return U_MISMATCH;
- }
- U_NAMESPACE_END
- //eof
|