about summary refs log tree commit diff
path: root/Src/utils.c
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-02-18 09:37:17 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-02-18 09:37:17 +0000
commita76b8ea1a52442c2a287db12305b34c3e2b16f7f (patch)
tree61364d752642aa090038bb0dcfa587d1ce662c3c /Src/utils.c
parent680a2161a4cd2b26373408a3ca5f935ab17cc43d (diff)
downloadzsh-a76b8ea1a52442c2a287db12305b34c3e2b16f7f.tar.gz
zsh-a76b8ea1a52442c2a287db12305b34c3e2b16f7f.tar.xz
zsh-a76b8ea1a52442c2a287db12305b34c3e2b16f7f.zip
zsh-workers/9787
Diffstat (limited to 'Src/utils.c')
-rw-r--r--Src/utils.c33
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 ||