164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// Copyright (C) 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/* 483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius******************************************************************************* 583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Copyright (C) 2011, International Business Machines 683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Corporation and others. All Rights Reserved. 783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius******************************************************************************* 883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* file name: ucasemap_titlecase_brkiter.cpp 983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* encoding: US-ASCII 1083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* tab size: 8 (not used) 1183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* indentation:4 1283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* 1383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* created on: 2011jun02 1483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* created by: Markus W. Scherer 1583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* 1683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Titlecasing functions that are based on BreakIterator 1783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* were moved here to break dependency cycles among parts of the common library. 1883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius*/ 1983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 2083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "unicode/utypes.h" 2183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 2283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#if !UCONFIG_NO_BREAK_ITERATION 2383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 2483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "unicode/brkiter.h" 2583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "unicode/ubrk.h" 2683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "unicode/ucasemap.h" 2783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "cmemory.h" 2883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "ucase.h" 2983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "ustr_imp.h" 3083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 3183a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_NAMESPACE_USE 3283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 3383a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CAPI const UBreakIterator * U_EXPORT2 3483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusucasemap_getBreakIterator(const UCaseMap *csm) { 3583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius return csm->iter; 3683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius} 3783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 3883a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CAPI void U_EXPORT2 3983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * /*pErrorCode*/) { 4083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // Do not call ubrk_close() so that we do not depend on all of the BreakIterator code. 4183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius delete reinterpret_cast<BreakIterator *>(csm->iter); 4283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius csm->iter=iterToAdopt; 4383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius} 4483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 4583a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CAPI int32_t U_EXPORT2 4683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusucasemap_utf8ToTitle(UCaseMap *csm, 4783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius char *dest, int32_t destCapacity, 4883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius const char *src, int32_t srcLength, 4983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UErrorCode *pErrorCode) { 5083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UText utext=UTEXT_INITIALIZER; 5183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode); 5283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(U_FAILURE(*pErrorCode)) { 5383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius return 0; 5483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 5583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(csm->iter==NULL) { 5683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius csm->iter=ubrk_open(UBRK_WORD, csm->locale, 5783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius NULL, 0, 5883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius pErrorCode); 5983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 6083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius ubrk_setUText(csm->iter, &utext, pErrorCode); 6183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius int32_t length=ucasemap_mapUTF8(csm, 6283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius (uint8_t *)dest, destCapacity, 6383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius (const uint8_t *)src, srcLength, 6483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius ucasemap_internalUTF8ToTitle, pErrorCode); 6583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius utext_close(&utext); 6683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius return length; 6783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius} 6883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 6983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif // !UCONFIG_NO_BREAK_ITERATION 70