37    std::string 
form( 
const char * format, ... )
 
   42      va_start( ap, format );
 
   43      vasprintf( &safe.
_buf, format, ap );
 
 
 
  106      inline bool heIsAlNum( 
char ch )
 
  108        return ( ( 
'a' <= ch && ch <= 
'z' )
 
  109               ||( 
'A' <= ch && ch <= 
'Z' )
 
  110               ||( 
'0' <= ch && ch <= 
'9' ) );
 
  113      inline int heDecodeCh( 
char ch )
 
  115        if ( 
'0' <= ch && ch <= 
'9' )
 
  117        if ( 
'A' <= ch && ch <= 
'F' )
 
  118          return( ch - 
'A' + 10 );
 
  119        if ( 
'a' <= ch && ch <= 
'f' )
 
  120          return( ch - 
'a' + 10 );
 
  127      static const char *
const hdig = 
"0123456789ABCDEF";
 
  129      res.reserve( str_r.
size() );
 
  130      for ( 
const char * it = str_r.
c_str(); *it; ++it )
 
  132        if ( heIsAlNum( *it ) )
 
  139          res += hdig[(
unsigned char)(*it)/16];
 
  140          res += hdig[(
unsigned char)(*it)%16];
 
 
  149      res.reserve( str_r.
size() );
 
  154          int d1 = heDecodeCh( *(it+1) );
 
  157            int d2 = heDecodeCh( *(it+2) );
 
 
  179    { 
return toLower( std::string(s) ); }
 
 
  183      std::string ret( std::move(s) );
 
  188      for ( std::string::size_type i = 0; i < ret.length(); ++i )
 
  190          if ( isupper( ret[i] ) )
 
  191            ret[i] = 
static_cast<char>(tolower( ret[i] ));
 
 
  202    { 
return toUpper( std::string(s) ); }
 
 
  206      std::string ret( std::move(s) );
 
  211      for ( std::string::size_type i = 0; i < ret.length(); ++i )
 
  213          if ( islower( ret[i] ) )
 
  214            ret[i] = 
static_cast<char>(toupper( ret[i] ));
 
 
  224    std::string 
trim( 
const std::string & s, 
const Trim trim_r )
 
  225    { 
return trim( std::string(s), trim_r ); }
 
 
  227    std::string 
trim( std::string && s, 
const Trim trim_r )
 
  229      std::string ret( std::move(s) );
 
  231      if ( ret.empty() || trim_r == 
NO_TRIM )
 
  236        std::string::size_type p = ret.find_first_not_of( 
" \t\n" );
 
  237        if ( p == std::string::npos )
 
  247        std::string::size_type p = ret.find_last_not_of( 
" \t\n" );
 
  248        if ( p == std::string::npos )
 
  253        ret = ret.erase( p+1 );
 
 
  267        line = 
ltrim( line );
 
  273      std::string::size_type p = line.find_first_of( 
" \t" );
 
  275      if ( p == std::string::npos ) {
 
  279      } 
else if ( p == 0 ) {
 
  282        line = 
ltrim( line );
 
  286        ret = line.substr( 0, p );
 
  287        line = 
ltrim( line.erase( 0, p ) );
 
 
  300        line = 
rtrim( line );
 
  306      std::string::size_type p = line.find_last_of( 
" \t" );
 
  308      if ( p == std::string::npos ) {
 
  312      } 
else if ( p == line.size()-1 ) {
 
  315        line = 
rtrim( line );
 
  319        ret = line.substr( p+1 );
 
  320        line = 
rtrim( line.erase( p ) );
 
 
  325    std::string 
gsub( 
const std::string & str_r, 
const std::string & from_r, 
const std::string & to_r )
 
  327      std::string ret( str_r );
 
 
  331    std::string & 
replaceAll( std::string & str_r, 
const std::string & from_r, 
const std::string & to_r )
 
  333      if ( ! from_r.empty() )
 
  335        std::string::size_type pos = 0;
 
  336        while ( (pos = str_r.find( from_r, pos )) != std::string::npos )
 
  338          str_r.replace( pos, from_r.size(), to_r );
 
  341          if ( pos >= str_r.length() )
 
 
  348    std::string 
gsubFun( 
const std::string & str_r, 
const std::string & from_r, function<std::string()> to_r )
 
  350      std::string ret( str_r );
 
 
  354    std::string & 
replaceAllFun( std::string & str_r, 
const std::string & from_r, 
const function<std::string()>& to_r )
 
  356      if ( ! from_r.empty() )
 
  358        std::string::size_type pos = 0;
 
  359        while ( (pos = str_r.find( from_r, pos )) != std::string::npos )
 
  361          std::string to( to_r() );
 
  362          str_r.replace( pos, from_r.size(), to );
 
  365          if ( pos >= str_r.length() )
 
 
  374      std::vector<char> buf;
 
  382          buf.push_back( 
'\\' );
 
  387            buf.push_back( 
'\\' );
 
  391      return std::string( buf.begin(), buf.end() );
 
 
  400      if ( str_r.find_first_of( special_r ) == std::string::npos
 
  401        && ( ::strchr( special_r.
c_str(), 
'\\' ) ||  !::strchr( str_r.c_str(), 
'\\' ) ) )
 
  405      for_( s, str_r.c_str(), s+str_r.size() )
 
  407        if ( *s == 
'\\' || ::strchr( special_r.
c_str(), *s ) )
 
 
  414    #define RXSPECIALCHARS "\\.*+?^$[()|{" 
  430      for_( s, str_r.c_str(), s+str_r.size() )
 
  435          if ( *(s+1) ) { ++s; buf << *s; }
 
  437        else if ( *s == 
'?' )   
 
  441        else if ( *s == 
'*' )   
 
  445        else if ( *s == 
'[' )   
 
  447          const char * e = s+1;
 
  448          if ( *e == 
'^' || *e == 
'!' ) 
 
  452          while ( *e && *e != 
']' )     
 
  456            ++s;  buf << 
'[' << (*s == 
'!' ? 
'^' : *s );
 
 
  489    std::string 
receiveUpTo( std::istream & 
str, 
const char delim_r, 
bool returnDelim_r )
 
  491      std::ostringstream datas;
 
  510          if ( 
str.eof() && datas.tellp() )
 
  511            str.clear( std::ios::eofbit );
 
 
Convenience char* constructible from std::string and char*, it maps (char*)0 to an empty string.
const char * c_str() const
String related utilities and Regular expression matching.
String related utilities and Regular expression matching.
std::string stripLastWord(std::string &line, const bool rtrim_first)
std::string hexdecode(const C_Str &str_r)
Decode hexencoded XX sequences.
Trim
To define how to trim.
std::string hexencode(const C_Str &str_r)
Encode all characters other than [a-zA-Z0-9] as XX.
std::string & replaceAll(std::string &str_r, const std::string &from_r, const std::string &to_r)
Replace all occurrences of from_r with to_r in str_r (inplace).
std::string gsubFun(const std::string &str_r, const std::string &from_r, function< std::string()> to_r)
bool strToTrue(const C_Str &str)
Parsing boolean from string.
TriBool strToTriBool(const C_Str &str)
Parse str into a bool if it's a legal true or false string; else indeterminate.
std::string rxEscapeGlob(std::string str_r)
Escape GLOB str_r for use in a regex (not anchored by "^" or "$").
std::string stripFirstWord(std::string &line, const bool ltrim_first)
std::string escape(const C_Str &str_r, const char sep_r)
Escape desired character c using a backslash.
std::string toLower(const std::string &s)
Return lowercase version of s.
std::string receiveUpTo(std::istream &str, const char delim_r, bool returnDelim_r)
Return stream content up to the next ocurrence of delim_r or EOF delim_r, if found,...
std::string rtrim(const std::string &s)
std::string strerror(int errno_r)
Return string describing the error_r code.
std::string gsub(const std::string &str_r, const std::string &from_r, const std::string &to_r)
Return a string with all occurrences of from_r replaced with to_r.
std::string toUpper(const std::string &s)
Return uppercase version of s.
std::string ltrim(const std::string &s)
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
std::string bEscape(std::string str_r, const C_Str &special_r)
Return str_r with '\'-escaped chars occurring in special_r (and '\').
std::string & replaceAllFun(std::string &str_r, const std::string &from_r, const function< std::string()> &to_r)
std::string rxEscapeStr(std::string str_r)
Escape plain STRING str_r for use in a regex (not anchored by "^" or "$").
std::string getline(std::istream &str, const Trim trim_r)
Return stream content up to (but not returning) the next newline.
TInt strtonum(const C_Str &str)
Parsing numbers from string.
bool strToFalse(const C_Str &str)
Return false if str is 0, false, no, off, never.
std::string trim(const std::string &s, const Trim trim_r)
Easy-to use interface to the ZYPP dependency resolver.
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
Assert free called for allocated char *.
std::string asString() const
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...
#define for_(IT, BEG, END)
Convenient for-loops using iterator.