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