diff options
Diffstat (limited to 'Src/utils.c')
-rw-r--r-- | Src/utils.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Src/utils.c b/Src/utils.c index e1214302c..92963092d 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -2819,6 +2819,39 @@ bslashquote(const char *s, char **e, int instring) } continue; } + else if (*u == Tick || *u == Qtick) { + char c = *u++; + + *v++ = c; + while (*u && *u != c) + *v++ = *u++; + *v++ = c; + if (!*u) + u--; + continue; + } + else if ((*u == String || *u == Qstring) && + (u[1] == Inpar || u[1] == Inbrack || u[1] == Inbrace)) { + char c = (u[1] == Inpar ? Outpar : (u[1] == Inbrace ? + Outbrace : Outbrack)); + char beg = *u; + int level = 0; + + *v++ = *u++; + *v++ = *u++; + while (*u && (*u != c || level)) { + if (*u == beg) + level++; + else if (*u == c) + level--; + *v++ = *u++; + } + if (*u) + *v++ = *u; + else + u--; + continue; + } else if (ispecial(*u) && ((*u != '=' && *u != '~') || u == s || |