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