/*:* *: File: ./src/tool/tool.cpp *: *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT *: *: Copyright (C) 2003 Paul C. Buetow, Volker Richter *: Copyright (C) 2004 Paul C. Buetow *: Copyright (C) 2005 EXA Digital Solutions GbR *: Copyright (C) 2006, 2007 Paul C. Buetow *: *: This program 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 2 *: of the License, or (at your option) any later version. *: *: This program 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 this program; if not, write to the Free Software *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *:*/ #ifndef TOOL_CPP #define TOOL_CPP #include #include #include #include #include #include #include #include "tool.h" bool tool::is_alpha_numeric( string &s_digit ) { const char *p_digit = s_digit.c_str(); int i_len = strlen( p_digit ); for ( int i=0; i= '0' && *p_digit <='9') { i_res = (i_res * 10) + (*p_digit - '0'); p_digit++; } // Check that there were no non-digits at end. if (*p_digit != 0) { return -1; } return i_res; } string tool::to_lower( string s_str ) { string s_tmp(""); for ( int i = 0; i < s_str.size() ;i++ ) s_tmp = s_tmp + (char) tolower( s_str.at(i) ); return s_tmp; } void tool::strip_html( string *p_str) { int i_pos; if ( (i_pos=p_str->find("<", 0)) == string::npos ) return; while (true) { p_str->replace(i_pos, 1, "<"); if ( (i_pos = p_str->find("<", 0)) == string::npos ) return; } } string tool::ychat_version() { return "yChat " + string(VERSION) + "-" + string(BRANCH) + " Build " + int2string(BUILDNR); } list tool::split_string(string s_string, string s_split) { list list_ret; unsigned i_pos, i_len = s_split.length(); while ( (i_pos = s_string.find(s_split)) != (unsigned) string::npos ) { list_ret.push_back( s_string.substr(0, i_pos) ); s_string = s_string.substr( i_pos + i_len ); } list_ret.push_back( s_string ); return list_ret; } string tool::trim( string s_str ) { if ( s_str.empty() ) return s_str; char c_cur = s_str[0]; int i_pos = 0; // left trim while ( c_cur == ' '|| c_cur == '\n' || c_cur == '\r' ) { s_str.erase(i_pos,1); c_cur = s_str[++i_pos]; } // right trim i_pos = s_str.size(); c_cur = s_str[s_str.size()]; while ( c_cur == ' ' || c_cur == '\n' || c_cur == '\0' || c_cur == '\r' ) { s_str.erase(i_pos, 1); c_cur = s_str[--i_pos]; } return s_str; } char* tool::clean_char( char* c_str ) { // Ralf: for ( char* c_pos = c_str; *c_pos != '\0'; ++c_pos ) if ( iscntrl(*c_pos) ) *c_pos = ' '; return c_str; } string tool::replace( string s_string, string s_search, string s_replace ) { unsigned i_pos[2]; for ( i_pos[0] = s_string.find( s_search ); i_pos[0] != (unsigned) string::npos; i_pos[0] = s_string.find( s_search, i_pos[1] ) ) { s_string.replace( i_pos[0], s_search.length(), s_replace ); i_pos[1] = i_pos[0] + s_replace.length(); } return s_string; } string tool::get_extension( string s_file ) { int i_pos = s_file.find_last_of("."); if ( i_pos != string::npos ) { string s_ext = s_file.substr(i_pos+1, s_file.size()-i_pos-1 ); for ( int i = 0; i < s_ext.size(); ++i ) s_ext[i] = tolower(s_ext[i]); return to_lower(s_ext); } return ""; } char* tool::int2char( int i_int ) { char *buf = new char[64]; sprintf(buf, "%d", i_int); return buf; } string tool::shell_command( string s_command, method m_method ) { FILE *file; char buf[READBUF]; char *c_pos; string s_ret = ""; wrap::system_message(SHELLEX); wrap::system_message(s_command); if ( (file=popen(s_command.c_str(), "r")) == NULL ) { wrap::system_message( SHELLER ); } else { while (true) { if (fgets(buf, READBUF, file) == NULL) break; switch (m_method) { default: s_ret.append("\n" + string(buf)); } // switch } pclose(file); } return s_ret; } string tool::url_decode( string s_url ) { string s_dest = ""; int i_len = s_url.size(); int i_prv = i_len - 2; char c; for ( int i = 0; i < i_len; ++i) { c = s_url.at(i); if ( c == '+' ) { s_dest += " "; } else if (c == '%' && i < i_prv) { string s_tmp = s_url.substr(i+1, 2); c = (char) htoi(s_tmp); s_dest += c; i += 2; } else { s_dest += c; } } return s_dest; } int tool::htoi(string &s_str) { int value, c; c = s_str.at(0); if ( isupper(c) ) c = tolower(c); value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16; c = s_str.at(1); if ( isupper(c) ) c = tolower(c); value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10; return value; } #endif