Line data Source code
1 : // © 2016 and later: Unicode, Inc. and others.
2 : // License & terms of use: http://www.unicode.org/copyright.html
3 : /*
4 : **********************************************************************
5 : * Copyright (C) 1999-2010, International Business Machines Corporation and others.
6 : * All Rights Reserved.
7 : **********************************************************************
8 : * Date Name Description
9 : * 11/17/99 aliu Creation.
10 : **********************************************************************
11 : */
12 : #ifndef UNIFILT_H
13 : #define UNIFILT_H
14 :
15 : #include "unicode/unifunct.h"
16 : #include "unicode/unimatch.h"
17 :
18 : /**
19 : * \file
20 : * \brief C++ API: Unicode Filter
21 : */
22 :
23 : U_NAMESPACE_BEGIN
24 :
25 : /**
26 : * U_ETHER is used to represent character values for positions outside
27 : * a range. For example, transliterator uses this to represent
28 : * characters outside the range contextStart..contextLimit-1. This
29 : * allows explicit matching by rules and UnicodeSets of text outside a
30 : * defined range.
31 : * @stable ICU 3.0
32 : */
33 : #define U_ETHER ((char16_t)0xFFFF)
34 :
35 : /**
36 : *
37 : * <code>UnicodeFilter</code> defines a protocol for selecting a
38 : * subset of the full range (U+0000 to U+10FFFF) of Unicode characters.
39 : * Currently, filters are used in conjunction with classes like {@link
40 : * Transliterator} to only process selected characters through a
41 : * transformation.
42 : *
43 : * <p>Note: UnicodeFilter currently stubs out two pure virtual methods
44 : * of its base class, UnicodeMatcher. These methods are toPattern()
45 : * and matchesIndexValue(). This is done so that filter classes that
46 : * are not actually used as matchers -- specifically, those in the
47 : * UnicodeFilterLogic component, and those in tests -- can continue to
48 : * work without defining these methods. As long as a filter is not
49 : * used in an RBT during real transliteration, these methods will not
50 : * be called. However, this breaks the UnicodeMatcher base class
51 : * protocol, and it is not a correct solution.
52 : *
53 : * <p>In the future we may revisit the UnicodeMatcher / UnicodeFilter
54 : * hierarchy and either redesign it, or simply remove the stubs in
55 : * UnicodeFilter and force subclasses to implement the full
56 : * UnicodeMatcher protocol.
57 : *
58 : * @see UnicodeFilterLogic
59 : * @stable ICU 2.0
60 : */
61 0 : class U_COMMON_API UnicodeFilter : public UnicodeFunctor, public UnicodeMatcher {
62 :
63 : public:
64 : /**
65 : * Destructor
66 : * @stable ICU 2.0
67 : */
68 : virtual ~UnicodeFilter();
69 :
70 : /**
71 : * Returns <tt>true</tt> for characters that are in the selected
72 : * subset. In other words, if a character is <b>to be
73 : * filtered</b>, then <tt>contains()</tt> returns
74 : * <b><tt>false</tt></b>.
75 : * @stable ICU 2.0
76 : */
77 : virtual UBool contains(UChar32 c) const = 0;
78 :
79 : /**
80 : * UnicodeFunctor API. Cast 'this' to a UnicodeMatcher* pointer
81 : * and return the pointer.
82 : * @stable ICU 2.4
83 : */
84 : virtual UnicodeMatcher* toMatcher() const;
85 :
86 : /**
87 : * Implement UnicodeMatcher API.
88 : * @stable ICU 2.4
89 : */
90 : virtual UMatchDegree matches(const Replaceable& text,
91 : int32_t& offset,
92 : int32_t limit,
93 : UBool incremental);
94 :
95 : /**
96 : * UnicodeFunctor API. Nothing to do.
97 : * @stable ICU 2.4
98 : */
99 : virtual void setData(const TransliterationRuleData*);
100 :
101 : /**
102 : * ICU "poor man's RTTI", returns a UClassID for this class.
103 : *
104 : * @stable ICU 2.2
105 : */
106 : static UClassID U_EXPORT2 getStaticClassID();
107 :
108 : protected:
109 :
110 : /*
111 : * Since this class has pure virtual functions,
112 : * a constructor can't be used.
113 : * @stable ICU 2.0
114 : */
115 : /* UnicodeFilter();*/
116 : };
117 :
118 : /*inline UnicodeFilter::UnicodeFilter() {}*/
119 :
120 : U_NAMESPACE_END
121 :
122 : #endif
|