/***************************************************************************
stringtools.cpp - description
-------------------
begin : Mon Dec 10 2001
copyright : (C) 2001 by Andre Simon
email : andre.simon1@gmx.de
***************************************************************************/
/*
This file is part of Highlight.
Highlight is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Highlight is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Highlight. If not, see .
*/
#include "stringtools.h"
// Avoid problems with isspace and UTF-8 characters, use iswspace
//#include
using namespace std;
namespace StringTools
{
string change_case ( const string & s, const KeywordCase kcase ) throw()
{
string r ( s );
switch ( kcase )
{
case CASE_UNCHANGED:
break;
case CASE_CAPITALIZE:
case CASE_LOWER:
for ( unsigned int i = 0; i < r.size(); ++i )
r[i] = tolower ( r[i] );
if ( kcase == CASE_CAPITALIZE && r.size() )
r[0] = toupper ( r[0] );
break;
case CASE_UPPER:
for ( unsigned int i = 0; i < r.size(); ++i )
r[i] = toupper ( r[i] );
break;
}
return r;
}
string trimRight ( const string &value )
{
string::size_type where = value.find_last_not_of ( " \t\r" );
if ( where == string::npos )
// string has nothing but space
return string();
if ( where == ( value.length() - 1 ) )
// string has no trailing space, don't copy its contents
return value;
return value.substr ( 0, where + 1 );
}
string getParantheseVal ( const string &s )
{
string::size_type openPos=s.find ( '(' );
string::size_type closePos=s.rfind ( ')' );
if ( openPos ==string::npos || closePos==string::npos )
{
return string();
}
return s.substr ( openPos+1, closePos-openPos-1 );
}
vector splitString ( const string& s, unsigned char delim )
{
string::size_type pos=s.find ( delim ), oldPos=0;
vector results;
if ( pos ==string::npos )
{
if ( !s.empty() ) results.push_back ( s );
return results;
}
do
{
if ( oldPos-pos ) results.push_back ( s.substr ( oldPos, pos-oldPos ) );
oldPos=pos+1;
pos=s.find ( delim, pos+1 );
}
while ( pos!=string::npos );
results.push_back ( s.substr ( oldPos ) );
return results;
}
}