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