1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* Copyright (C) 1997-2014, International Business Machines Corporation and 450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* File brkiter.cpp 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 02/18/97 aliu Converted from OpenClass. Added DONE. 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 01/13/2000 helena Added UErrorCode parameter to createXXXInstance methods. 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru***************************************************************************************** 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This file was generated from the java source file BreakIterator.java 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/rbbi.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/brkiter.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udata.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ures.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucln_cmn.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "umutex.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "servloc.h" 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "locbased.h" 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uresimp.h" 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uassert.h" 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ubrkimpl.h" 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class BreakIterator 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This class implements methods for finding the location of boundaries in text. 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Instances of BreakIterator maintain a current position and scan over text 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// returning the index of characters where boundaries occur. 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode &status) 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char fnbuff[256]; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char ext[4]={'\0'}; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char actualLocale[ULOC_FULLNAME_CAPACITY]; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t size; 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* brkfname = NULL; 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle brkRulesStack; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle brkNameStack; 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *brkRules = &brkRulesStack; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *brkName = &brkNameStack; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *result = NULL; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_initStackObject(brkRules); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_initStackObject(brkName); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Get the locale 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, loc.getName(), &status); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is a hack for now. Should be fixed when the data is fetched from 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru brk_index.txt */ 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_USING_DEFAULT_WARNING){ 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_openFillIn(b, U_ICUDATA_BRKITR, "", &status); 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Get the "boundaries" array. 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru brkRules = ures_getByKeyWithFallback(b, "boundaries", brkRules, &status); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Get the string object naming the rules file 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru brkName = ures_getByKeyWithFallback(brkRules, type, brkName, &status); 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Get the actual string 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru brkfname = ures_getString(brkName, &size, &status); 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_ASSERT((size_t)size<sizeof(fnbuff)); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((size_t)size>=sizeof(fnbuff)) { 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size=0; 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_BUFFER_OVERFLOW_ERROR; 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Use the string if we found it 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) && brkfname) { 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strncpy(actualLocale, 9783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius ures_getLocaleInternal(brkName, &status), 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sizeof(actualLocale)/sizeof(actualLocale[0])); 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* extStart=u_strchr(brkfname, 0x002e); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int len = 0; 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(extStart!=NULL){ 10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho len = (int)(extStart-brkfname); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_UCharsToChars(extStart+1, ext, sizeof(ext)); // nul terminates the buff 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_UCharsToChars(brkfname, fnbuff, len); 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fnbuff[len]=0; // nul terminate 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(brkRules); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(brkName); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDataMemory* file = udata_open(U_ICUDATA_BRKITR, ext, fnbuff, &status); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(b); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Create a RuleBasedBreakIterator 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new RuleBasedBreakIterator(file, status); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // If there is a result, set the valid locale and actual locale, and the kind 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) && result != NULL) { 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_LOCALE_BASED(locBased, *(BreakIterator*)result); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), actualLocale); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result->setBreakType(kind); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(b); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) && result != NULL) { // Sometimes redundant check, but simple 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result == NULL) { 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udata_close(file); 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_MEMORY_ALLOCATION_ERROR; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a break iterator for word breaks. 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* U_EXPORT2 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::createWordInstance(const Locale& key, UErrorCode& status) 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return createInstance(key, UBRK_WORD, status); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a break iterator for line breaks. 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* U_EXPORT2 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::createLineInstance(const Locale& key, UErrorCode& status) 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return createInstance(key, UBRK_LINE, status); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a break iterator for character breaks. 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* U_EXPORT2 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::createCharacterInstance(const Locale& key, UErrorCode& status) 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return createInstance(key, UBRK_CHARACTER, status); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a break iterator for sentence breaks. 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* U_EXPORT2 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::createSentenceInstance(const Locale& key, UErrorCode& status) 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return createInstance(key, UBRK_SENTENCE, status); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Creates a break iterator for title casing breaks. 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* U_EXPORT2 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::createTitleInstance(const Locale& key, UErrorCode& status) 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return createInstance(key, UBRK_TITLE, status); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Gets all the available locales that has localized text boundary data. 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst Locale* U_EXPORT2 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::getAvailableLocales(int32_t& count) 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Locale::getAvailableLocales(count); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------------ 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Default constructor and destructor 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//------------------------------------------- 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::BreakIterator() 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *validLocale = *actualLocale = 0; 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::~BreakIterator() 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------------ 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Registration 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//------------------------------------------- 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass ICUBreakIteratorFactory : public ICUResourceBundleFactory { 22483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliuspublic: 22583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius virtual ~ICUBreakIteratorFactory(); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprotected: 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /*service*/, UErrorCode& status) const { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return BreakIterator::makeInstance(loc, kind, status); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23283a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusICUBreakIteratorFactory::~ICUBreakIteratorFactory() {} 23383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass ICUBreakIteratorService : public ICULocaleService { 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ICUBreakIteratorService() 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : ICULocaleService(UNICODE_STRING("Break Iterator", 14)) 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru registerFactory(new ICUBreakIteratorFactory(), status); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius virtual ~ICUBreakIteratorService(); 24683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UObject* cloneInstance(UObject* instance) const { 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((BreakIterator*)instance)->clone(); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const { 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LocaleKey& lkey = (LocaleKey&)key; 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t kind = lkey.kind(); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc; 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lkey.currentLocale(loc); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return BreakIterator::makeInstance(loc, kind, status); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UBool isDefault() const { 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return countFactories() == 1; 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26483a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusICUBreakIteratorService::~ICUBreakIteratorService() {} 26583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// defined in ucln_cmn.h 26959d709d503bab6e2b61931737e662dd293b40578ccorneliusU_NAMESPACE_END 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27159d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic icu::UInitOnce gInitOnce; 27283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusstatic icu::ICULocaleService* gService = NULL; 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27459d709d503bab6e2b61931737e662dd293b40578ccornelius 27559d709d503bab6e2b61931737e662dd293b40578ccornelius 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Release all static memory held by breakiterator. 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool U_CALLCONV breakiterator_cleanup(void) { 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gService) { 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gService; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gService = NULL; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 28659d709d503bab6e2b61931737e662dd293b40578ccornelius gInitOnce.reset(); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29359d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void U_CALLCONV 29459d709d503bab6e2b61931737e662dd293b40578ccorneliusinitService(void) { 29559d709d503bab6e2b61931737e662dd293b40578ccornelius gService = new ICUBreakIteratorService(); 29659d709d503bab6e2b61931737e662dd293b40578ccornelius ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup); 29759d709d503bab6e2b61931737e662dd293b40578ccornelius} 29859d709d503bab6e2b61931737e662dd293b40578ccornelius 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic ICULocaleService* 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerugetService(void) 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 30259d709d503bab6e2b61931737e662dd293b40578ccornelius umtx_initOnce(gInitOnce, &initService); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return gService; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30659d709d503bab6e2b61931737e662dd293b40578ccornelius 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline UBool 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruhasService(void) 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 31259d709d503bab6e2b61931737e662dd293b40578ccornelius return !gInitOnce.isReset() && getService() != NULL; 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruURegistryKey U_EXPORT2 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::registerInstance(BreakIterator* toAdopt, const Locale& locale, UBreakIteratorType kind, UErrorCode& status) 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 320c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ICULocaleService *service = getService(); 321c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (service == NULL) { 322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_MEMORY_ALLOCATION_ERROR; 323c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return NULL; 324c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 325c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return service->registerInstance(toAdopt, locale, kind, status); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool U_EXPORT2 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::unregister(URegistryKey key, UErrorCode& status) 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (hasService()) { 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return gService->unregister(key, status); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 337c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_MEMORY_ALLOCATION_ERROR; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruStringEnumeration* U_EXPORT2 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::getAvailableLocales(void) 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 347c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ICULocaleService *service = getService(); 348c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (service == NULL) { 349c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return NULL; 350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 351c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return service->getAvailableLocales(); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* UCONFIG_NO_SERVICE */ 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::createInstance(const Locale& loc, int32_t kind, UErrorCode& status) 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (hasService()) { 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale actualLoc(""); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *result = (BreakIterator*)gService->get(loc, kind, &actualLoc, status); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO: The way the service code works in ICU 2.8 is that if 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // there is a real registered break iterator, the actualLoc 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // will be populated, but if the handleDefault path is taken 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // (because nothing is registered that can handle the 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // requested locale) then the actualLoc comes back empty. In 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // that case, the returned object already has its actual/valid 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // locale data populated (by makeInstance, which is what 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // handleDefault calls), so we don't touch it. YES, A COMMENT 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // THIS LONG is a sign of bad code -- so the action item is to 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // revisit this in ICU 3.0 and clean it up/fix it/remove it. 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) && (result != NULL) && *actualLoc.getName() != 0) { 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_LOCALE_BASED(locBased, *result); 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locBased.setLocaleIDs(actualLoc.getName(), actualLoc.getName()); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return makeInstance(loc, kind, status); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator* 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *result = NULL; 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (kind) { 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UBRK_CHARACTER: 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = BreakIterator::buildInstance(loc, "grapheme", kind, status); 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UBRK_WORD: 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = BreakIterator::buildInstance(loc, "word", kind, status); 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UBRK_LINE: 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = BreakIterator::buildInstance(loc, "line", kind, status); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UBRK_SENTENCE: 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = BreakIterator::buildInstance(loc, "sentence", kind, status); 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UBRK_TITLE: 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = BreakIterator::buildInstance(loc, "title", kind, status); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruLocale 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::getLocale(ULocDataLocaleType type, UErrorCode& status) const { 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_LOCALE_BASED(locBased, *this); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return locBased.getLocale(type, status); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char * 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const { 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_LOCALE_BASED(locBased, *this); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return locBased.getLocaleID(type, status); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44159d709d503bab6e2b61931737e662dd293b40578ccornelius 44259d709d503bab6e2b61931737e662dd293b40578ccornelius// This implementation of getRuleStatus is a do-nothing stub, here to 44359d709d503bab6e2b61931737e662dd293b40578ccornelius// provide a default implementation for any derived BreakIterator classes that 44459d709d503bab6e2b61931737e662dd293b40578ccornelius// do not implement it themselves. 44559d709d503bab6e2b61931737e662dd293b40578ccorneliusint32_t BreakIterator::getRuleStatus() const { 44659d709d503bab6e2b61931737e662dd293b40578ccornelius return 0; 44759d709d503bab6e2b61931737e662dd293b40578ccornelius} 44859d709d503bab6e2b61931737e662dd293b40578ccornelius 44959d709d503bab6e2b61931737e662dd293b40578ccornelius// This implementation of getRuleStatusVec is a do-nothing stub, here to 45059d709d503bab6e2b61931737e662dd293b40578ccornelius// provide a default implementation for any derived BreakIterator classes that 45159d709d503bab6e2b61931737e662dd293b40578ccornelius// do not implement it themselves. 45259d709d503bab6e2b61931737e662dd293b40578ccorneliusint32_t BreakIterator::getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status) { 45359d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 45459d709d503bab6e2b61931737e662dd293b40578ccornelius return 0; 45559d709d503bab6e2b61931737e662dd293b40578ccornelius } 45659d709d503bab6e2b61931737e662dd293b40578ccornelius if (capacity < 1) { 45759d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_BUFFER_OVERFLOW_ERROR; 45859d709d503bab6e2b61931737e662dd293b40578ccornelius return 1; 45959d709d503bab6e2b61931737e662dd293b40578ccornelius } 46059d709d503bab6e2b61931737e662dd293b40578ccornelius *fillInVec = 0; 46159d709d503bab6e2b61931737e662dd293b40578ccornelius return 1; 46259d709d503bab6e2b61931737e662dd293b40578ccornelius} 46359d709d503bab6e2b61931737e662dd293b40578ccornelius 464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusBreakIterator::BreakIterator (const Locale& valid, const Locale& actual) { 465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius U_LOCALE_BASED(locBased, (*this)); 466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius locBased.setLocaleIDs(valid, actual); 467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 474