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 #if !UCONFIG_NO_SERVICE
00049
00053 typedef const void* URegistryKey;
00054 #endif
00055
00205 class U_COMMON_API BreakIterator : public UObject {
00206 public:
00211 virtual ~BreakIterator();
00212
00226 virtual UBool operator==(const BreakIterator&) const = 0;
00227
00234 UBool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); }
00235
00241 virtual BreakIterator* clone(void) const = 0;
00242
00248 virtual UClassID getDynamicClassID(void) const = 0;
00249
00256 virtual const CharacterIterator& getText(void) const = 0;
00257
00264 virtual void setText(const UnicodeString &text) = 0;
00265
00272 virtual void adoptText(CharacterIterator* it) = 0;
00273
00279 #ifdef U_CYGWIN
00280 static U_COMMON_API const int32_t DONE;
00281 #else
00282 static const int32_t DONE;
00283 #endif
00284
00289 virtual int32_t first(void) = 0;
00290
00295 virtual int32_t last(void) = 0;
00296
00303 virtual int32_t previous(void) = 0;
00304
00311 virtual int32_t next(void) = 0;
00312
00318 virtual int32_t current(void) const = 0;
00319
00328 virtual int32_t following(int32_t offset) = 0;
00329
00338 virtual int32_t preceding(int32_t offset) = 0;
00339
00348 virtual UBool isBoundary(int32_t offset) = 0;
00349
00359 virtual int32_t next(int32_t n) = 0;
00360
00380 static BreakIterator* U_EXPORT2
00381 createWordInstance(const Locale& where, UErrorCode& status);
00382
00404 static BreakIterator* U_EXPORT2
00405 createLineInstance(const Locale& where, UErrorCode& status);
00406
00426 static BreakIterator* U_EXPORT2
00427 createCharacterInstance(const Locale& where, UErrorCode& status);
00428
00447 static BreakIterator* U_EXPORT2
00448 createSentenceInstance(const Locale& where, UErrorCode& status);
00449
00472 static BreakIterator* U_EXPORT2
00473 createTitleInstance(const Locale& where, UErrorCode& status);
00474
00484 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00485
00495 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00496 const Locale& displayLocale,
00497 UnicodeString& name);
00498
00507 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
00508 UnicodeString& name);
00509
00527 virtual BreakIterator * createBufferClone(void *stackBuffer,
00528 int32_t &BufferSize,
00529 UErrorCode &status) = 0;
00530
00537 inline UBool isBufferClone(void);
00538
00539 #if !UCONFIG_NO_SERVICE
00540
00552 static URegistryKey U_EXPORT2 registerInstance(BreakIterator* toAdopt,
00553 const Locale& locale,
00554 UBreakIteratorType kind,
00555 UErrorCode& status);
00556
00566 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00567
00574 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00575 #endif
00576
00582 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00583
00590 const char *getLocaleID(ULocDataLocaleType type, UErrorCode& status) const;
00591
00592 private:
00593 static BreakIterator* buildInstance(const Locale& loc, const char *type, UBool dict, UErrorCode& status);
00594 static BreakIterator* createInstance(const Locale& loc, UBreakIteratorType kind, UErrorCode& status);
00595 static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status);
00596
00597 friend class ICUBreakIteratorFactory;
00598 friend class ICUBreakIteratorService;
00599
00600 protected:
00602 BreakIterator();
00604 UBool fBufferClone;
00606 BreakIterator (const BreakIterator &other) : UObject(other), fBufferClone(FALSE) {}
00607
00608 private:
00609
00611 char actualLocale[ULOC_FULLNAME_CAPACITY];
00612 char validLocale[ULOC_FULLNAME_CAPACITY];
00613
00618 BreakIterator& operator=(const BreakIterator&) { return *this; }
00619 };
00620
00621 inline UBool BreakIterator::isBufferClone()
00622 {
00623 return fBufferClone;
00624 }
00625
00626 U_NAMESPACE_END
00627
00628 #endif
00629
00630 #endif // _BRKITER
00631
00632