diff options
author | Pavel Labath <pavelo@centrum.sk> | 2011-08-18 22:23:09 (GMT) |
---|---|---|
committer | Pavel Labath <pavelo@centrum.sk> | 2011-11-01 10:04:03 (GMT) |
commit | b29a8af7434eca71dd56094f0a20fef6d683212e (patch) | |
tree | 66c2e23a82ba1bd55394b3c2fe201408769de31d /src/FbTk/Luamm.cc | |
parent | 45451301f8b33626f6799061d2815c1d5080d3aa (diff) | |
download | fluxbox_paul-b29a8af7434eca71dd56094f0a20fef6d683212e.zip fluxbox_paul-b29a8af7434eca71dd56094f0a20fef6d683212e.tar.bz2 |
Add lua::quote function, for safe (and pretty) quoting of strings
Diffstat (limited to 'src/FbTk/Luamm.cc')
-rw-r--r-- | src/FbTk/Luamm.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/FbTk/Luamm.cc b/src/FbTk/Luamm.cc index 8824b06..3b0c4ba 100644 --- a/src/FbTk/Luamm.cc +++ b/src/FbTk/Luamm.cc | |||
@@ -219,6 +219,30 @@ namespace lua { | |||
219 | l->replace(-2); | 219 | l->replace(-2); |
220 | } | 220 | } |
221 | 221 | ||
222 | std::string quote(const std::string &str) | ||
223 | { | ||
224 | std::string bad = "\n\\"; | ||
225 | bad += '\0'; | ||
226 | |||
227 | // first try to quote using normal quotes without escaping | ||
228 | if(str.find_first_of(bad + '"') == std::string::npos) | ||
229 | return '"' + str + '"'; | ||
230 | else if(str.find_first_of(bad + '\'') == std::string::npos) | ||
231 | return '\'' + str + '\''; | ||
232 | |||
233 | // use long quotes | ||
234 | bad.clear(); | ||
235 | |||
236 | // find the first long quote that works | ||
237 | while(str.find(']' + bad + ']') != std::string::npos) | ||
238 | bad += '='; | ||
239 | |||
240 | std::string out = '[' + bad + '['; | ||
241 | if(str.find('\n') != std::string::npos) | ||
242 | out += '\n'; | ||
243 | return out + str + ']' + bad + ']'; | ||
244 | } | ||
245 | |||
222 | state::state() | 246 | state::state() |
223 | : cobj(luaL_newstate()), valid(new bool(true)) | 247 | : cobj(luaL_newstate()), valid(new bool(true)) |
224 | { | 248 | { |