Home | History | Annotate | Download | only in common
      1 /*
      2 *******************************************************************************
      3 *   Copyright (C) 2011, International Business Machines
      4 *   Corporation and others.  All Rights Reserved.
      5 *******************************************************************************
      6 *   file name:  ucasemap_titlecase_brkiter.cpp
      7 *   encoding:   US-ASCII
      8 *   tab size:   8 (not used)
      9 *   indentation:4
     10 *
     11 *   created on: 2011jun02
     12 *   created by: Markus W. Scherer
     13 *
     14 *   Titlecasing functions that are based on BreakIterator
     15 *   were moved here to break dependency cycles among parts of the common library.
     16 */
     17 
     18 #include "unicode/utypes.h"
     19 
     20 #if !UCONFIG_NO_BREAK_ITERATION
     21 
     22 #include "unicode/brkiter.h"
     23 #include "unicode/ubrk.h"
     24 #include "unicode/ucasemap.h"
     25 #include "cmemory.h"
     26 #include "ucase.h"
     27 #include "ustr_imp.h"
     28 
     29 U_NAMESPACE_USE
     30 
     31 U_CAPI const UBreakIterator * U_EXPORT2
     32 ucasemap_getBreakIterator(const UCaseMap *csm) {
     33     return csm->iter;
     34 }
     35 
     36 U_CAPI void U_EXPORT2
     37 ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * /*pErrorCode*/) {
     38     // Do not call ubrk_close() so that we do not depend on all of the BreakIterator code.
     39     delete reinterpret_cast<BreakIterator *>(csm->iter);
     40     csm->iter=iterToAdopt;
     41 }
     42 
     43 U_CAPI int32_t U_EXPORT2
     44 ucasemap_utf8ToTitle(UCaseMap *csm,
     45                      char *dest, int32_t destCapacity,
     46                      const char *src, int32_t srcLength,
     47                      UErrorCode *pErrorCode) {
     48     UText utext=UTEXT_INITIALIZER;
     49     utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode);
     50     if(U_FAILURE(*pErrorCode)) {
     51         return 0;
     52     }
     53     if(csm->iter==NULL) {
     54         csm->iter=ubrk_open(UBRK_WORD, csm->locale,
     55                             NULL, 0,
     56                             pErrorCode);
     57     }
     58     ubrk_setUText(csm->iter, &utext, pErrorCode);
     59     int32_t length=ucasemap_mapUTF8(csm,
     60                    (uint8_t *)dest, destCapacity,
     61                    (const uint8_t *)src, srcLength,
     62                    ucasemap_internalUTF8ToTitle, pErrorCode);
     63     utext_close(&utext);
     64     return length;
     65 }
     66 
     67 #endif  // !UCONFIG_NO_BREAK_ITERATION
     68