36 std::string
form(
const char * format, ... )
41 va_start( ap, format );
42 vasprintf( &safe.
_buf, format, ap );
65 std::string t(
toLower( str ) );
72 || strtonum<long long>( str )
83 std::string t(
toLower( str ) );
105 inline bool heIsAlNum(
char ch )
107 return ( (
'a' <= ch && ch <=
'z' )
108 ||(
'A' <= ch && ch <=
'Z' )
109 ||(
'0' <= ch && ch <=
'9' ) );
112 inline int heDecodeCh(
char ch )
114 if (
'0' <= ch && ch <=
'9' )
116 if (
'A' <= ch && ch <=
'F' )
117 return( ch -
'A' + 10 );
118 if (
'a' <= ch && ch <=
'f' )
119 return( ch -
'a' + 10 );
126 static const char *
const hdig =
"0123456789ABCDEF";
128 res.reserve( str_r.
size() );
129 for (
const char * it = str_r.
c_str(); *it; ++it )
131 if ( heIsAlNum( *it ) )
138 res += hdig[(
unsigned char)(*it)/16];
139 res += hdig[(
unsigned char)(*it)%16];
148 res.reserve( str_r.
size() );
153 int d1 = heDecodeCh( *(it+1) );
156 int d2 = heDecodeCh( *(it+2) );
178 {
return toLower( std::string(s) ); }
182 std::string ret( std::move(s) );
189 if ( isupper( ret[i] ) )
190 ret[i] = static_cast<char>(tolower( ret[i] ));
201 {
return toUpper( std::string(s) ); }
205 std::string ret( std::move(s) );
212 if ( islower( ret[i] ) )
213 ret[i] = static_cast<char>(toupper( ret[i] ));
223 std::string
trim(
const std::string & s,
const Trim trim_r )
224 {
return trim( std::string(s), trim_r ); }
226 std::string
trim( std::string && s,
const Trim trim_r )
228 std::string ret( std::move(s) );
230 if ( ret.empty() || trim_r ==
NO_TRIM )
236 if ( p == std::string::npos )
247 if ( p == std::string::npos )
252 ret = ret.erase( p+1 );
266 line =
ltrim( line );
274 if ( p == std::string::npos ) {
278 }
else if ( p == 0 ) {
281 line =
ltrim( line );
285 ret = line.substr( 0, p );
286 line =
ltrim( line.erase( 0, p ) );
299 line =
rtrim( line );
307 if ( p == std::string::npos ) {
311 }
else if ( p == line.size()-1 ) {
314 line =
rtrim( line );
318 ret = line.substr( p+1 );
319 line =
rtrim( line.erase( p ) );
324 std::string
gsub(
const std::string & str_r,
const std::string & from_r,
const std::string & to_r )
326 std::string ret( str_r );
330 std::string &
replaceAll( std::string & str_r,
const std::string & from_r,
const std::string & to_r )
332 if ( ! from_r.empty() )
335 while ( (pos = str_r.find( from_r, pos )) != std::string::npos )
337 str_r.replace( pos, from_r.size(), to_r );
340 if ( pos >= str_r.length() )
347 std::string
gsubFun(
const std::string & str_r,
const std::string & from_r,
function<std::string()> to_r )
349 std::string ret( str_r );
353 std::string &
replaceAllFun( std::string & str_r,
const std::string & from_r,
function<std::string()> to_r )
355 if ( ! from_r.empty() )
358 while ( (pos = str_r.find( from_r, pos )) != std::string::npos )
360 std::string to( to_r() );
361 str_r.replace( pos, from_r.size(), to );
364 if ( pos >= str_r.length() )
373 std::vector<char> buf;
381 buf.push_back(
'\\' );
386 buf.push_back(
'\\' );
390 return std::string( buf.begin(), buf.end() );
399 if ( str_r.find_first_of( special_r ) == std::string::npos
400 && ( ::strchr( special_r.
c_str(),
'\\' ) || !::strchr( str_r.c_str(),
'\\' ) ) )
404 for_( s, str_r.c_str(), s+str_r.size() )
406 if ( *s ==
'\\' || ::strchr( special_r.
c_str(), *s ) )
413 #define RXSPECIALCHARS "\\.*+?^$[()|{"
429 for_( s, str_r.c_str(), s+str_r.size() )
434 if ( *(s+1) ) { ++s; buf << *s; }
436 else if ( *s ==
'?' )
440 else if ( *s ==
'*' )
444 else if ( *s ==
'[' )
446 const char * e = s+1;
447 if ( *e ==
'^' || *e ==
'!' )
451 while ( *e && *e !=
']' )
455 ++s; buf <<
'[' << (*s ==
'!' ?
'^' : *s );
483 std::string
getline( std::istream & str,
bool trim_r )
488 std::string
receiveUpTo( std::istream & str,
const char delim_r,
bool returnDelim_r )
490 std::ostringstream datas;
509 if ( str.eof() && datas.tellp() )
510 str.clear( std::ios::eofbit );