1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho********************************************************************************
359d709d503bab6e2b61931737e662dd293b40578ccornelius*   Copyright (C) 1996-2013, International Business Machines
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho********************************************************************************
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h"
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ubrk.h"
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/brkiter.h"
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uloc.h"
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h"
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uchriter.h"
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/rbbi.h"
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "rbbirb.h"
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uassert.h"
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_USE
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//------------------------------------------------------------------------------
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//    ubrk_open      Create a canned type of break iterator based on type (word, line, etc.)
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//                   and locale.
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//
2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//------------------------------------------------------------------------------
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI UBreakIterator* U_EXPORT2
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_open(UBreakIteratorType type,
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      const char *locale,
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      const UChar *text,
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      int32_t textLength,
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      UErrorCode *status)
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  if(U_FAILURE(*status)) return 0;
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  BreakIterator *result = 0;
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  switch(type) {
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  case UBRK_CHARACTER:
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result = BreakIterator::createCharacterInstance(Locale(locale), *status);
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    break;
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  case UBRK_WORD:
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result = BreakIterator::createWordInstance(Locale(locale), *status);
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    break;
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  case UBRK_LINE:
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result = BreakIterator::createLineInstance(Locale(locale), *status);
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    break;
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  case UBRK_SENTENCE:
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result = BreakIterator::createSentenceInstance(Locale(locale), *status);
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    break;
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  case UBRK_TITLE:
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result = BreakIterator::createTitleInstance(Locale(locale), *status);
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    break;
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  default:
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    *status = U_ILLEGAL_ARGUMENT_ERROR;
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  // check for allocation error
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  if (U_FAILURE(*status)) {
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     return 0;
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  if(result == 0) {
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    *status = U_MEMORY_ALLOCATION_ERROR;
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return 0;
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  UBreakIterator *uBI = (UBreakIterator *)result;
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  if (text != NULL) {
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      ubrk_setText(uBI, text, textLength, status);
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return uBI;
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
8785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//------------------------------------------------------------------------------
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//   ubrk_openRules      open a break iterator from a set of break rules.
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//                       Invokes the rule builder.
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//
9285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//------------------------------------------------------------------------------
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI UBreakIterator* U_EXPORT2
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_openRules(  const UChar        *rules,
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                       int32_t       rulesLength,
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 const UChar        *text,
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                       int32_t       textLength,
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                       UParseError  *parseErr,
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                       UErrorCode   *status)  {
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (status == NULL || U_FAILURE(*status)){
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return 0;
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    BreakIterator *result = 0;
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString ruleString(rules, rulesLength);
10785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    result = RBBIRuleBuilder::createRuleBasedBreakIterator(ruleString, parseErr, *status);
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(*status)) {
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return 0;
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBreakIterator *uBI = (UBreakIterator *)result;
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (text != NULL) {
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ubrk_setText(uBI, text, textLength, status);
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return uBI;
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI UBreakIterator * U_EXPORT2
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_safeClone(
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          const UBreakIterator *bi,
12659d709d503bab6e2b61931737e662dd293b40578ccornelius          void * /*stackBuffer*/,
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          int32_t *pBufferSize,
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          UErrorCode *status)
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (status == NULL || U_FAILURE(*status)){
13159d709d503bab6e2b61931737e662dd293b40578ccornelius        return NULL;
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
13359d709d503bab6e2b61931737e662dd293b40578ccornelius    if (bi == NULL) {
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru       *status = U_ILLEGAL_ARGUMENT_ERROR;
13559d709d503bab6e2b61931737e662dd293b40578ccornelius        return NULL;
13659d709d503bab6e2b61931737e662dd293b40578ccornelius    }
13759d709d503bab6e2b61931737e662dd293b40578ccornelius    if (pBufferSize != NULL) {
13859d709d503bab6e2b61931737e662dd293b40578ccornelius        int32_t inputSize = *pBufferSize;
13959d709d503bab6e2b61931737e662dd293b40578ccornelius        *pBufferSize = 1;
14059d709d503bab6e2b61931737e662dd293b40578ccornelius        if (inputSize == 0) {
14159d709d503bab6e2b61931737e662dd293b40578ccornelius            return NULL;  // preflighting for deprecated functionality
14259d709d503bab6e2b61931737e662dd293b40578ccornelius        }
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
14459d709d503bab6e2b61931737e662dd293b40578ccornelius    BreakIterator *newBI = ((BreakIterator *)bi)->clone();
14559d709d503bab6e2b61931737e662dd293b40578ccornelius    if (newBI == NULL) {
14659d709d503bab6e2b61931737e662dd293b40578ccornelius        *status = U_MEMORY_ALLOCATION_ERROR;
14759d709d503bab6e2b61931737e662dd293b40578ccornelius    } else {
14859d709d503bab6e2b61931737e662dd293b40578ccornelius        *status = U_SAFECLONE_ALLOCATED_WARNING;
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
15059d709d503bab6e2b61931737e662dd293b40578ccornelius    return (UBreakIterator *)newBI;
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_close(UBreakIterator *bi)
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
15859d709d503bab6e2b61931737e662dd293b40578ccornelius    delete (BreakIterator *)bi;
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_setText(UBreakIterator* bi,
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru             const UChar*    text,
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru             int32_t         textLength,
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru             UErrorCode*     status)
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    BreakIterator *brit = (BreakIterator *)bi;
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UText  ut = UTEXT_INITIALIZER;
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    utext_openUChars(&ut, text, textLength, status);
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    brit->setText(&ut, *status);
17159d709d503bab6e2b61931737e662dd293b40578ccornelius    // A stack allocated UText wrapping a UChar * string
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //   can be dumped without explicitly closing it.
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_setUText(UBreakIterator *bi,
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru             UText          *text,
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru             UErrorCode     *status)
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleBasedBreakIterator *brit = (RuleBasedBreakIterator *)bi;
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    brit->RuleBasedBreakIterator::setText(text, *status);
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_current(const UBreakIterator *bi)
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::current();
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_next(UBreakIterator *bi)
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::next();
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_previous(UBreakIterator *bi)
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::previous();
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_first(UBreakIterator *bi)
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::first();
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_last(UBreakIterator *bi)
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::last();
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_preceding(UBreakIterator *bi,
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           int32_t offset)
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::preceding(offset);
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_following(UBreakIterator *bi,
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           int32_t offset)
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::following(offset);
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const char* U_EXPORT2
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_getAvailable(int32_t index)
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return uloc_getAvailable(index);
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_countAvailable()
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return uloc_countAvailable();
253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI  UBool U_EXPORT2
257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_isBoundary(UBreakIterator *bi, int32_t offset)
258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::isBoundary(offset);
260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI  int32_t U_EXPORT2
264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_getRuleStatus(UBreakIterator *bi)
265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::getRuleStatus();
267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI  int32_t U_EXPORT2
270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status)
271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::getRuleStatusVec(fillInVec, capacity, *status);
273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const char* U_EXPORT2
277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruubrk_getLocaleByType(const UBreakIterator *bi,
278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                     ULocDataLocaleType type,
279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                     UErrorCode* status)
280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (bi == NULL) {
282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (U_SUCCESS(*status)) {
283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            *status = U_ILLEGAL_ARGUMENT_ERROR;
284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return NULL;
286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return ((BreakIterator*)bi)->getLocaleID(type, *status);
288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
2914fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughesvoid ubrk_refreshUText(UBreakIterator *bi,
2924fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes                       UText          *text,
2934fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes                       UErrorCode     *status)
2944fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes{
2954fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes    BreakIterator *bii = reinterpret_cast<BreakIterator *>(bi);
2964fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes    bii->refreshInputText(text, *status);
2974fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes}
2984fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes
2994fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes
3004fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes
301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
302