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) 2001-2011, International Business Machines Corporation 6*0e209d39SAndroid Build Coastguard Worker * and others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 8*0e209d39SAndroid Build Coastguard Worker * Date Name Description 9*0e209d39SAndroid Build Coastguard Worker * 07/26/01 aliu Creation. 10*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 11*0e209d39SAndroid Build Coastguard Worker */ 12*0e209d39SAndroid Build Coastguard Worker #ifndef QUANT_H 13*0e209d39SAndroid Build Coastguard Worker #define QUANT_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 !UCONFIG_NO_TRANSLITERATION 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 U_NAMESPACE_BEGIN 23*0e209d39SAndroid Build Coastguard Worker 24*0e209d39SAndroid Build Coastguard Worker class Quantifier : public UnicodeFunctor, public UnicodeMatcher { 25*0e209d39SAndroid Build Coastguard Worker 26*0e209d39SAndroid Build Coastguard Worker public: 27*0e209d39SAndroid Build Coastguard Worker 28*0e209d39SAndroid Build Coastguard Worker enum { MAX = 0x7FFFFFFF }; 29*0e209d39SAndroid Build Coastguard Worker 30*0e209d39SAndroid Build Coastguard Worker Quantifier(UnicodeFunctor *adoptedMatcher, 31*0e209d39SAndroid Build Coastguard Worker uint32_t minCount, uint32_t maxCount); 32*0e209d39SAndroid Build Coastguard Worker 33*0e209d39SAndroid Build Coastguard Worker Quantifier(const Quantifier& o); 34*0e209d39SAndroid Build Coastguard Worker 35*0e209d39SAndroid Build Coastguard Worker virtual ~Quantifier(); 36*0e209d39SAndroid Build Coastguard Worker 37*0e209d39SAndroid Build Coastguard Worker /** 38*0e209d39SAndroid Build Coastguard Worker * UnicodeFunctor API. Cast 'this' to a UnicodeMatcher* pointer 39*0e209d39SAndroid Build Coastguard Worker * and return the pointer. 40*0e209d39SAndroid Build Coastguard Worker * @return the UnicodeMatcher pointer. 41*0e209d39SAndroid Build Coastguard Worker */ 42*0e209d39SAndroid Build Coastguard Worker virtual UnicodeMatcher* toMatcher() const override; 43*0e209d39SAndroid Build Coastguard Worker 44*0e209d39SAndroid Build Coastguard Worker /** 45*0e209d39SAndroid Build Coastguard Worker * Implement UnicodeFunctor 46*0e209d39SAndroid Build Coastguard Worker * @return a copy of the object. 47*0e209d39SAndroid Build Coastguard Worker */ 48*0e209d39SAndroid Build Coastguard Worker virtual Quantifier* clone() const override; 49*0e209d39SAndroid Build Coastguard Worker 50*0e209d39SAndroid Build Coastguard Worker /** 51*0e209d39SAndroid Build Coastguard Worker * Implement UnicodeMatcher 52*0e209d39SAndroid Build Coastguard Worker * @param text the text to be matched 53*0e209d39SAndroid Build Coastguard Worker * @param offset on input, the index into text at which to begin 54*0e209d39SAndroid Build Coastguard Worker * matching. On output, the limit of the matched text. The 55*0e209d39SAndroid Build Coastguard Worker * number of matched characters is the output value of offset 56*0e209d39SAndroid Build Coastguard Worker * minus the input value. Offset should always point to the 57*0e209d39SAndroid Build Coastguard Worker * HIGH SURROGATE (leading code unit) of a pair of surrogates, 58*0e209d39SAndroid Build Coastguard Worker * both on entry and upon return. 59*0e209d39SAndroid Build Coastguard Worker * @param limit the limit index of text to be matched. Greater 60*0e209d39SAndroid Build Coastguard Worker * than offset for a forward direction match, less than offset for 61*0e209d39SAndroid Build Coastguard Worker * a backward direction match. The last character to be 62*0e209d39SAndroid Build Coastguard Worker * considered for matching will be text.charAt(limit-1) in the 63*0e209d39SAndroid Build Coastguard Worker * forward direction or text.charAt(limit+1) in the backward 64*0e209d39SAndroid Build Coastguard Worker * direction. 65*0e209d39SAndroid Build Coastguard Worker * @param incremental if true, then assume further characters may 66*0e209d39SAndroid Build Coastguard Worker * be inserted at limit and check for partial matching. Otherwise 67*0e209d39SAndroid Build Coastguard Worker * assume the text as given is complete. 68*0e209d39SAndroid Build Coastguard Worker * @return a match degree value indicating a full match, a partial 69*0e209d39SAndroid Build Coastguard Worker * match, or a mismatch. If incremental is false then 70*0e209d39SAndroid Build Coastguard Worker * U_PARTIAL_MATCH should never be returned. 71*0e209d39SAndroid Build Coastguard Worker */ 72*0e209d39SAndroid Build Coastguard Worker virtual UMatchDegree matches(const Replaceable& text, 73*0e209d39SAndroid Build Coastguard Worker int32_t& offset, 74*0e209d39SAndroid Build Coastguard Worker int32_t limit, 75*0e209d39SAndroid Build Coastguard Worker UBool incremental) override; 76*0e209d39SAndroid Build Coastguard Worker 77*0e209d39SAndroid Build Coastguard Worker /** 78*0e209d39SAndroid Build Coastguard Worker * Implement UnicodeMatcher 79*0e209d39SAndroid Build Coastguard Worker * @param result Output param to receive the pattern. 80*0e209d39SAndroid Build Coastguard Worker * @param escapeUnprintable if True then escape the unprintable characters. 81*0e209d39SAndroid Build Coastguard Worker * @return A reference to 'result'. 82*0e209d39SAndroid Build Coastguard Worker */ 83*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString& toPattern(UnicodeString& result, 84*0e209d39SAndroid Build Coastguard Worker UBool escapeUnprintable = false) const override; 85*0e209d39SAndroid Build Coastguard Worker 86*0e209d39SAndroid Build Coastguard Worker /** 87*0e209d39SAndroid Build Coastguard Worker * Implement UnicodeMatcher 88*0e209d39SAndroid Build Coastguard Worker * @param v the given index value. 89*0e209d39SAndroid Build Coastguard Worker * @return true if this rule matches the given index value. 90*0e209d39SAndroid Build Coastguard Worker */ 91*0e209d39SAndroid Build Coastguard Worker virtual UBool matchesIndexValue(uint8_t v) const override; 92*0e209d39SAndroid Build Coastguard Worker 93*0e209d39SAndroid Build Coastguard Worker /** 94*0e209d39SAndroid Build Coastguard Worker * Implement UnicodeMatcher 95*0e209d39SAndroid Build Coastguard Worker */ 96*0e209d39SAndroid Build Coastguard Worker virtual void addMatchSetTo(UnicodeSet& toUnionTo) const override; 97*0e209d39SAndroid Build Coastguard Worker 98*0e209d39SAndroid Build Coastguard Worker /** 99*0e209d39SAndroid Build Coastguard Worker * UnicodeFunctor API 100*0e209d39SAndroid Build Coastguard Worker */ 101*0e209d39SAndroid Build Coastguard Worker virtual void setData(const TransliterationRuleData*) override; 102*0e209d39SAndroid Build Coastguard Worker 103*0e209d39SAndroid Build Coastguard Worker /** 104*0e209d39SAndroid Build Coastguard Worker * ICU "poor man's RTTI", returns a UClassID for the actual class. 105*0e209d39SAndroid Build Coastguard Worker */ 106*0e209d39SAndroid Build Coastguard Worker virtual UClassID getDynamicClassID() const override; 107*0e209d39SAndroid Build Coastguard Worker 108*0e209d39SAndroid Build Coastguard Worker /** 109*0e209d39SAndroid Build Coastguard Worker * ICU "poor man's RTTI", returns a UClassID for this class. 110*0e209d39SAndroid Build Coastguard Worker */ 111*0e209d39SAndroid Build Coastguard Worker static UClassID U_EXPORT2 getStaticClassID(); 112*0e209d39SAndroid Build Coastguard Worker 113*0e209d39SAndroid Build Coastguard Worker private: 114*0e209d39SAndroid Build Coastguard Worker 115*0e209d39SAndroid Build Coastguard Worker UnicodeFunctor* matcher; // owned 116*0e209d39SAndroid Build Coastguard Worker 117*0e209d39SAndroid Build Coastguard Worker uint32_t minCount; 118*0e209d39SAndroid Build Coastguard Worker 119*0e209d39SAndroid Build Coastguard Worker uint32_t maxCount; 120*0e209d39SAndroid Build Coastguard Worker }; 121*0e209d39SAndroid Build Coastguard Worker 122*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 123*0e209d39SAndroid Build Coastguard Worker 124*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_TRANSLITERATION */ 125*0e209d39SAndroid Build Coastguard Worker 126*0e209d39SAndroid Build Coastguard Worker #endif 127