X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FTraits.cc;h=64dadeda72caaacba26f366cff6213a407e8a253;hb=52a6fb56dce12132287e181b787d2474d93b0183;hp=c1e1cbc671b9a3c142a36967a55aa507676576af;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Utils/Console/Traits.cc b/senf/Utils/Console/Traits.cc index c1e1cbc..64daded 100644 --- a/senf/Utils/Console/Traits.cc +++ b/senf/Utils/Console/Traits.cc @@ -27,12 +27,35 @@ #include "Traits.ih" // Custom includes -#include "../../Utils/senfassert.hh" +#include +#include //#include "Traits.mpp" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// +prefix_ std::string senf::console::ArgumentTraits::str(std::string const & value) +{ + if (! value.empty() && boost::algorithm::all(value, CommandParser::isWordChar)) + return value; + else { + std::string rv (value); + for (std::string::size_type i (0); i < rv.size(); ++i) + if (rv[i] == '"' || rv[i] == '\\') + rv.insert(i++,"\\"); + else if (rv[i] < ' ' || rv[i] > 126) { + rv.insert(i+1, (boost::format("x%02x") + % unsigned(static_cast(rv[i]))).str().c_str()); + rv[i] = '\\'; + i += 3; + } + + rv.insert(0,"\""); + rv.push_back('"'); + return rv; + } +} + prefix_ long senf::console::detail::parseEnum(EnumTable const & table, ParseCommandInfo::TokensRange const & tokens) {