forked from bartvdbraak/blender
BLI_strescape for a basic, python like string escaping, currently only use for drag and drop ID's into the console but should eventually be used for the animsys too.
This commit is contained in:
parent
abff0032c4
commit
f6a2b8d724
@ -122,6 +122,8 @@ __attribute__ ((format (printf, 1, 2)))
|
|||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
|
size_t BLI_strescape(char *dst, const char *src, const size_t maxlen);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare two strings without regard to case.
|
* Compare two strings without regard to case.
|
||||||
*
|
*
|
||||||
|
@ -117,6 +117,49 @@ char *BLI_sprintfN(const char *format, ...)
|
|||||||
return n;
|
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':
|
||||||
|
*dst= '\0';
|
||||||
|
break;
|
||||||
|
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 */
|
||||||
|
*dst= '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* intentionally pass through */
|
||||||
|
default:
|
||||||
|
*dst = *src;
|
||||||
|
}
|
||||||
|
dst++;
|
||||||
|
src++;
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Makes a copy of the text within the "" that appear after some text 'blahblah'
|
/* 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"
|
* i.e. for string 'pose["apples"]' with prefix 'pose[', it should grab "apples"
|
||||||
*
|
*
|
||||||
|
@ -165,8 +165,11 @@ static void id_drop_copy(wmDrag *drag, wmDropBox *drop)
|
|||||||
{
|
{
|
||||||
char text[64];
|
char text[64];
|
||||||
ID *id= drag->poin;
|
ID *id= drag->poin;
|
||||||
|
char id_esc[(sizeof(id->name) - 2) * 2];
|
||||||
|
|
||||||
snprintf(text, sizeof(text), "bpy.data.%s['%s']", BKE_idcode_to_name_plural(GS(id->name)), id->name+2);
|
BLI_strescape(id_esc, id->name+2, sizeof(id_esc));
|
||||||
|
|
||||||
|
snprintf(text, sizeof(text), "bpy.data.%s[\"%s\"]", BKE_idcode_to_name_plural(GS(id->name)), id_esc);
|
||||||
|
|
||||||
/* copy drag path to properties */
|
/* copy drag path to properties */
|
||||||
RNA_string_set(drop->ptr, "text", text);
|
RNA_string_set(drop->ptr, "text", text);
|
||||||
|
Loading…
Reference in New Issue
Block a user