16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 1997-2013, International Business Machines
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File brkiter.h
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History:
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Date        Name        Description
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   02/18/97    aliu        Added typedef for TextCount.  Made DONE const.
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   05/07/97    aliu        Fixed DLL declaration.
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   07/09/97    jfitz       Renamed BreakIterator and interface synced with JDK
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   08/11/98    helena      Sync-up JDK1.2.
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   01/13/2000  helena      Added UErrorCode parameter to createXXXInstance methods.
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************************
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef BRKITER_H
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define BRKITER_H
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Break Iterator.
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if UCONFIG_NO_BREAK_ITERATION
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Allow the declaration of APIs with pointers to BreakIterator
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * even when break iteration is removed from the build.
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass BreakIterator;
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uobject.h"
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unistr.h"
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/chariter.h"
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/locid.h"
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ubrk.h"
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/strenum.h"
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utext.h"
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/umisc.h"
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The BreakIterator class implements methods for finding the location
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of boundaries in text. BreakIterator is an abstract base class.
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Instances of BreakIterator maintain a current position and scan over
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * text returning the index of characters where boundaries occur.
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Line boundary analysis determines where a text string can be broken
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * when line-wrapping. The mechanism correctly handles punctuation and
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * hyphenated words.
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sentence boundary analysis allows selection with correct
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * interpretation of periods within numbers and abbreviations, and
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * trailing punctuation marks such as quotation marks and parentheses.
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Word boundary analysis is used by search and replace functions, as
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * well as within text editing applications that allow the user to
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * select words with a double click. Word selection provides correct
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * interpretation of punctuation marks within and following
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * words. Characters that are not part of a word, such as symbols or
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * punctuation marks, have word-breaks on both sides.
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Character boundary analysis allows users to interact with
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters as they expect to, for example, when moving the cursor
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * through a text string. Character boundary analysis provides correct
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * navigation of through character strings, regardless of how the
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * character is stored.  For example, an accented character might be
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * stored as a base character and a diacritical mark. What users
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * consider to be a character can differ between languages.
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The text boundary positions are found according to the rules
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * described in Unicode Standard Annex #29, Text Boundaries, and
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode Standard Annex #14, Line Breaking Properties.  These
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are available at http://www.unicode.org/reports/tr14/ and
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * http://www.unicode.org/reports/tr29/.
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In addition to the C++ API defined in this header file, a
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * plain C API with equivalent functionality is defined in the
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * file ubrk.h
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Code snippets illustrating the use of the Break Iterator APIs
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are available in the ICU User Guide,
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * http://icu-project.org/userguide/boundaryAnalysis.html
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and in the sample program icu/source/samples/break/break.cpp
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_COMMON_API BreakIterator : public UObject {
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  destructor
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  @stable ICU 2.0
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~BreakIterator();
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return true if another object is semantically equal to this
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * one. The other object should be an instance of the same subclass of
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * BreakIterator. Objects of different subclasses are considered
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * unequal.
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return true if this BreakIterator is at the same position in the
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * same text, and is the same class and type (word, line, etc.) of
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * BreakIterator, as the argument.  Text is considered the same if
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * it contains the same characters, it need not be the same
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * object, and styles are not considered.
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UBool operator==(const BreakIterator&) const = 0;
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the complement of the result of operator==
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param rhs The BreakIterator to be compared for inequality
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the complement of the result of operator==
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); }
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return a polymorphic copy of this object.  This is an abstract
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * method which subclasses implement.
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual BreakIterator* clone(void) const = 0;
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return a polymorphic class ID for this object. Different subclasses
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * will return distinct unequal values.
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UClassID getDynamicClassID(void) const = 0;
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return a CharacterIterator over the text being analyzed.
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual CharacterIterator& getText(void) const = 0;
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *  Get a UText for the text being analyzed.
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *  The returned UText is a shallow clone of the UText used internally
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *  by the break iterator implementation.  It can safely be used to
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *  access the text without impacting any break iterator operations,
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *  but the underlying text itself must not be altered.
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      * @param fillIn A UText to be filled in.  If NULL, a new UText will be
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *           allocated to hold the result.
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      * @param status receives any error codes.
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      * @return   The current UText for this break iterator.  If an input
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      *           UText was provided, it will always be returned.
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      * @stable ICU 3.4
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      */
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     virtual UText *getUText(UText *fillIn, UErrorCode &status) const = 0;
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Change the text over which this operates. The text boundary is
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * reset to the start.
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text The UnicodeString used to change the text.
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void  setText(const UnicodeString &text) = 0;
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Reset the break iterator to operate over the text represented by
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the UText.  The iterator position is reset to the start.
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This function makes a shallow clone of the supplied UText.  This means
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * that the caller is free to immediately close or otherwise reuse the
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Utext that was passed as a parameter, but that the underlying text itself
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * must not be altered while being referenced by the break iterator.
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * All index positions returned by break iterator functions are
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * native indices from the UText. For example, when breaking UTF-8
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * encoded text, the break positions returned by next(), previous(), etc.
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * will be UTF-8 string indices, not UTF-16 positions.
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text The UText used to change the text.
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status receives any error codes.
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 3.4
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void  setText(UText *text, UErrorCode &status) = 0;
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Change the text over which this operates. The text boundary is
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * reset to the start.
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Note that setText(UText *) provides similar functionality to this function,
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * and is more efficient.
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param it The CharacterIterator used to change the text.
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void  adoptText(CharacterIterator* it) = 0;
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    enum {
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        /**
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         * DONE is returned by previous() and next() after all valid
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         * boundaries have been returned.
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         * @stable ICU 2.0
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         */
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        DONE = (int32_t)-1
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the iterator position to the index of the first character in the text being scanned.
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The index of the first character in the text being scanned.
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t first(void) = 0;
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the iterator position to the index immediately BEYOND the last character in the text being scanned.
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The index immediately BEYOND the last character in the text being scanned.
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t last(void) = 0;
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the iterator position to the boundary preceding the current boundary.
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The character index of the previous text boundary or DONE if all
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * boundaries have been returned.
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t previous(void) = 0;
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Advance the iterator to the boundary following the current boundary.
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The character index of the next text boundary or DONE if all
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * boundaries have been returned.
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t next(void) = 0;
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return character index of the current interator position within the text.
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The boundary most recently returned.
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t current(void) const = 0;
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Advance the iterator to the first boundary following the specified offset.
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The value returned is always greater than the offset or
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the value BreakIterator.DONE
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param offset the offset to begin scanning.
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The first boundary after the specified offset.
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t following(int32_t offset) = 0;
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the iterator position to the first boundary preceding the specified offset.
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The value returned is always smaller than the offset or
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the value BreakIterator.DONE
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param offset the offset to begin scanning.
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The first boundary before the specified offset.
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t preceding(int32_t offset) = 0;
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return true if the specfied position is a boundary position.
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * As a side effect, the current position of the iterator is set
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * to the first boundary position at or following the specified offset.
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param offset the offset to check.
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return True if "offset" is a boundary position.
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UBool isBoundary(int32_t offset) = 0;
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the iterator position to the nth boundary from the current boundary
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param n the number of boundaries to move by.  A value of 0
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * does nothing.  Negative values move to previous boundaries
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * and positive values move to later boundaries.
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The new iterator position, or
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * DONE if there are fewer than |n| boundaries in the specfied direction.
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t next(int32_t n) = 0;
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   /**
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * For RuleBasedBreakIterators, return the status tag from the
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * break rule that determined the most recently
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * returned break position.
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <p>
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * For break iterator types that do not support a rule status,
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * a default value of 0 is returned.
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <p>
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the status from the break rule that determined the most recently
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *         returned break position.
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @see RuleBaseBreakIterator::getRuleStatus()
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @see UWordBreak
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @draft ICU 52
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t getRuleStatus() const;
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   /**
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * For RuleBasedBreakIterators, get the status (tag) values from the break rule(s)
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * that determined the most recently returned break position.
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * <p>
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * For break iterator types that do not support rule status,
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * no values are returned.
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * <p>
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * The returned status value(s) are stored into an array provided by the caller.
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * The values are stored in sorted (ascending) order.
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * If the capacity of the output array is insufficient to hold the data,
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *  the output will be truncated to the available length, and a
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *  U_BUFFER_OVERFLOW_ERROR will be signaled.
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * <p>
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @see RuleBaseBreakIterator::getRuleStatusVec
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @param fillInVec an array to be filled in with the status values.
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @param capacity  the length of the supplied vector.  A length of zero causes
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *                  the function to return the number of status values, in the
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *                  normal way, without attemtping to store any values.
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @param status    receives error codes.
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @return          The number of rule status values from rules that determined
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *                  the most recent boundary returned by the break iterator.
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *                  In the event of a U_BUFFER_OVERFLOW_ERROR, the return value
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *                  is the total number of status values that were available,
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *                  not the reduced number that were actually returned.
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @see getRuleStatus
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @draft ICU 52
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    */
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status);
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create BreakIterator for word-breaks using the given locale.
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns an instance of a BreakIterator implementing word breaks.
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * WordBreak is useful for word selection (ex. double click)
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param where the locale.
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status the error code
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return A BreakIterator for word-breaks.  The UErrorCode& status
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * parameter is used to return status information to the user.
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * To check whether the construction succeeded or not, you should check
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the value of U_SUCCESS(err).  If you wish more detailed information, you
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * can check for informational error results which still indicate success.
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * U_USING_FALLBACK_WARNING indicates that a fall back locale was used.  For
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, 'de_CH' was requested, but nothing was found there, so 'de' was
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used.  U_USING_DEFAULT_WARNING indicates that the default locale data was
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used; neither the requested locale nor any of its fall back locales
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * could be found.
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The caller owns the returned object and is responsible for deleting it.
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* U_EXPORT2
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    createWordInstance(const Locale& where, UErrorCode& status);
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create BreakIterator for line-breaks using specified locale.
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns an instance of a BreakIterator implementing line breaks. Line
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * breaks are logically possible line breaks, actual line breaks are
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * usually determined based on display width.
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * LineBreak is useful for word wrapping text.
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param where the locale.
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status The error code.
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return A BreakIterator for line-breaks.  The UErrorCode& status
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * parameter is used to return status information to the user.
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * To check whether the construction succeeded or not, you should check
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the value of U_SUCCESS(err).  If you wish more detailed information, you
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * can check for informational error results which still indicate success.
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * U_USING_FALLBACK_WARNING indicates that a fall back locale was used.  For
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, 'de_CH' was requested, but nothing was found there, so 'de' was
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used.  U_USING_DEFAULT_WARNING indicates that the default locale data was
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used; neither the requested locale nor any of its fall back locales
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * could be found.
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The caller owns the returned object and is responsible for deleting it.
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* U_EXPORT2
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    createLineInstance(const Locale& where, UErrorCode& status);
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create BreakIterator for character-breaks using specified locale
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns an instance of a BreakIterator implementing character breaks.
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Character breaks are boundaries of combining character sequences.
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param where the locale.
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status The error code.
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return A BreakIterator for character-breaks.  The UErrorCode& status
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * parameter is used to return status information to the user.
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * To check whether the construction succeeded or not, you should check
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the value of U_SUCCESS(err).  If you wish more detailed information, you
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * can check for informational error results which still indicate success.
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * U_USING_FALLBACK_WARNING indicates that a fall back locale was used.  For
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, 'de_CH' was requested, but nothing was found there, so 'de' was
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used.  U_USING_DEFAULT_WARNING indicates that the default locale data was
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used; neither the requested locale nor any of its fall back locales
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * could be found.
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The caller owns the returned object and is responsible for deleting it.
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* U_EXPORT2
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    createCharacterInstance(const Locale& where, UErrorCode& status);
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create BreakIterator for sentence-breaks using specified locale
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns an instance of a BreakIterator implementing sentence breaks.
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param where the locale.
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status The error code.
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return A BreakIterator for sentence-breaks.  The UErrorCode& status
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * parameter is used to return status information to the user.
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * To check whether the construction succeeded or not, you should check
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the value of U_SUCCESS(err).  If you wish more detailed information, you
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * can check for informational error results which still indicate success.
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * U_USING_FALLBACK_WARNING indicates that a fall back locale was used.  For
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, 'de_CH' was requested, but nothing was found there, so 'de' was
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used.  U_USING_DEFAULT_WARNING indicates that the default locale data was
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used; neither the requested locale nor any of its fall back locales
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * could be found.
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The caller owns the returned object and is responsible for deleting it.
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* U_EXPORT2
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    createSentenceInstance(const Locale& where, UErrorCode& status);
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create BreakIterator for title-casing breaks using the specified locale
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns an instance of a BreakIterator implementing title breaks.
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The iterator returned locates title boundaries as described for
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * please use Word Boundary iterator.{@link #createWordInstance }
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param where the locale.
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status The error code.
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return A BreakIterator for title-breaks.  The UErrorCode& status
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * parameter is used to return status information to the user.
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * To check whether the construction succeeded or not, you should check
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the value of U_SUCCESS(err).  If you wish more detailed information, you
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * can check for informational error results which still indicate success.
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * U_USING_FALLBACK_WARNING indicates that a fall back locale was used.  For
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, 'de_CH' was requested, but nothing was found there, so 'de' was
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used.  U_USING_DEFAULT_WARNING indicates that the default locale data was
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used; neither the requested locale nor any of its fall back locales
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * could be found.
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The caller owns the returned object and is responsible for deleting it.
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.1
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* U_EXPORT2
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    createTitleInstance(const Locale& where, UErrorCode& status);
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get the set of Locales for which TextBoundaries are installed.
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <p><b>Note:</b> this will not return locales added through the register
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * call. To see the registered locales too, use the getAvailableLocales
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * function that returns a StringEnumeration object </p>
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param count the output parameter of number of elements in the locale list
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return available locales
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get name of the object for the desired Locale, in the desired langauge.
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param objectLocale must be from getAvailableLocales.
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param displayLocale specifies the desired locale for output.
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param name the fill-in parameter of the return value
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Uses best match.
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return user-displayable name
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                         const Locale& displayLocale,
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                         UnicodeString& name);
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get name of the object for the desired Locale, in the langauge of the
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * default locale.
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param objectLocale must be from getMatchingLocales
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param name the fill-in parameter of the return value
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return user-displayable name
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                         UnicodeString& name);
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Deprecated functionality. Use clone() instead.
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Thread safe client-buffer-based cloning operation
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *    Do NOT call delete on a safeclone, since 'new' is not used to create it.
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param stackBuffer user allocated space for the new clone. If NULL new memory will be allocated.
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * If buffer is not large enough, new memory will be allocated.
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param BufferSize reference to size of allocated space.
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * If BufferSize == 0, a sufficient size for use in cloning will
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * be returned ('pre-flighting')
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * If BufferSize is not enough for a stack-based safe clone,
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * new memory will be allocated.
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status to indicate whether the operation went on smoothly or there were errors
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  necessary.
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return pointer to the new clone
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @deprecated ICU 52. Use clone() instead.
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual BreakIterator *  createBufferClone(void *stackBuffer,
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                               int32_t &BufferSize,
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                               UErrorCode &status) = 0;
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DEPRECATED_API
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   Determine whether the BreakIterator was created in user memory by
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   createBufferClone(), and thus should not be deleted.  Such objects
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   must be closed by an explicit call to the destructor (not delete).
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @deprecated ICU 52. Always delete the BreakIterator.
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    inline UBool isBufferClone(void);
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DEPRECATED_API */
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_SERVICE
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Register a new break iterator of the indicated kind, to use in the given locale.
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The break iterator will be adopted.  Clones of the iterator will be returned
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * if a request for a break iterator of the given kind matches or falls back to
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * this locale.
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param toAdopt the BreakIterator instance to be adopted
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale the Locale for which this instance is to be registered
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param kind the type of iterator for which this instance is to be registered
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status the in/out status code, no special meanings are assigned
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return a registry key that can be used to unregister this instance
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.4
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static URegistryKey U_EXPORT2 registerInstance(BreakIterator* toAdopt,
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                        const Locale& locale,
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                        UBreakIteratorType kind,
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                        UErrorCode& status);
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Unregister a previously-registered BreakIterator using the key returned from the
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * register call.  Key becomes invalid after a successful call and should not be used again.
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The BreakIterator corresponding to the key will be deleted.
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param key the registry key returned by a previous call to registerInstance
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status the in/out status code, no special meanings are assigned
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return TRUE if the iterator for the key was successfully unregistered
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.4
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return a StringEnumeration over the locales available at the time of the call,
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * including registered locales.
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return a StringEnumeration over the locales available at the time of the call
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.4
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the locale for this break iterator. Two flavors are available: valid and
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * actual locale.
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.8
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** Get the locale for this break iterator object. You can choose between valid and actual locale.
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  @param type type of the locale we're looking for (valid or actual)
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  @param status error code for the operation
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  @return the locale
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  @internal
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char *getLocaleID(ULocDataLocaleType type, UErrorCode& status) const;
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_INTERNAL_API */
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  Set the subject text string upon which the break iterator is operating
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  without changing any other aspect of the matching state.
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  The new and previous text strings must have the same content.
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  This function is intended for use in environments where ICU is operating on
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  strings that may move around in memory.  It provides a mechanism for notifying
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  ICU that the string has been relocated, and providing a new UText to access the
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  string in its new position.
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  Note that the break iterator implementation never copies the underlying text
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  of a string being processed, but always operates directly on the original text
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  provided by the user. Refreshing simply drops the references to the old text
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  and replaces them with references to the new.
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  Caution:  this function is normally used only by very specialized,
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  system-level code.  One example use case is with garbage collection that moves
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *  the text in memory.
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param input      The new (moved) text string.
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status     Receives errors detected by this function.
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return           *this
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 49
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual BreakIterator &refreshInputText(UText *input, UErrorCode &status) = 0;
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private:
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode& status);
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* createInstance(const Locale& loc, int32_t kind, UErrorCode& status);
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status);
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    friend class ICUBreakIteratorFactory;
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    friend class ICUBreakIteratorService;
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected:
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Do not enclose protected default/copy constructors with #ifndef U_HIDE_INTERNAL_API
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // or else the compiler will create a public ones.
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @internal */
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    BreakIterator();
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @internal */
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    BreakIterator (const BreakIterator &other) : UObject(other) {}
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @internal */
6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char actualLocale[ULOC_FULLNAME_CAPACITY];
6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char validLocale[ULOC_FULLNAME_CAPACITY];
6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The assignment operator has no real implementation.
6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * It's provided to make the compiler happy. Do not call.
6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    BreakIterator& operator=(const BreakIterator&);
6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DEPRECATED_API
6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool BreakIterator::isBufferClone()
6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return FALSE;
6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DEPRECATED_API */
6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // _BRKITER
6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
649