/*
* Copyright 2005, 2006, 2007 Florian Schmitz
*
* This file is part of CSSTidy.
*
* CSSTidy is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* CSSTidy 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
#include
#include "csspp_globals.hpp"
bool escaped(const string &istring, const int pos)
{
return !(s_at(istring,pos-1) != '\\' || escaped(istring,pos-1));
}
// Save replacement for .at()
char s_at(const string &istring, const int pos)
{
if(pos > (istring.length()-1) && pos < 0)
{
return 0;
}
else
{
return istring[pos];
}
}
vector explode(const string e,string s, const bool check)
{
vector ret;
int iPos = s.find(e, 0);
int iPit = e.length();
while(iPos > -1)
{
if(iPos != 0 || check)
{
ret.push_back(s.substr(0,iPos));
}
s.erase(0,iPos+iPit);
iPos = s.find(e, 0);
}
if(s != "" || check)
{
ret.push_back(s);
}
return ret;
}
string implode(const string e,const vector s)
{
string ret;
for(int i = 0; i < s.size(); i++)
{
ret += s[i];
if(i != (s.size()-1)) ret += e;
}
return ret;
}
string build_value(const vector subvalues)
{
string ret;
for(int i = 0; i < subvalues.size(); i++)
{
ret += subvalues[i];
if(i != (subvalues.size()-1))
{
char last = s_at(subvalues[i], subvalues[i].length()-1);
char next = s_at(subvalues[i+1], 0);
if (strchr("(,=:", last) != NULL || strchr("),=:", next) != NULL)
{
continue;
}
ret += " ";
}
}
return ret;
}
float round(const float &number, const int num_digits)
{
float doComplete5i, doComplete5(number * powf(10.0f, (float) (num_digits + 1)));
if(number < 0.0f)
doComplete5 -= 5.0f;
else
doComplete5 += 5.0f;
doComplete5 /= 10.0f;
modff(doComplete5, &doComplete5i);
return doComplete5i / powf(10.0f, (float) num_digits);
}
string str_replace(const string find, const string replace, string str)
{
int len = find.length();
int replace_len = replace.length();
int pos = str.find(find);
while(pos != string::npos)
{
str.replace(pos, len, replace);
pos = str.find(find, pos + replace_len);
}
return str;
}
string str_replace(const vector& find, const string replace, string str)
{
int replace_len = replace.length();
for(int i = 0; i < find.size(); ++i)
{
int len = find[i].length();
int pos = str.find(find[i]);
while(pos != string::npos)
{
str.replace(pos, len, replace);
pos = str.find(find[i], pos + replace_len);
}
}
return str;
}
bool in_char_arr(const char* haystack, const char needle)
{
for(int i = 0; i < strlen(haystack); ++i)
{
if(haystack[i] == needle)
{
return true;
}
}
return false;
}
bool in_str_array(const string& haystack, const char needle)
{
return (haystack.find_first_of(needle,0) != string::npos);
}
bool in_str_array(const vector& haystack, const string needle)
{
for(int i = 0; i < haystack.size(); ++i)
{
if(haystack[i] == needle)
{
return true;
}
}
return false;
}
string htmlspecialchars(string istring, int quotes)
{
istring = str_replace("&","&",istring);
istring = str_replace("<","<",istring);
istring = str_replace(">",">",istring);
if(quotes > 0) istring = str_replace("\"",""",istring);
if(quotes > 1) istring = str_replace("'","'",istring);
return istring;
}
int max(const int i1, const int i2)
{
if(i1 > i2)
{
return i1;
}
else
{
return i2;
}
}
bool ctype_space(const char c)
{
return (c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == 11);
}
bool ctype_digit(const char c)
{
return (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9');
}
vector unserialise_sa(const string istring)
{
int strlen = istring.length();
int strpos = 0;
vector ret;
while(strlen > 0)
{
string digit_tmp = "";
for(int i = strpos; ctype_digit(s_at(istring,i)); i++)
{
digit_tmp += istring[i];
--strlen; ++strpos;
}
// :
--strlen; ++strpos;
int next_length = static_cast(str2f(digit_tmp));
next_length += strpos;
string string_tmp = "";
for(int i = strpos; (i