00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef RBBI_H
00015 #define RBBI_H
00016
00017 #include "unicode/utypes.h"
00018
00019 #if !UCONFIG_NO_BREAK_ITERATION
00020
00021 #include "unicode/brkiter.h"
00022 #include "unicode/udata.h"
00023 #include "unicode/parseerr.h"
00024
00025 struct UTrie;
00026
00027 U_NAMESPACE_BEGIN
00028
00030 struct RBBIDataHeader;
00031 class RuleBasedBreakIteratorTables;
00032 class BreakIterator;
00033 class RBBIDataWrapper;
00034 struct RBBIStateTable;
00035
00036
00037
00052 class U_COMMON_API RuleBasedBreakIterator : public BreakIterator {
00053
00054 protected:
00059 CharacterIterator* fText;
00060
00065 RBBIDataWrapper *fData;
00066
00070 int32_t fLastRuleStatusIndex;
00071
00078 UBool fLastStatusIndexValid;
00079
00087 uint32_t fDictionaryCharCount;
00088
00093 static UBool fTrace;
00094
00095
00096 protected:
00097
00098
00099
00100
00111 RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status);
00112
00113 friend class RBBIRuleBuilder;
00114 friend class BreakIterator;
00115
00116
00117
00118 public:
00119
00124 RuleBasedBreakIterator();
00125
00132 RuleBasedBreakIterator(const RuleBasedBreakIterator& that);
00133
00142 RuleBasedBreakIterator( const UnicodeString &rules,
00143 UParseError &parseError,
00144 UErrorCode &status);
00145
00146
00159 RuleBasedBreakIterator(UDataMemory* image, UErrorCode &status);
00160
00165 virtual ~RuleBasedBreakIterator();
00166
00174 RuleBasedBreakIterator& operator=(const RuleBasedBreakIterator& that);
00175
00184 virtual UBool operator==(const BreakIterator& that) const;
00185
00193 UBool operator!=(const BreakIterator& that) const;
00194
00205 virtual BreakIterator* clone() const;
00206
00212 virtual int32_t hashCode(void) const;
00213
00219 virtual const UnicodeString& getRules(void) const;
00220
00221
00222
00223
00224
00233 virtual const CharacterIterator& getText(void) const;
00234
00235
00243 virtual void adoptText(CharacterIterator* newText);
00244
00251 virtual void setText(const UnicodeString& newText);
00252
00259 virtual int32_t first(void);
00260
00267 virtual int32_t last(void);
00268
00279 virtual int32_t next(int32_t n);
00280
00286 virtual int32_t next(void);
00287
00293 virtual int32_t previous(void);
00294
00302 virtual int32_t following(int32_t offset);
00303
00311 virtual int32_t preceding(int32_t offset);
00312
00321 virtual UBool isBoundary(int32_t offset);
00322
00328 virtual int32_t current(void) const;
00329
00330
00363 virtual int32_t getRuleStatus() const;
00364
00388 virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status);
00389
00401 virtual UClassID getDynamicClassID(void) const;
00402
00414 static UClassID U_EXPORT2 getStaticClassID(void);
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440 virtual BreakIterator * createBufferClone(void *stackBuffer,
00441 int32_t &BufferSize,
00442 UErrorCode &status);
00443
00444
00462 virtual const uint8_t *getBinaryRules(uint32_t &length);
00463
00464
00465 protected:
00466
00467
00468
00477 virtual int32_t handleNext(void);
00478
00487 virtual int32_t handlePrevious(void);
00488
00495 virtual void reset(void);
00496
00505 virtual UBool isDictionaryChar(UChar32);
00506
00512 void init();
00513
00514 private:
00515
00525 int32_t handlePrevious(const RBBIStateTable *statetable);
00526
00536 int32_t handleNext(const RBBIStateTable *statetable);
00537
00541 void makeRuleStatusValid();
00542
00543 };
00544
00545
00546
00547
00548
00549
00550
00551 inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const {
00552 return !operator==(that);
00553 }
00554
00555 U_NAMESPACE_END
00556
00557 #endif
00558
00559 #endif