00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef RBBI_H
00017 #define RBBI_H
00018
00019 #include "unicode/utypes.h"
00020
00021 #if U_SHOW_CPLUSPLUS_API
00022
00028 #if !UCONFIG_NO_BREAK_ITERATION
00029
00030 #include "unicode/brkiter.h"
00031 #include "unicode/udata.h"
00032 #include "unicode/parseerr.h"
00033 #include "unicode/schriter.h"
00034
00035 U_NAMESPACE_BEGIN
00036
00038 class LanguageBreakEngine;
00039 struct RBBIDataHeader;
00040 class RBBIDataWrapper;
00041 class UnhandledEngine;
00042 class UStack;
00043
00055 class U_COMMON_API RuleBasedBreakIterator : public BreakIterator {
00056
00057 private:
00062 UText fText;
00063
00064 #ifndef U_HIDE_INTERNAL_API
00065 public:
00066 #endif
00067
00072 RBBIDataWrapper *fData;
00073 private:
00074
00079 int32_t fPosition;
00080
00084 int32_t fRuleStatusIndex;
00085
00089 class BreakCache;
00090 BreakCache *fBreakCache;
00091
00096 class DictionaryCache;
00097 DictionaryCache *fDictionaryCache;
00098
00106 UStack *fLanguageBreakEngines;
00107
00115 UnhandledEngine *fUnhandledBreakEngine;
00116
00122 uint32_t fDictionaryCharCount;
00123
00129 CharacterIterator *fCharIter;
00130
00136 StringCharacterIterator fSCharIter;
00137
00141 UBool fDone;
00142
00143
00144
00145
00146
00157 RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status);
00158
00160 friend class RBBIRuleBuilder;
00162 friend class BreakIterator;
00163
00164 public:
00165
00170 RuleBasedBreakIterator();
00171
00178 RuleBasedBreakIterator(const RuleBasedBreakIterator& that);
00179
00188 RuleBasedBreakIterator( const UnicodeString &rules,
00189 UParseError &parseError,
00190 UErrorCode &status);
00191
00215 RuleBasedBreakIterator(const uint8_t *compiledRules,
00216 uint32_t ruleLength,
00217 UErrorCode &status);
00218
00231 RuleBasedBreakIterator(UDataMemory* image, UErrorCode &status);
00232
00237 virtual ~RuleBasedBreakIterator();
00238
00246 RuleBasedBreakIterator& operator=(const RuleBasedBreakIterator& that);
00247
00256 virtual UBool operator==(const BreakIterator& that) const;
00257
00265 inline UBool operator!=(const BreakIterator& that) const;
00266
00277 virtual RuleBasedBreakIterator* clone() const;
00278
00284 virtual int32_t hashCode(void) const;
00285
00291 virtual const UnicodeString& getRules(void) const;
00292
00293
00294
00295
00296
00322 virtual CharacterIterator& getText(void) const;
00323
00324
00339 virtual UText *getUText(UText *fillIn, UErrorCode &status) const;
00340
00348 virtual void adoptText(CharacterIterator* newText);
00349
00361 virtual void setText(const UnicodeString& newText);
00362
00376 virtual void setText(UText *text, UErrorCode &status);
00377
00383 virtual int32_t first(void);
00384
00390 virtual int32_t last(void);
00391
00402 virtual int32_t next(int32_t n);
00403
00409 virtual int32_t next(void);
00410
00416 virtual int32_t previous(void);
00417
00425 virtual int32_t following(int32_t offset);
00426
00434 virtual int32_t preceding(int32_t offset);
00435
00444 virtual UBool isBoundary(int32_t offset);
00445
00454 virtual int32_t current(void) const;
00455
00456
00488 virtual int32_t getRuleStatus() const;
00489
00513 virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status);
00514
00526 virtual UClassID getDynamicClassID(void) const;
00527
00539 static UClassID U_EXPORT2 getStaticClassID(void);
00540
00541 #ifndef U_FORCE_HIDE_DEPRECATED_API
00542
00568 virtual RuleBasedBreakIterator *createBufferClone(void *stackBuffer,
00569 int32_t &BufferSize,
00570 UErrorCode &status);
00571 #endif // U_FORCE_HIDE_DEPRECATED_API
00572
00590 virtual const uint8_t *getBinaryRules(uint32_t &length);
00591
00617 virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status);
00618
00619
00620 private:
00621
00622
00623
00629 void reset(void);
00630
00635 void init(UErrorCode &status);
00636
00646 int32_t handleSafePrevious(int32_t fromPosition);
00647
00660 int32_t handleNext();
00661
00662
00669 const LanguageBreakEngine *getLanguageBreakEngine(UChar32 c);
00670
00671 public:
00672 #ifndef U_HIDE_INTERNAL_API
00673
00677 void dumpCache();
00678
00683 void dumpTables();
00684
00685 #endif
00686 };
00687
00688
00689
00690
00691
00692
00693
00694 inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const {
00695 return !operator==(that);
00696 }
00697
00698 U_NAMESPACE_END
00699
00700 #endif
00701
00702 #endif
00703
00704 #endif