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