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