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