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