123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- // © 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- *******************************************************************************
- * Copyright (C) 2011, International Business Machines
- * Corporation and others. All Rights Reserved.
- *******************************************************************************
- * file name: ucasemap_titlecase_brkiter.cpp
- * encoding: UTF-8
- * tab size: 8 (not used)
- * indentation:4
- *
- * created on: 2011jun02
- * created by: Markus W. Scherer
- *
- * Titlecasing functions that are based on BreakIterator
- * were moved here to break dependency cycles among parts of the common library.
- */
- #include "unicode/utypes.h"
- #if !UCONFIG_NO_BREAK_ITERATION
- #include "unicode/brkiter.h"
- #include "unicode/ubrk.h"
- #include "unicode/casemap.h"
- #include "unicode/ucasemap.h"
- #include "cmemory.h"
- #include "ucase.h"
- #include "ucasemap_imp.h"
- U_NAMESPACE_BEGIN
- void CaseMap::utf8ToTitle(
- const char *locale, uint32_t options, BreakIterator *iter,
- StringPiece src, ByteSink &sink, Edits *edits,
- UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) {
- return;
- }
- UText utext = UTEXT_INITIALIZER;
- utext_openUTF8(&utext, src.data(), src.length(), &errorCode);
- LocalPointer<BreakIterator> ownedIter;
- iter = ustrcase_getTitleBreakIterator(nullptr, locale, options, iter, ownedIter, errorCode);
- if (iter == nullptr) {
- utext_close(&utext);
- return;
- }
- iter->setText(&utext, errorCode);
- ucasemap_mapUTF8(
- ustrcase_getCaseLocale(locale), options, iter,
- src.data(), src.length(),
- ucasemap_internalUTF8ToTitle, sink, edits, errorCode);
- utext_close(&utext);
- }
- int32_t CaseMap::utf8ToTitle(
- const char *locale, uint32_t options, BreakIterator *iter,
- const char *src, int32_t srcLength,
- char *dest, int32_t destCapacity, Edits *edits,
- UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) {
- return 0;
- }
- UText utext=UTEXT_INITIALIZER;
- utext_openUTF8(&utext, src, srcLength, &errorCode);
- LocalPointer<BreakIterator> ownedIter;
- iter = ustrcase_getTitleBreakIterator(nullptr, locale, options, iter, ownedIter, errorCode);
- if(iter==nullptr) {
- utext_close(&utext);
- return 0;
- }
- iter->setText(&utext, errorCode);
- int32_t length=ucasemap_mapUTF8(
- ustrcase_getCaseLocale(locale), options, iter,
- dest, destCapacity,
- src, srcLength,
- ucasemap_internalUTF8ToTitle, edits, errorCode);
- utext_close(&utext);
- return length;
- }
- U_NAMESPACE_END
- U_NAMESPACE_USE
- U_CAPI const UBreakIterator * U_EXPORT2
- ucasemap_getBreakIterator(const UCaseMap *csm) {
- return reinterpret_cast<UBreakIterator *>(csm->iter);
- }
- U_CAPI void U_EXPORT2
- ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode) {
- if(U_FAILURE(*pErrorCode)) {
- return;
- }
- delete csm->iter;
- csm->iter=reinterpret_cast<BreakIterator *>(iterToAdopt);
- }
- U_CAPI int32_t U_EXPORT2
- ucasemap_utf8ToTitle(UCaseMap *csm,
- char *dest, int32_t destCapacity,
- const char *src, int32_t srcLength,
- UErrorCode *pErrorCode) {
- if (U_FAILURE(*pErrorCode)) {
- return 0;
- }
- UText utext=UTEXT_INITIALIZER;
- utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode);
- if (U_FAILURE(*pErrorCode)) {
- return 0;
- }
- if(csm->iter==nullptr) {
- LocalPointer<BreakIterator> ownedIter;
- BreakIterator *iter = ustrcase_getTitleBreakIterator(
- nullptr, csm->locale, csm->options, nullptr, ownedIter, *pErrorCode);
- if (iter == nullptr) {
- utext_close(&utext);
- return 0;
- }
- csm->iter = ownedIter.orphan();
- }
- csm->iter->setText(&utext, *pErrorCode);
- int32_t length=ucasemap_mapUTF8(
- csm->caseLocale, csm->options, csm->iter,
- dest, destCapacity,
- src, srcLength,
- ucasemap_internalUTF8ToTitle, nullptr, *pErrorCode);
- utext_close(&utext);
- return length;
- }
- #endif // !UCONFIG_NO_BREAK_ITERATION
|