diff options
author | Tanaka Akira <akr@users.sourceforge.net> | 2000-02-18 09:37:17 +0000 |
---|---|---|
committer | Tanaka Akira <akr@users.sourceforge.net> | 2000-02-18 09:37:17 +0000 |
commit | a76b8ea1a52442c2a287db12305b34c3e2b16f7f (patch) | |
tree | 61364d752642aa090038bb0dcfa587d1ce662c3c /Src | |
parent | 680a2161a4cd2b26373408a3ca5f935ab17cc43d (diff) | |
download | zsh-a76b8ea1a52442c2a287db12305b34c3e2b16f7f.tar.gz zsh-a76b8ea1a52442c2a287db12305b34c3e2b16f7f.tar.xz zsh-a76b8ea1a52442c2a287db12305b34c3e2b16f7f.zip |
zsh-workers/9787
Diffstat (limited to 'Src')
-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 || |