diff options
Diffstat (limited to 'source/blender/blenlib/intern/string.c')
-rw-r--r-- | source/blender/blenlib/intern/string.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c index 8e0314ec17f..ae5fa40f3b9 100644 --- a/source/blender/blenlib/intern/string.c +++ b/source/blender/blenlib/intern/string.c @@ -117,6 +117,51 @@ char *BLI_sprintfN(const char *format, ...) return n; } + +/* match pythons string escaping, assume double quotes - (") + * TODO: should be used to create RNA animation paths. + * TODO: support more fancy string escaping. current code is primitive + * this basically is an ascii version of PyUnicode_EncodeUnicodeEscape() + * which is a useful reference. */ +size_t BLI_strescape(char *dst, const char *src, const size_t maxlen) +{ + size_t len= 0; + while(len < maxlen) { + switch(*src) { + case '\0': + goto escape_finish; + case '\\': + case '"': + + /* less common but should also be support */ + case '\t': + case '\n': + case '\r': + if(len + 1 < maxlen) { + *dst++ = '\\'; + len++; + } + else { + /* not enough space to escape */ + break; + } + /* intentionally pass through */ + default: + *dst = *src; + } + dst++; + src++; + len++; + } + +escape_finish: + + *dst= '\0'; + + return len; +} + + /* Makes a copy of the text within the "" that appear after some text 'blahblah' * i.e. for string 'pose["apples"]' with prefix 'pose[', it should grab "apples" * |