]> git.saurik.com Git - apple/icu.git/blob - icuSources/common/unicode/brkiter.h
ICU-62109.0.1.tar.gz
[apple/icu.git] / icuSources / common / unicode / brkiter.h
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 ********************************************************************************
5 * Copyright (C) 1997-2016, International Business Machines
6 * Corporation and others. All Rights Reserved.
7 ********************************************************************************
8 *
9 * File brkiter.h
10 *
11 * Modification History:
12 *
13 * Date Name Description
14 * 02/18/97 aliu Added typedef for TextCount. Made DONE const.
15 * 05/07/97 aliu Fixed DLL declaration.
16 * 07/09/97 jfitz Renamed BreakIterator and interface synced with JDK
17 * 08/11/98 helena Sync-up JDK1.2.
18 * 01/13/2000 helena Added UErrorCode parameter to createXXXInstance methods.
19 ********************************************************************************
20 */
21
22 #ifndef BRKITER_H
23 #define BRKITER_H
24
25 #include "unicode/utypes.h"
26
27 /**
28 * \file
29 * \brief C++ API: Break Iterator.
30 */
31
32 #if UCONFIG_NO_BREAK_ITERATION
33
34 #if U_SHOW_CPLUSPLUS_API
35 U_NAMESPACE_BEGIN
36
37 /*
38 * Allow the declaration of APIs with pointers to BreakIterator
39 * even when break iteration is removed from the build.
40 */
41 class BreakIterator;
42
43 U_NAMESPACE_END
44 #endif // U_SHOW_CPLUSPLUS_API
45
46 #else
47
48 #include "unicode/uobject.h"
49 #include "unicode/unistr.h"
50 #include "unicode/chariter.h"
51 #include "unicode/locid.h"
52 #include "unicode/ubrk.h"
53 #include "unicode/strenum.h"
54 #include "unicode/utext.h"
55 #include "unicode/umisc.h"
56
57 #if U_SHOW_CPLUSPLUS_API
58 U_NAMESPACE_BEGIN
59
60 /**
61 * The BreakIterator class implements methods for finding the location
62 * of boundaries in text. BreakIterator is an abstract base class.
63 * Instances of BreakIterator maintain a current position and scan over
64 * text returning the index of characters where boundaries occur.
65 * <p>
66 * Line boundary analysis determines where a text string can be broken
67 * when line-wrapping. The mechanism correctly handles punctuation and
68 * hyphenated words.
69 * <p>
70 * Sentence boundary analysis allows selection with correct
71 * interpretation of periods within numbers and abbreviations, and
72 * trailing punctuation marks such as quotation marks and parentheses.
73 * <p>
74 * Word boundary analysis is used by search and replace functions, as
75 * well as within text editing applications that allow the user to
76 * select words with a double click. Word selection provides correct
77 * interpretation of punctuation marks within and following
78 * words. Characters that are not part of a word, such as symbols or
79 * punctuation marks, have word-breaks on both sides.
80 * <p>
81 * Character boundary analysis allows users to interact with
82 * characters as they expect to, for example, when moving the cursor
83 * through a text string. Character boundary analysis provides correct
84 * navigation of through character strings, regardless of how the
85 * character is stored. For example, an accented character might be
86 * stored as a base character and a diacritical mark. What users
87 * consider to be a character can differ between languages.
88 * <p>
89 * The text boundary positions are found according to the rules
90 * described in Unicode Standard Annex #29, Text Boundaries, and
91 * Unicode Standard Annex #14, Line Breaking Properties. These
92 * are available at http://www.unicode.org/reports/tr14/ and
93 * http://www.unicode.org/reports/tr29/.
94 * <p>
95 * In addition to the C++ API defined in this header file, a
96 * plain C API with equivalent functionality is defined in the
97 * file ubrk.h
98 * <p>
99 * Code snippets illustrating the use of the Break Iterator APIs
100 * are available in the ICU User Guide,
101 * http://icu-project.org/userguide/boundaryAnalysis.html
102 * and in the sample program icu/source/samples/break/break.cpp
103 *
104 */
105 class U_COMMON_API BreakIterator : public UObject {
106 public:
107 /**
108 * destructor
109 * @stable ICU 2.0
110 */
111 virtual ~BreakIterator();
112
113 /**
114 * Return true if another object is semantically equal to this
115 * one. The other object should be an instance of the same subclass of
116 * BreakIterator. Objects of different subclasses are considered
117 * unequal.
118 * <P>
119 * Return true if this BreakIterator is at the same position in the
120 * same text, and is the same class and type (word, line, etc.) of
121 * BreakIterator, as the argument. Text is considered the same if
122 * it contains the same characters, it need not be the same
123 * object, and styles are not considered.
124 * @stable ICU 2.0
125 */
126 virtual UBool operator==(const BreakIterator&) const = 0;
127
128 /**
129 * Returns the complement of the result of operator==
130 * @param rhs The BreakIterator to be compared for inequality
131 * @return the complement of the result of operator==
132 * @stable ICU 2.0
133 */
134 UBool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); }
135
136 /**
137 * Return a polymorphic copy of this object. This is an abstract
138 * method which subclasses implement.
139 * @stable ICU 2.0
140 */
141 virtual BreakIterator* clone(void) const = 0;
142
143 /**
144 * Return a polymorphic class ID for this object. Different subclasses
145 * will return distinct unequal values.
146 * @stable ICU 2.0
147 */
148 virtual UClassID getDynamicClassID(void) const = 0;
149
150 /**
151 * Return a CharacterIterator over the text being analyzed.
152 * @stable ICU 2.0
153 */
154 virtual CharacterIterator& getText(void) const = 0;
155
156
157 /**
158 * Get a UText for the text being analyzed.
159 * The returned UText is a shallow clone of the UText used internally
160 * by the break iterator implementation. It can safely be used to
161 * access the text without impacting any break iterator operations,
162 * but the underlying text itself must not be altered.
163 *
164 * @param fillIn A UText to be filled in. If NULL, a new UText will be
165 * allocated to hold the result.
166 * @param status receives any error codes.
167 * @return The current UText for this break iterator. If an input
168 * UText was provided, it will always be returned.
169 * @stable ICU 3.4
170 */
171 virtual UText *getUText(UText *fillIn, UErrorCode &status) const = 0;
172
173 /**
174 * Change the text over which this operates. The text boundary is
175 * reset to the start.
176 *
177 * The BreakIterator will retain a reference to the supplied string.
178 * The caller must not modify or delete the text while the BreakIterator
179 * retains the reference.
180 *
181 * @param text The UnicodeString used to change the text.
182 * @stable ICU 2.0
183 */
184 virtual void setText(const UnicodeString &text) = 0;
185
186 /**
187 * Reset the break iterator to operate over the text represented by
188 * the UText. The iterator position is reset to the start.
189 *
190 * This function makes a shallow clone of the supplied UText. This means
191 * that the caller is free to immediately close or otherwise reuse the
192 * Utext that was passed as a parameter, but that the underlying text itself
193 * must not be altered while being referenced by the break iterator.
194 *
195 * All index positions returned by break iterator functions are
196 * native indices from the UText. For example, when breaking UTF-8
197 * encoded text, the break positions returned by next(), previous(), etc.
198 * will be UTF-8 string indices, not UTF-16 positions.
199 *
200 * @param text The UText used to change the text.
201 * @param status receives any error codes.
202 * @stable ICU 3.4
203 */
204 virtual void setText(UText *text, UErrorCode &status) = 0;
205
206 /**
207 * Change the text over which this operates. The text boundary is
208 * reset to the start.
209 * Note that setText(UText *) provides similar functionality to this function,
210 * and is more efficient.
211 * @param it The CharacterIterator used to change the text.
212 * @stable ICU 2.0
213 */
214 virtual void adoptText(CharacterIterator* it) = 0;
215
216 enum {
217 /**
218 * DONE is returned by previous() and next() after all valid
219 * boundaries have been returned.
220 * @stable ICU 2.0
221 */
222 DONE = (int32_t)-1
223 };
224
225 /**
226 * Sets the current iteration position to the beginning of the text, position zero.
227 * @return The offset of the beginning of the text, zero.
228 * @stable ICU 2.0
229 */
230 virtual int32_t first(void) = 0;
231
232 /**
233 * Set the iterator position to the index immediately BEYOND the last character in the text being scanned.
234 * @return The index immediately BEYOND the last character in the text being scanned.
235 * @stable ICU 2.0
236 */
237 virtual int32_t last(void) = 0;
238
239 /**
240 * Set the iterator position to the boundary preceding the current boundary.
241 * @return The character index of the previous text boundary or DONE if all
242 * boundaries have been returned.
243 * @stable ICU 2.0
244 */
245 virtual int32_t previous(void) = 0;
246
247 /**
248 * Advance the iterator to the boundary following the current boundary.
249 * @return The character index of the next text boundary or DONE if all
250 * boundaries have been returned.
251 * @stable ICU 2.0
252 */
253 virtual int32_t next(void) = 0;
254
255 /**
256 * Return character index of the current iterator position within the text.
257 * @return The boundary most recently returned.
258 * @stable ICU 2.0
259 */
260 virtual int32_t current(void) const = 0;
261
262 /**
263 * Advance the iterator to the first boundary following the specified offset.
264 * The value returned is always greater than the offset or
265 * the value BreakIterator.DONE
266 * @param offset the offset to begin scanning.
267 * @return The first boundary after the specified offset.
268 * @stable ICU 2.0
269 */
270 virtual int32_t following(int32_t offset) = 0;
271
272 /**
273 * Set the iterator position to the first boundary preceding the specified offset.
274 * The value returned is always smaller than the offset or
275 * the value BreakIterator.DONE
276 * @param offset the offset to begin scanning.
277 * @return The first boundary before the specified offset.
278 * @stable ICU 2.0
279 */
280 virtual int32_t preceding(int32_t offset) = 0;
281
282 /**
283 * Return true if the specified position is a boundary position.
284 * As a side effect, the current position of the iterator is set
285 * to the first boundary position at or following the specified offset.
286 * @param offset the offset to check.
287 * @return True if "offset" is a boundary position.
288 * @stable ICU 2.0
289 */
290 virtual UBool isBoundary(int32_t offset) = 0;
291
292 /**
293 * Set the iterator position to the nth boundary from the current boundary
294 * @param n the number of boundaries to move by. A value of 0
295 * does nothing. Negative values move to previous boundaries
296 * and positive values move to later boundaries.
297 * @return The new iterator position, or
298 * DONE if there are fewer than |n| boundaries in the specified direction.
299 * @stable ICU 2.0
300 */
301 virtual int32_t next(int32_t n) = 0;
302
303 /**
304 * For RuleBasedBreakIterators, return the status tag from the break rule
305 * that determined the boundary at the current iteration position.
306 * <p>
307 * For break iterator types that do not support a rule status,
308 * a default value of 0 is returned.
309 * <p>
310 * @return the status from the break rule that determined the boundary at
311 * the current iteration position.
312 * @see RuleBaseBreakIterator::getRuleStatus()
313 * @see UWordBreak
314 * @stable ICU 52
315 */
316 virtual int32_t getRuleStatus() const;
317
318 /**
319 * For RuleBasedBreakIterators, get the status (tag) values from the break rule(s)
320 * that determined the boundary at the current iteration position.
321 * <p>
322 * For break iterator types that do not support rule status,
323 * no values are returned.
324 * <p>
325 * The returned status value(s) are stored into an array provided by the caller.
326 * The values are stored in sorted (ascending) order.
327 * If the capacity of the output array is insufficient to hold the data,
328 * the output will be truncated to the available length, and a
329 * U_BUFFER_OVERFLOW_ERROR will be signaled.
330 * <p>
331 * @see RuleBaseBreakIterator::getRuleStatusVec
332 *
333 * @param fillInVec an array to be filled in with the status values.
334 * @param capacity the length of the supplied vector. A length of zero causes
335 * the function to return the number of status values, in the
336 * normal way, without attempting to store any values.
337 * @param status receives error codes.
338 * @return The number of rule status values from rules that determined
339 * the boundary at the current iteration position.
340 * In the event of a U_BUFFER_OVERFLOW_ERROR, the return value
341 * is the total number of status values that were available,
342 * not the reduced number that were actually returned.
343 * @see getRuleStatus
344 * @stable ICU 52
345 */
346 virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status);
347
348 /**
349 * Create BreakIterator for word-breaks using the given locale.
350 * Returns an instance of a BreakIterator implementing word breaks.
351 * WordBreak is useful for word selection (ex. double click)
352 * @param where the locale.
353 * @param status the error code
354 * @return A BreakIterator for word-breaks. The UErrorCode& status
355 * parameter is used to return status information to the user.
356 * To check whether the construction succeeded or not, you should check
357 * the value of U_SUCCESS(err). If you wish more detailed information, you
358 * can check for informational error results which still indicate success.
359 * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
360 * example, 'de_CH' was requested, but nothing was found there, so 'de' was
361 * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
362 * used; neither the requested locale nor any of its fall back locales
363 * could be found.
364 * The caller owns the returned object and is responsible for deleting it.
365 * @stable ICU 2.0
366 */
367 static BreakIterator* U_EXPORT2
368 createWordInstance(const Locale& where, UErrorCode& status);
369
370 /**
371 * Create BreakIterator for line-breaks using specified locale.
372 * Returns an instance of a BreakIterator implementing line breaks. Line
373 * breaks are logically possible line breaks, actual line breaks are
374 * usually determined based on display width.
375 * LineBreak is useful for word wrapping text.
376 * @param where the locale.
377 * @param status The error code.
378 * @return A BreakIterator for line-breaks. The UErrorCode& status
379 * parameter is used to return status information to the user.
380 * To check whether the construction succeeded or not, you should check
381 * the value of U_SUCCESS(err). If you wish more detailed information, you
382 * can check for informational error results which still indicate success.
383 * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
384 * example, 'de_CH' was requested, but nothing was found there, so 'de' was
385 * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
386 * used; neither the requested locale nor any of its fall back locales
387 * could be found.
388 * The caller owns the returned object and is responsible for deleting it.
389 * @stable ICU 2.0
390 */
391 static BreakIterator* U_EXPORT2
392 createLineInstance(const Locale& where, UErrorCode& status);
393
394 /**
395 * Create BreakIterator for character-breaks using specified locale
396 * Returns an instance of a BreakIterator implementing character breaks.
397 * Character breaks are boundaries of combining character sequences.
398 * @param where the locale.
399 * @param status The error code.
400 * @return A BreakIterator for character-breaks. The UErrorCode& status
401 * parameter is used to return status information to the user.
402 * To check whether the construction succeeded or not, you should check
403 * the value of U_SUCCESS(err). If you wish more detailed information, you
404 * can check for informational error results which still indicate success.
405 * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
406 * example, 'de_CH' was requested, but nothing was found there, so 'de' was
407 * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
408 * used; neither the requested locale nor any of its fall back locales
409 * could be found.
410 * The caller owns the returned object and is responsible for deleting it.
411 * @stable ICU 2.0
412 */
413 static BreakIterator* U_EXPORT2
414 createCharacterInstance(const Locale& where, UErrorCode& status);
415
416 /**
417 * Create BreakIterator for sentence-breaks using specified locale
418 * Returns an instance of a BreakIterator implementing sentence breaks.
419 * @param where the locale.
420 * @param status The error code.
421 * @return A BreakIterator for sentence-breaks. The UErrorCode& status
422 * parameter is used to return status information to the user.
423 * To check whether the construction succeeded or not, you should check
424 * the value of U_SUCCESS(err). If you wish more detailed information, you
425 * can check for informational error results which still indicate success.
426 * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
427 * example, 'de_CH' was requested, but nothing was found there, so 'de' was
428 * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
429 * used; neither the requested locale nor any of its fall back locales
430 * could be found.
431 * The caller owns the returned object and is responsible for deleting it.
432 * @stable ICU 2.0
433 */
434 static BreakIterator* U_EXPORT2
435 createSentenceInstance(const Locale& where, UErrorCode& status);
436
437 /**
438 * Create BreakIterator for title-casing breaks using the specified locale
439 * Returns an instance of a BreakIterator implementing title breaks.
440 * The iterator returned locates title boundaries as described for
441 * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
442 * please use Word Boundary iterator.{@link #createWordInstance }
443 *
444 * @param where the locale.
445 * @param status The error code.
446 * @return A BreakIterator for title-breaks. The UErrorCode& status
447 * parameter is used to return status information to the user.
448 * To check whether the construction succeeded or not, you should check
449 * the value of U_SUCCESS(err). If you wish more detailed information, you
450 * can check for informational error results which still indicate success.
451 * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For
452 * example, 'de_CH' was requested, but nothing was found there, so 'de' was
453 * used. U_USING_DEFAULT_WARNING indicates that the default locale data was
454 * used; neither the requested locale nor any of its fall back locales
455 * could be found.
456 * The caller owns the returned object and is responsible for deleting it.
457 * @stable ICU 2.1
458 */
459 static BreakIterator* U_EXPORT2
460 createTitleInstance(const Locale& where, UErrorCode& status);
461
462 /**
463 * Get the set of Locales for which TextBoundaries are installed.
464 * <p><b>Note:</b> this will not return locales added through the register
465 * call. To see the registered locales too, use the getAvailableLocales
466 * function that returns a StringEnumeration object </p>
467 * @param count the output parameter of number of elements in the locale list
468 * @return available locales
469 * @stable ICU 2.0
470 */
471 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
472
473 /**
474 * Get name of the object for the desired Locale, in the desired language.
475 * @param objectLocale must be from getAvailableLocales.
476 * @param displayLocale specifies the desired locale for output.
477 * @param name the fill-in parameter of the return value
478 * Uses best match.
479 * @return user-displayable name
480 * @stable ICU 2.0
481 */
482 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
483 const Locale& displayLocale,
484 UnicodeString& name);
485
486 /**
487 * Get name of the object for the desired Locale, in the language of the
488 * default locale.
489 * @param objectLocale must be from getMatchingLocales
490 * @param name the fill-in parameter of the return value
491 * @return user-displayable name
492 * @stable ICU 2.0
493 */
494 static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale,
495 UnicodeString& name);
496
497 /**
498 * Deprecated functionality. Use clone() instead.
499 *
500 * Thread safe client-buffer-based cloning operation
501 * Do NOT call delete on a safeclone, since 'new' is not used to create it.
502 * @param stackBuffer user allocated space for the new clone. If NULL new memory will be allocated.
503 * If buffer is not large enough, new memory will be allocated.
504 * @param BufferSize reference to size of allocated space.
505 * If BufferSize == 0, a sufficient size for use in cloning will
506 * be returned ('pre-flighting')
507 * If BufferSize is not enough for a stack-based safe clone,
508 * new memory will be allocated.
509 * @param status to indicate whether the operation went on smoothly or there were errors
510 * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were
511 * necessary.
512 * @return pointer to the new clone
513 *
514 * @deprecated ICU 52. Use clone() instead.
515 */
516 virtual BreakIterator * createBufferClone(void *stackBuffer,
517 int32_t &BufferSize,
518 UErrorCode &status) = 0;
519
520 #ifndef U_HIDE_DEPRECATED_API
521
522 /**
523 * Determine whether the BreakIterator was created in user memory by
524 * createBufferClone(), and thus should not be deleted. Such objects
525 * must be closed by an explicit call to the destructor (not delete).
526 * @deprecated ICU 52. Always delete the BreakIterator.
527 */
528 inline UBool isBufferClone(void);
529
530 #endif /* U_HIDE_DEPRECATED_API */
531
532 #if !UCONFIG_NO_SERVICE
533 /**
534 * Register a new break iterator of the indicated kind, to use in the given locale.
535 * The break iterator will be adopted. Clones of the iterator will be returned
536 * if a request for a break iterator of the given kind matches or falls back to
537 * this locale.
538 * Because ICU may choose to cache BreakIterators internally, this must
539 * be called at application startup, prior to any calls to
540 * BreakIterator::createXXXInstance to avoid undefined behavior.
541 * @param toAdopt the BreakIterator instance to be adopted
542 * @param locale the Locale for which this instance is to be registered
543 * @param kind the type of iterator for which this instance is to be registered
544 * @param status the in/out status code, no special meanings are assigned
545 * @return a registry key that can be used to unregister this instance
546 * @stable ICU 2.4
547 */
548 static URegistryKey U_EXPORT2 registerInstance(BreakIterator* toAdopt,
549 const Locale& locale,
550 UBreakIteratorType kind,
551 UErrorCode& status);
552
553 /**
554 * Unregister a previously-registered BreakIterator using the key returned from the
555 * register call. Key becomes invalid after a successful call and should not be used again.
556 * The BreakIterator corresponding to the key will be deleted.
557 * Because ICU may choose to cache BreakIterators internally, this should
558 * be called during application shutdown, after all calls to
559 * BreakIterator::createXXXInstance to avoid undefined behavior.
560 * @param key the registry key returned by a previous call to registerInstance
561 * @param status the in/out status code, no special meanings are assigned
562 * @return TRUE if the iterator for the key was successfully unregistered
563 * @stable ICU 2.4
564 */
565 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
566
567 /**
568 * Return a StringEnumeration over the locales available at the time of the call,
569 * including registered locales.
570 * @return a StringEnumeration over the locales available at the time of the call
571 * @stable ICU 2.4
572 */
573 static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
574 #endif
575
576 /**
577 * Returns the locale for this break iterator. Two flavors are available: valid and
578 * actual locale.
579 * @stable ICU 2.8
580 */
581 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
582
583 #ifndef U_HIDE_INTERNAL_API
584 /** Get the locale for this break iterator object. You can choose between valid and actual locale.
585 * @param type type of the locale we're looking for (valid or actual)
586 * @param status error code for the operation
587 * @return the locale
588 * @internal
589 */
590 const char *getLocaleID(ULocDataLocaleType type, UErrorCode& status) const;
591 #endif /* U_HIDE_INTERNAL_API */
592
593 /**
594 * Set the subject text string upon which the break iterator is operating
595 * without changing any other aspect of the matching state.
596 * The new and previous text strings must have the same content.
597 *
598 * This function is intended for use in environments where ICU is operating on
599 * strings that may move around in memory. It provides a mechanism for notifying
600 * ICU that the string has been relocated, and providing a new UText to access the
601 * string in its new position.
602 *
603 * Note that the break iterator implementation never copies the underlying text
604 * of a string being processed, but always operates directly on the original text
605 * provided by the user. Refreshing simply drops the references to the old text
606 * and replaces them with references to the new.
607 *
608 * Caution: this function is normally used only by very specialized,
609 * system-level code. One example use case is with garbage collection that moves
610 * the text in memory.
611 *
612 * @param input The new (moved) text string.
613 * @param status Receives errors detected by this function.
614 * @return *this
615 *
616 * @stable ICU 49
617 */
618 virtual BreakIterator &refreshInputText(UText *input, UErrorCode &status) = 0;
619
620 #ifndef U_HIDE_INTERNAL_API
621 /**
622 * Set the ULineWordOptions for this break iterator.
623 * @param lineWordOpts The ULineWordOptions to set.
624 * @internal Apple only
625 */
626 void setLineWordOpts(ULineWordOptions lineWordOpts);
627 #endif /* U_HIDE_INTERNAL_API */
628
629 private:
630 static BreakIterator* buildInstance(const Locale& loc, const char *type, UErrorCode& status);
631 static BreakIterator* createInstance(const Locale& loc, int32_t kind, UErrorCode& status);
632 static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status);
633
634 friend class ICUBreakIteratorFactory;
635 friend class ICUBreakIteratorService;
636
637 protected:
638 // Do not enclose protected default/copy constructors with #ifndef U_HIDE_INTERNAL_API
639 // or else the compiler will create a public ones.
640 /** @internal */
641 BreakIterator();
642 /** @internal */
643 BreakIterator (const BreakIterator &other);
644 #ifndef U_HIDE_INTERNAL_API
645 /** @internal */
646 BreakIterator (const Locale& valid, const Locale &actual);
647 /** @internal. Assignment Operator, used by RuleBasedBreakIterator. */
648 BreakIterator &operator = (const BreakIterator &other);
649 #endif /* U_HIDE_INTERNAL_API */
650 ULineWordOptions fLineWordOpts;
651
652 private:
653
654 /** @internal (private) */
655 char actualLocale[ULOC_FULLNAME_CAPACITY];
656 char validLocale[ULOC_FULLNAME_CAPACITY];
657 };
658
659 inline void BreakIterator::setLineWordOpts(ULineWordOptions lineWordOpts)
660 {
661 fLineWordOpts = lineWordOpts;
662 }
663
664 #ifndef U_HIDE_DEPRECATED_API
665
666 inline UBool BreakIterator::isBufferClone()
667 {
668 return FALSE;
669 }
670
671 #endif /* U_HIDE_DEPRECATED_API */
672
673 U_NAMESPACE_END
674 #endif // U_SHOW_CPLUSPLUS_API
675
676 #endif /* #if !UCONFIG_NO_BREAK_ITERATION */
677
678 #endif // BRKITER_H
679 //eof