00001
00002
00003
00004
00005
00006
00007
00008 #ifndef RBT_RULE_H
00009 #define RBT_RULE_H
00010
00011 #include "unicode/unistr.h"
00012 #include "unicode/utrans.h"
00013
00014 class Replaceable;
00015 class TransliterationRuleData;
00016 class UnicodeFilter;
00017
00036 class TransliterationRule {
00037
00038 public:
00039
00045 enum {
00052 MISMATCH,
00053
00063 PARTIAL_MATCH,
00064
00070 FULL_MATCH
00071 };
00072
00079 static const UChar ETHER;
00080
00081 private:
00082
00090 UnicodeString pattern;
00091
00096 UnicodeString output;
00097
00111 int32_t* segments;
00112
00118 int32_t anteContextLength;
00119
00125 int32_t keyLength;
00126
00132 int32_t cursorPos;
00133
00134 public:
00135
00167 TransliterationRule(const UnicodeString& input,
00168 int32_t anteContextPos, int32_t postContextPos,
00169 const UnicodeString& output,
00170 int32_t cursorPos, int32_t cursorOffset,
00171 int32_t* adoptedSegs,
00172 UBool anchorStart, UBool anchorEnd,
00173 UErrorCode& status);
00174
00192 TransliterationRule(const UnicodeString& input,
00193 int32_t anteContextPos, int32_t postContextPos,
00194 const UnicodeString& output,
00195 int32_t cursorPos,
00196 UErrorCode& status);
00197
00201 TransliterationRule(TransliterationRule& other);
00202
00206 virtual ~TransliterationRule();
00207
00212 virtual int32_t getCursorPos(void) const;
00213
00219 virtual int32_t getAnteContextLength(void) const;
00220
00227 int16_t getIndexValue(const TransliterationRuleData& data) const;
00228
00243 int32_t replace(Replaceable& text, int32_t offset,
00244 const TransliterationRuleData& data) const;
00245
00256 UBool matchesIndexValue(uint8_t v,
00257 const TransliterationRuleData& data) const;
00258
00265 virtual UBool masks(const TransliterationRule& r2) const;
00266
00282 virtual UBool matches(const Replaceable& text,
00283 const UTransPosition& pos,
00284 const TransliterationRuleData& data,
00285 const UnicodeFilter* filter) const;
00286
00312 virtual int32_t getMatchDegree(const Replaceable& text,
00313 const UTransPosition& pos,
00314 const TransliterationRuleData& data,
00315 const UnicodeFilter* filter) const;
00316
00339 virtual int32_t getRegionMatchLength(const Replaceable& text,
00340 const UTransPosition& pos,
00341 const TransliterationRuleData& data,
00342 const UnicodeFilter* filter) const;
00343
00358 virtual UBool charMatches(UChar keyChar, const Replaceable& textChar,
00359 int32_t index,
00360 const UTransPosition& pos,
00361 const TransliterationRuleData& data,
00362 const UnicodeFilter* filter) const;
00363
00378
00379
00380
00381
00382 private:
00383
00384 void init(const UnicodeString& input,
00385 int32_t anteContextPos, int32_t postContextPos,
00386 const UnicodeString& output,
00387 int32_t cursorPos, int32_t cursorOffset,
00388 int32_t* adoptedSegs,
00389 UBool anchorStart, UBool anchorEnd,
00390 UErrorCode& status);
00391
00392 };
00393
00394 #endif