mu: convert command-line tools to c++

This commit is contained in:
Dirk-Jan C. Binnema
2020-06-08 23:04:05 +03:00
parent dd0cb3112a
commit a9fab4abcc
22 changed files with 425 additions and 529 deletions

View File

@ -195,18 +195,8 @@ Sexp::Node::to_string () const
break;
}
case Type::String:
//sstrm << quote(value());
sstrm << "\"";
for (auto&& k: value()) {
switch (k) {
case '"' : sstrm << "\\\""; break;
case '\\': sstrm << "\\\\"; break;
default: sstrm << k;
}
}
sstrm << "\"";
sstrm << quote(value());
break;
case Type::Number:
case Type::Symbol:
default:

View File

@ -309,7 +309,7 @@ typedef gpointer XapianEnquire;
} while (0)
#define MU_G_ERROR_CODE(GE) ((GE)&&(*(GE))?(*(GE))->code:MU_ERROR)
#define MU_G_ERROR_CODE(GE) ((GE)&&(*(GE))?(MuError)(*(GE))->code:MU_ERROR)
enum _MuError {

View File

@ -165,14 +165,17 @@ Mu::split (const std::string& str, const std::string& sepa)
std::string
Mu::quote (const std::string& str)
{
char *s = g_strescape (str.c_str(), NULL);
if (!s)
return {};
std::string res{"\""};
std::string res (s);
g_free (s);
for (auto&& k: str) {
switch (k) {
case '"' : res += "\\\""; break;
case '\\': res += "\\\\"; break;
default: res += k;
}
}
return "\"" + res + "\"";
return res + "\"";
}
std::string

View File

@ -65,7 +65,7 @@ std::vector<std::string> split (const std::string& str,
const std::string& sepa);
/**
* Quote & escape a string
* Quote & escape a string for " and \
*
* @param str a string
*