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 struct RBBIStateTable;
00034
00035
00036
00051 class U_COMMON_API RuleBasedBreakIterator : public BreakIterator {
00052
00053 protected:
00058 CharacterIterator* fText;
00059
00064 RBBIDataWrapper *fData;
00065
00069 int32_t fLastBreakTag;
00070
00077 UBool fLastBreakTagValid;
00078
00086 uint32_t fDictionaryCharCount;
00087
00092 static UBool fTrace;
00093
00094
00095 protected:
00096
00097
00098
00099
00110 RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status);
00111
00112 friend class RBBIRuleBuilder;
00113 friend class BreakIterator;
00114
00115
00116
00117 public:
00118
00123 RuleBasedBreakIterator();
00124
00131 RuleBasedBreakIterator(const RuleBasedBreakIterator& that);
00132
00141 RuleBasedBreakIterator( const UnicodeString &rules,
00142 UParseError &parseError,
00143 UErrorCode &status);
00144
00145
00158 RuleBasedBreakIterator(UDataMemory* image, UErrorCode &status);
00159
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 virtual UClassID getDynamicClassID(void) const;
00364
00376 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 private:
00477
00487 int32_t handlePrevious(const RBBIStateTable *statetable);
00488
00498 int32_t handleNext(const RBBIStateTable *statetable);
00499 };
00500
00501
00502
00503
00504
00505
00506
00507 inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const {
00508 return !operator==(that);
00509 }
00510
00511 U_NAMESPACE_END
00512
00513 #endif
00514
00515 #endif