Home | History | Annotate | Download | only in common
      1 /*
      2 *******************************************************************************
      3 *
      4 *   Copyright (C) 1999-2007, International Business Machines
      5 *   Corporation and others.  All Rights Reserved.
      6 *
      7 *******************************************************************************
      8 *   file name:  unistr_props.cpp
      9 *   encoding:   US-ASCII
     10 *   tab size:   8 (not used)
     11 *   indentation:2
     12 *
     13 *   created on: 2004aug25
     14 *   created by: Markus W. Scherer
     15 *
     16 *   Character property dependent functions moved here from unistr.cpp
     17 */
     18 
     19 #include "unicode/utypes.h"
     20 #include "unicode/uchar.h"
     21 #include "unicode/unistr.h"
     22 
     23 U_NAMESPACE_BEGIN
     24 
     25 UnicodeString&
     26 UnicodeString::trim()
     27 {
     28   if(isBogus()) {
     29     return *this;
     30   }
     31 
     32   UChar *array = getArrayStart();
     33   UChar32 c;
     34   int32_t oldLength = this->length();
     35   int32_t i = oldLength, length;
     36 
     37   // first cut off trailing white space
     38   for(;;) {
     39     length = i;
     40     if(i <= 0) {
     41       break;
     42     }
     43     U16_PREV(array, 0, i, c);
     44     if(!(c == 0x20 || u_isWhitespace(c))) {
     45       break;
     46     }
     47   }
     48   if(length < oldLength) {
     49     setLength(length);
     50   }
     51 
     52   // find leading white space
     53   int32_t start;
     54   i = 0;
     55   for(;;) {
     56     start = i;
     57     if(i >= length) {
     58       break;
     59     }
     60     U16_NEXT(array, i, length, c);
     61     if(!(c == 0x20 || u_isWhitespace(c))) {
     62       break;
     63     }
     64   }
     65 
     66   // move string forward over leading white space
     67   if(start > 0) {
     68     doReplace(0, start, 0, 0, 0);
     69   }
     70 
     71   return *this;
     72 }
     73 
     74 U_NAMESPACE_END
     75