00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef BRKITER_H
00021 #define BRKITER_H
00022
00023 #include "unicode/utypes.h"
00024
00025 #if UCONFIG_NO_BREAK_ITERATION
00026
00027 U_NAMESPACE_BEGIN
00028
00029
00030
00031
00032
00033 class BreakIterator;
00034
00035 U_NAMESPACE_END
00036
00037 #else
00038
00039 #include "unicode/uobject.h"
00040 #include "unicode/unistr.h"
00041 #include "unicode/chariter.h"
00042 #include "unicode/locid.h"
00043 #include "unicode/ubrk.h"
00044 #include "unicode/strenum.h"
00045
00046 U_NAMESPACE_BEGIN
00047
00048 typedef const void* URegistryKey;
00049
00199 class U_COMMON_API BreakIterator : public UObject {
00200 public:
00205 virtual ~BreakIterator();
00206
00220 virtual UBool operator==(const BreakIterator&) const = 0;
00221
00228 UBool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); }
00229
00235 virtual BreakIterator* clone(void) const = 0;
00236
00242 virtual UClassID getDynamicClassID(void) const = 0;
00243
00250 virtual const CharacterIterator& getText(void) const = 0;
00251
00258 virtual void setText(const UnicodeString &text) = 0;
00259
00266 virtual void adoptText(CharacterIterator* it) = 0;
00267
00273 static const int32_t DONE;
00274
00279 virtual int32_t first(void) = 0;
00280
00285 virtual int32_t last(void) = 0;
00286
00293 virtual int32_t previous(void) = 0;
00294
00301 virtual int32_t next(void) = 0;
00302
00308 virtual int32_t current(void) const = 0;
00309
00318 virtual int32_t following(int32_t offset) = 0;
00319
00328 virtual int32_t preceding(int32_t offset) = 0;
00329
00338 virtual UBool isBoundary(int32_t offset) = 0;
00339
00349 virtual int32_t next(int32_t n) = 0;
00350
00370 static BreakIterator* createWordInstance(const Locale& where,
00371 UErrorCode& status);
00372
00394 static BreakIterator* createLineInstance(const Locale& where,
00395 UErrorCode& status);
00396
00416 static BreakIterator* createCharacterInstance(const Locale& where,
00417 UErrorCode& status);
00418
00437 static BreakIterator* createSentenceInstance(const Locale& where,
00438 UErrorCode& status);
00439
00458 static BreakIterator* createTitleInstance(const Locale& where,
00459 UErrorCode& status);
00460
00469 static const Locale* getAvailableLocales(int32_t& count);
00470
00480 static UnicodeString& getDisplayName(const Locale& objectLocale,
00481 const Locale& displayLocale,
00482 UnicodeString& name);
00483
00492 static UnicodeString& getDisplayName(const Locale& objectLocale,
00493 UnicodeString& name);
00494
00512 virtual BreakIterator * createBufferClone(void *stackBuffer,
00513 int32_t &BufferSize,
00514 UErrorCode &status) = 0;
00515
00522 inline UBool isBufferClone(void);
00523
00536 static URegistryKey registerInstance(BreakIterator* toAdopt, const Locale& locale, UBreakIteratorType kind, UErrorCode& status);
00537
00547 static UBool unregister(URegistryKey key, UErrorCode& status);
00548
00555 static StringEnumeration* getAvailableLocales(void);
00556
00557 private:
00558 static BreakIterator* makeCharacterInstance(const Locale& loc, UErrorCode& status);
00559 static BreakIterator* makeWordInstance(const Locale& loc, UErrorCode& status);
00560 static BreakIterator* makeLineInstance(const Locale& loc, UErrorCode& status);
00561 static BreakIterator* makeSentenceInstance(const Locale& loc, UErrorCode& status);
00562 static BreakIterator* makeTitleInstance(const Locale& loc, UErrorCode& status);
00563
00564 static BreakIterator* createInstance(const Locale& loc, UBreakIteratorType kind, UErrorCode& status);
00565 static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status);
00566
00567 friend class ICUBreakIteratorFactory;
00568 friend class ICUBreakIteratorService;
00569
00570 protected:
00572 BreakIterator();
00574 UBool fBufferClone;
00576 BreakIterator (const BreakIterator &other) : UObject(other), fBufferClone(FALSE) {}
00577 private:
00582 BreakIterator& operator=(const BreakIterator&) { return *this; }
00583 };
00584
00585 inline UBool BreakIterator::isBufferClone()
00586 {
00587 return fBufferClone;
00588 }
00589
00590 U_NAMESPACE_END
00591
00592 #endif
00593
00594 #endif // _BRKITER
00595
00596