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
00029 struct RBBIDataHeader;
00030 class RuleBasedBreakIteratorTables;
00031 class BreakIterator;
00032 class RBBIDataWrapper;
00033
00034
00035
00050 class U_COMMON_API RuleBasedBreakIterator : public BreakIterator {
00051
00052 protected:
00057 CharacterIterator* fText;
00058
00063 RBBIDataWrapper *fData;
00065 UTrie *fCharMappings;
00066
00070 int32_t fLastBreakTag;
00071
00078 UBool fLastBreakTagValid;
00079
00087 uint32_t fDictionaryCharCount;
00088
00093 static UBool fTrace;
00094
00095
00096
00097 private:
00101 static const char fgClassID;
00102
00103 protected:
00104
00105
00106
00107
00114 RuleBasedBreakIterator(UDataMemory* image, UErrorCode &status);
00115
00126 RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status);
00127
00128 friend class RBBIRuleBuilder;
00129 friend class BreakIterator;
00130
00131
00132
00133 public:
00134
00139 RuleBasedBreakIterator();
00140
00147 RuleBasedBreakIterator(const RuleBasedBreakIterator& that);
00148
00157 RuleBasedBreakIterator( const UnicodeString &rules,
00158 UParseError &parseError,
00159 UErrorCode &status);
00164 virtual ~RuleBasedBreakIterator();
00165
00173 RuleBasedBreakIterator& operator=(const RuleBasedBreakIterator& that);
00174
00183 virtual UBool operator==(const BreakIterator& that) const;
00184
00192 UBool operator!=(const BreakIterator& that) const;
00193
00203 virtual BreakIterator* clone() const;
00204
00210 virtual int32_t hashCode(void) const;
00211
00217 virtual const UnicodeString& getRules(void) const;
00218
00219
00220
00221
00222
00231 virtual const CharacterIterator& getText(void) const;
00232
00233
00241 virtual void adoptText(CharacterIterator* newText);
00242
00249 virtual void setText(const UnicodeString& newText);
00250
00257 virtual int32_t first(void);
00258
00265 virtual int32_t last(void);
00266
00277 virtual int32_t next(int32_t n);
00278
00284 virtual int32_t next(void);
00285
00291 virtual int32_t previous(void);
00292
00300 virtual int32_t following(int32_t offset);
00301
00309 virtual int32_t preceding(int32_t offset);
00310
00319 virtual UBool isBoundary(int32_t offset);
00320
00326 virtual int32_t current(void) const;
00327
00328
00350 virtual int32_t getRuleStatus() const;
00351
00363 inline virtual UClassID getDynamicClassID(void) const;
00364
00376 inline static UClassID getStaticClassID(void);
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402 virtual BreakIterator * createBufferClone(void *stackBuffer,
00403 int32_t &BufferSize,
00404 UErrorCode &status);
00405
00406
00424 virtual const uint8_t *getBinaryRules(uint32_t &length);
00425
00426
00427 protected:
00428
00429
00430
00439 virtual int32_t handleNext(void);
00440
00449 virtual int32_t handlePrevious(void);
00450
00457 virtual void reset(void);
00458
00467 virtual UBool isDictionaryChar(UChar32);
00468
00474 void init();
00475
00476 };
00477
00478
00479
00480
00481
00482
00483
00484 inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const {
00485 return !operator==(that);
00486 }
00487
00488 inline UClassID RuleBasedBreakIterator::getStaticClassID(void) {
00489 return (UClassID)(&fgClassID);
00490 }
00491
00492 inline UClassID RuleBasedBreakIterator::getDynamicClassID(void) const {
00493 return RuleBasedBreakIterator::getStaticClassID();
00494 }
00495
00496 U_NAMESPACE_END
00497
00498 #endif
00499
00500 #endif