#include <algorithm>
#include <list>
#include <stdexcept>
+#include <cctype>
#include "utils.h"
using namespace std;
return result;
}
+string &append(string &str, const string &sep, const string &other)
+{
+ if(!str.empty() && !other.empty())
+ str += sep;
+ str += other;
+ return str;
+}
+
+string join(const string &str1, const string &sep, const string &str2)
+{
+ string result = str1;
+ return append(result, sep, str2);
+}
+
string c_unescape(const std::string &str)
{
bool escape = false;
result += "\\\\";
else if(static_cast<unsigned char>(*i)<' ' || (escape_8bit && (*i&0x80)))
{
- char buf[4] = {'\\', '0'+((*i>>6)&3), '0'+((*i>>3)&7), '0'+(*i&7)};
+ char buf[4] = { '\\', 0 };
+ for(unsigned j=0; j<3; ++j)
+ buf[1+j] = '0'+((static_cast<unsigned char>(*i)>>(6-j*3))&7);
result.append(buf, 4);
}
else