2#pragma warning(disable: 4244)
9void litehtml::trim(tstring &s)
11 tstring::size_type pos = s.find_first_not_of(_t(
" \n\r\t"));
12 if(pos != tstring::npos)
14 s.erase(s.begin(), s.begin() + pos);
16 pos = s.find_last_not_of(_t(
" \n\r\t"));
17 if(pos != tstring::npos)
19 s.erase(s.begin() + pos + 1, s.end());
23void litehtml::lcase(tstring &s)
25 for(tstring::iterator i = s.begin(); i != s.end(); i++)
31litehtml::tstring::size_type litehtml::find_close_bracket(
const tstring &s, tstring::size_type off, tchar_t open_b, tchar_t close_b)
34 for(tstring::size_type i = off; i < s.length(); i++)
39 }
else if(s[i] == close_b)
51int litehtml::value_index(
const tstring& val,
const tstring& strings,
int defValue, tchar_t delim )
53 if(val.empty() || strings.empty() || !delim)
59 tstring::size_type delim_start = 0;
60 tstring::size_type delim_end = strings.find(delim, delim_start);
61 tstring::size_type item_len = 0;
64 if(delim_end == tstring::npos)
66 item_len = strings.length() - delim_start;
69 item_len = delim_end - delim_start;
71 if(item_len == val.length())
73 if(val == strings.substr(delim_start, item_len))
79 delim_start = delim_end;
80 if(delim_start == tstring::npos)
break;
82 if(delim_start == strings.length())
break;
83 delim_end = strings.find(delim, delim_start);
88bool litehtml::value_in_list(
const tstring& val,
const tstring& strings, tchar_t delim )
90 int idx = value_index(val, strings, -1, delim);
98void litehtml::split_string(
const tstring& str, string_vector& tokens,
const tstring& delims,
const tstring& delims_preserve,
const tstring& quote)
100 if(str.empty() || (delims.empty() && delims_preserve.empty()))
105 tstring all_delims = delims + delims_preserve + quote;
107 tstring::size_type token_start = 0;
108 tstring::size_type token_end = str.find_first_of(all_delims, token_start);
109 tstring::size_type token_len = 0;
113 while( token_end != tstring::npos && quote.find_first_of(str[token_end]) != tstring::npos )
115 if(str[token_end] == _t(
'('))
117 token_end = find_close_bracket(str, token_end, _t(
'('), _t(
')'));
118 }
else if(str[token_end] == _t(
'['))
120 token_end = find_close_bracket(str, token_end, _t(
'['), _t(
']'));
121 }
else if(str[token_end] == _t(
'{'))
123 token_end = find_close_bracket(str, token_end, _t(
'{'), _t(
'}'));
126 token_end = str.find_first_of(str[token_end], token_end + 1);
128 if(token_end != tstring::npos)
130 token_end = str.find_first_of(all_delims, token_end + 1);
134 if(token_end == tstring::npos)
136 token_len = tstring::npos;
139 token_len = token_end - token_start;
142 token = str.substr(token_start, token_len);
145 tokens.push_back( token );
147 if(token_end != tstring::npos && !delims_preserve.empty() && delims_preserve.find_first_of(str[token_end]) != tstring::npos)
149 tokens.push_back( str.substr(token_end, 1) );
152 token_start = token_end;
153 if(token_start == tstring::npos)
break;
155 if(token_start == str.length())
break;
156 token_end = str.find_first_of(all_delims, token_start);
160void litehtml::join_string(tstring& str,
const string_vector& tokens,
const tstring& delims)
163 for(
size_t i=0; i<tokens.size(); ++i)