]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/ucasemap_titlecase_brkiter.cpp
ICU-64260.0.1.tar.gz
[apple/icu.git] / icuSources / common / ucasemap_titlecase_brkiter.cpp
index a253850fa290cf8f195e52449bd0ae1fcb4d1bb2..c21dfb7698a8adfd2b80c69ac05291b28bb96c93 100644 (file)
 
 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,
@@ -42,19 +65,16 @@ int32_t CaseMap::utf8ToTitle(
     UText utext=UTEXT_INITIALIZER;
     utext_openUTF8(&utext, src, srcLength, &errorCode);
     LocalPointer<BreakIterator> ownedIter;
+    iter = ustrcase_getTitleBreakIterator(nullptr, locale, options, iter, ownedIter, errorCode);
     if(iter==NULL) {
-        iter=BreakIterator::createWordInstance(Locale(locale), errorCode);
-        ownedIter.adoptInstead(iter);
-    }
-    if(U_FAILURE(errorCode)) {
         utext_close(&utext);
         return 0;
     }
     iter->setText(&utext, errorCode);
     int32_t length=ucasemap_mapUTF8(
         ustrcase_getCaseLocale(locale), options, iter,
-        (uint8_t *)dest, destCapacity,
-        (const uint8_t *)src, srcLength,
+        dest, destCapacity,
+        src, srcLength,
         ucasemap_internalUTF8ToTitle, edits, errorCode);
     utext_close(&utext);
     return length;
@@ -88,17 +108,24 @@ ucasemap_utf8ToTitle(UCaseMap *csm,
     }
     UText utext=UTEXT_INITIALIZER;
     utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode);
-    if(csm->iter==NULL) {
-        csm->iter=BreakIterator::createWordInstance(Locale(csm->locale), *pErrorCode);
-    }
     if (U_FAILURE(*pErrorCode)) {
         return 0;
     }
+    if(csm->iter==NULL) {
+        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,
-            (uint8_t *)dest, destCapacity,
-            (const uint8_t *)src, srcLength,
+            dest, destCapacity,
+            src, srcLength,
             ucasemap_internalUTF8ToTitle, NULL, *pErrorCode);
     utext_close(&utext);
     return length;