/*
* Copyright (C) 2001, International Business Machines Corporation and others. All Rights Reserved.
**********************************************************************
* Date Name Description
* 07/23/01 aliu Creation.
**********************************************************************
*/
#ifndef STRMATCH_H
#define STRMATCH_H
#include "unicode/unistr.h"
#include "unicode/unimatch.h"
U_NAMESPACE_BEGIN
class TransliterationRuleData;
/**
* An object that matches a string.
*/
class StringMatcher : public UnicodeMatcher {
public:
StringMatcher(const UnicodeString& string,
int32_t start,
int32_t limit,
UBool isSegment,
const TransliterationRuleData& data);
StringMatcher(const StringMatcher& o);
/**
* Destructor
*/
virtual ~StringMatcher();
/**
* Implement UnicodeMatcher
*/
virtual UnicodeMatcher* clone() const;
/**
* Implement UnicodeMatcher
*/
virtual UMatchDegree matches(const Replaceable& text,
int32_t& offset,
int32_t limit,
UBool incremental);
/**
* Implement UnicodeMatcher
*/
virtual UnicodeString& toPattern(UnicodeString& result,
UBool escapeUnprintable = FALSE) const;
/**
* Implement UnicodeMatcher
*/
virtual UBool matchesIndexValue(uint8_t v) const;
/**
* Remove any match data. This must be called before performing a
* set of matches with this segment.
*/
void resetMatch();
/**
* Return the start offset, in the match text, of the rightmost
* match. This method may get moved up into the UnicodeMatcher if
* it turns out to be useful to generalize this.
*/
int32_t getMatchStart() const;
/**
* Return the limit offset, in the match text, of the rightmost
* match. This method may get moved up into the UnicodeMatcher if
* it turns out to be useful to generalize this.
*/
int32_t getMatchLimit() const;
private:
UnicodeString pattern;
const TransliterationRuleData& data;
UBool isSegment;
int32_t matchStart;
int32_t matchLimit;
};
U_NAMESPACE_END
#endif