16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1997-2013, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File TXTBDRY.CPP 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 02/18/97 aliu Converted from OpenClass. Added DONE. 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 01/13/2000 helena Added UErrorCode parameter to createXXXInstance methods. 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org***************************************************************************************** 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This file was generated from the java source file BreakIterator.java 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/rbbi.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/brkiter.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udata.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ures.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucln_cmn.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "umutex.h" 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "servloc.h" 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "locbased.h" 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uresimp.h" 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uassert.h" 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ubrkimpl.h" 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// class BreakIterator 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This class implements methods for finding the location of boundaries in text. 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Instances of BreakIterator maintain a current position and scan over text 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// returning the index of characters where boundaries occur. 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode &status) 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char fnbuff[256]; 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char ext[4]={'\0'}; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char actualLocale[ULOC_FULLNAME_CAPACITY]; 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t size; 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* brkfname = NULL; 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle brkRulesStack; 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle brkNameStack; 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *brkRules = &brkRulesStack; 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *brkName = &brkNameStack; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *result = NULL; 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_initStackObject(brkRules); 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_initStackObject(brkName); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Get the locale 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, loc.getName(), &status); 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* this is a hack for now. Should be fixed when the data is fetched from 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org brk_index.txt */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_USING_DEFAULT_WARNING){ 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_openFillIn(b, U_ICUDATA_BRKITR, "", &status); 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Get the "boundaries" array. 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org brkRules = ures_getByKeyWithFallback(b, "boundaries", brkRules, &status); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Get the string object naming the rules file 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org brkName = ures_getByKeyWithFallback(brkRules, type, brkName, &status); 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Get the actual string 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org brkfname = ures_getString(brkName, &size, &status); 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_ASSERT((size_t)size<sizeof(fnbuff)); 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((size_t)size>=sizeof(fnbuff)) { 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org size=0; 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_BUFFER_OVERFLOW_ERROR; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Use the string if we found it 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) && brkfname) { 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_strncpy(actualLocale, 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_getLocaleInternal(brkName, &status), 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sizeof(actualLocale)/sizeof(actualLocale[0])); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* extStart=u_strchr(brkfname, 0x002e); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int len = 0; 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(extStart!=NULL){ 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len = (int)(extStart-brkfname); 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_UCharsToChars(extStart+1, ext, sizeof(ext)); // nul terminates the buff 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_UCharsToChars(brkfname, fnbuff, len); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fnbuff[len]=0; // nul terminate 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(brkRules); 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(brkName); 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDataMemory* file = udata_open(U_ICUDATA_BRKITR, ext, fnbuff, &status); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(b); 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Create a RuleBasedBreakIterator 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = new RuleBasedBreakIterator(file, status); 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // If there is a result, set the valid locale and actual locale, and the kind 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) && result != NULL) { 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_LOCALE_BASED(locBased, *(BreakIterator*)result); 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), actualLocale); 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result->setBreakType(kind); 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(b); 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) && result != NULL) { // Sometimes redundant check, but simple 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete result; 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (result == NULL) { 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udata_close(file); 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_MEMORY_ALLOCATION_ERROR; 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Creates a break iterator for word breaks. 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* U_EXPORT2 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::createWordInstance(const Locale& key, UErrorCode& status) 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return createInstance(key, UBRK_WORD, status); 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Creates a break iterator for line breaks. 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* U_EXPORT2 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::createLineInstance(const Locale& key, UErrorCode& status) 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return createInstance(key, UBRK_LINE, status); 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Creates a break iterator for character breaks. 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* U_EXPORT2 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::createCharacterInstance(const Locale& key, UErrorCode& status) 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return createInstance(key, UBRK_CHARACTER, status); 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Creates a break iterator for sentence breaks. 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* U_EXPORT2 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::createSentenceInstance(const Locale& key, UErrorCode& status) 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return createInstance(key, UBRK_SENTENCE, status); 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Creates a break iterator for title casing breaks. 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* U_EXPORT2 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::createTitleInstance(const Locale& key, UErrorCode& status) 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return createInstance(key, UBRK_TITLE, status); 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Gets all the available locales that has localized text boundary data. 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst Locale* U_EXPORT2 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::getAvailableLocales(int32_t& count) 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return Locale::getAvailableLocales(count); 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------------ 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Default constructor and destructor 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//------------------------------------------- 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::BreakIterator() 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *validLocale = *actualLocale = 0; 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::~BreakIterator() 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------------ 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Registration 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//------------------------------------------- 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_SERVICE 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass ICUBreakIteratorFactory : public ICUResourceBundleFactory { 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~ICUBreakIteratorFactory(); 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprotected: 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /*service*/, UErrorCode& status) const { 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return BreakIterator::makeInstance(loc, kind, status); 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgICUBreakIteratorFactory::~ICUBreakIteratorFactory() {} 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass ICUBreakIteratorService : public ICULocaleService { 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ICUBreakIteratorService() 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : ICULocaleService(UNICODE_STRING("Break Iterator", 14)) 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org registerFactory(new ICUBreakIteratorFactory(), status); 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~ICUBreakIteratorService(); 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UObject* cloneInstance(UObject* instance) const { 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((BreakIterator*)instance)->clone(); 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const { 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocaleKey& lkey = (LocaleKey&)key; 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t kind = lkey.kind(); 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale loc; 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lkey.currentLocale(loc); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return BreakIterator::makeInstance(loc, kind, status); 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UBool isDefault() const { 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return countFactories() == 1; 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgICUBreakIteratorService::~ICUBreakIteratorService() {} 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// defined in ucln_cmn.h 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic icu::UInitOnce gInitOnce; 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic icu::ICULocaleService* gService = NULL; 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Release all static memory held by breakiterator. 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_BEGIN 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool U_CALLCONV breakiterator_cleanup(void) { 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_SERVICE 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (gService) { 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gService; 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gService = NULL; 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gInitOnce.reset(); 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_END 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void U_CALLCONV 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginitService(void) { 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gService = new ICUBreakIteratorService(); 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup); 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic ICULocaleService* 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orggetService(void) 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org umtx_initOnce(gInitOnce, &initService); 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return gService; 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic inline UBool 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orghasService(void) 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return !gInitOnce.isReset() && getService() != NULL; 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgURegistryKey U_EXPORT2 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::registerInstance(BreakIterator* toAdopt, const Locale& locale, UBreakIteratorType kind, UErrorCode& status) 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ICULocaleService *service = getService(); 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (service == NULL) { 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_MEMORY_ALLOCATION_ERROR; 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return service->registerInstance(toAdopt, locale, kind, status); 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool U_EXPORT2 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::unregister(URegistryKey key, UErrorCode& status) 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (hasService()) { 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return gService->unregister(key, status); 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_MEMORY_ALLOCATION_ERROR; 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgStringEnumeration* U_EXPORT2 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::getAvailableLocales(void) 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ICULocaleService *service = getService(); 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (service == NULL) { 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return service->getAvailableLocales(); 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* UCONFIG_NO_SERVICE */ 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::createInstance(const Locale& loc, int32_t kind, UErrorCode& status) 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_SERVICE 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (hasService()) { 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale actualLoc(""); 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator *result = (BreakIterator*)gService->get(loc, kind, &actualLoc, status); 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // TODO: The way the service code works in ICU 2.8 is that if 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // there is a real registered break iterator, the actualLoc 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // will be populated, but if the handleDefault path is taken 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // (because nothing is registered that can handle the 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // requested locale) then the actualLoc comes back empty. In 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // that case, the returned object already has its actual/valid 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // locale data populated (by makeInstance, which is what 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // handleDefault calls), so we don't touch it. YES, A COMMENT 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // THIS LONG is a sign of bad code -- so the action item is to 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // revisit this in ICU 3.0 and clean it up/fix it/remove it. 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) && (result != NULL) && *actualLoc.getName() != 0) { 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_LOCALE_BASED(locBased, *result); 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org locBased.setLocaleIDs(actualLoc.getName(), actualLoc.getName()); 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return makeInstance(loc, kind, status); 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator* 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator *result = NULL; 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (kind) { 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UBRK_CHARACTER: 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = BreakIterator::buildInstance(loc, "grapheme", kind, status); 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UBRK_WORD: 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = BreakIterator::buildInstance(loc, "word", kind, status); 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UBRK_LINE: 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = BreakIterator::buildInstance(loc, "line", kind, status); 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UBRK_SENTENCE: 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = BreakIterator::buildInstance(loc, "sentence", kind, status); 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UBRK_TITLE: 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = BreakIterator::buildInstance(loc, "title", kind, status); 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ILLEGAL_ARGUMENT_ERROR; 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgLocale 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::getLocale(ULocDataLocaleType type, UErrorCode& status) const { 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_LOCALE_BASED(locBased, *this); 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return locBased.getLocale(type, status); 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst char * 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgBreakIterator::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const { 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_LOCALE_BASED(locBased, *this); 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return locBased.getLocaleID(type, status); 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This implementation of getRuleStatus is a do-nothing stub, here to 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// provide a default implementation for any derived BreakIterator classes that 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// do not implement it themselves. 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t BreakIterator::getRuleStatus() const { 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This implementation of getRuleStatusVec is a do-nothing stub, here to 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// provide a default implementation for any derived BreakIterator classes that 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// do not implement it themselves. 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t BreakIterator::getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status) { 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (capacity < 1) { 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_BUFFER_OVERFLOW_ERROR; 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1; 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *fillInVec = 0; 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1; 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof 469