16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2011, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* file name: ucasemap_titlecase_brkiter.cpp 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* encoding: US-ASCII 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tab size: 8 (not used) 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* indentation:4 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created on: 2011jun02 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created by: Markus W. Scherer 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Titlecasing functions that are based on BreakIterator 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* were moved here to break dependency cycles among parts of the common library. 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/brkiter.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ubrk.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucasemap.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucase.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ustr_imp.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_USE 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI const UBreakIterator * U_EXPORT2 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgucasemap_getBreakIterator(const UCaseMap *csm) { 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return csm->iter; 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * /*pErrorCode*/) { 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Do not call ubrk_close() so that we do not depend on all of the BreakIterator code. 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete reinterpret_cast<BreakIterator *>(csm->iter); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org csm->iter=iterToAdopt; 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgucasemap_utf8ToTitle(UCaseMap *csm, 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *dest, int32_t destCapacity, 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *src, int32_t srcLength, 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *pErrorCode) { 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText utext=UTEXT_INITIALIZER; 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode); 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)) { 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(csm->iter==NULL) { 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org csm->iter=ubrk_open(UBRK_WORD, csm->locale, 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, 0, 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pErrorCode); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk_setUText(csm->iter, &utext, pErrorCode); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length=ucasemap_mapUTF8(csm, 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (uint8_t *)dest, destCapacity, 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const uint8_t *)src, srcLength, 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucasemap_internalUTF8ToTitle, pErrorCode); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&utext); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return length; 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // !UCONFIG_NO_BREAK_ITERATION 68