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