about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2015-05-21 10:43:32 +0100
committerPeter Stephenson <pws@zsh.org>2015-05-21 10:43:32 +0100
commita95f2c607113b3edd411499ff25ce79fba8a79de (patch)
treef41ce77092cbd22f2cfc560ad6e63990b6629e64
parentafb78f5d142786169817709e6ec4c48637bcae93 (diff)
downloadzsh-a95f2c607113b3edd411499ff25ce79fba8a79de.tar.gz
zsh-a95f2c607113b3edd411499ff25ce79fba8a79de.tar.xz
zsh-a95f2c607113b3edd411499ff25ce79fba8a79de.zip
35250: Fix case documentation (SH_GLOB)
-rw-r--r--ChangeLog2
-rw-r--r--Doc/Zsh/grammar.yo16
-rw-r--r--Src/parse.c4
3 files changed, 15 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 4c1fe2116..b7019d8d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2015-05-21  Peter Stephenson  <p.stephenson@samsung.com>
 
+	* 35250: Doc/Zsh/grammar.yo: fix case documentation (SH_GLOB).
+
 	* 35248: Src/lex.c, Src/parse.c, Test/A01grammar.ztst:
 	treat fully parenthesised zsh patterns as complete
 	case patterns again.
diff --git a/Doc/Zsh/grammar.yo b/Doc/Zsh/grammar.yo
index a3f492769..4476fc392 100644
--- a/Doc/Zsh/grammar.yo
+++ b/Doc/Zsh/grammar.yo
@@ -239,11 +239,17 @@ item(tt(case) var(word) tt(in) [ [tt(LPAR())] var(pattern) [ tt(|) var(pattern)
 Execute the var(list) associated with the first var(pattern)
 that matches var(word), if any.  The form of the patterns
 is the same as that used for filename generation.  See
-noderef(Filename Generation).  Note further that the whole
-pattern with alternatives is treated by the shell as equivalent
-to a group of patterns within parentheses, even though in
-the tt(case) syntax whitespace may appear about the parentheses and the
-vertical bar.
+noderef(Filename Generation).
+
+Note further that, unless the tt(SH_GLOB) option is set, the whole
+pattern with alternatives is treated by the shell as equivalent to a
+group of patterns within parentheses, although white space may appear
+about the parentheses and the vertical bar and will be stripped from the
+pattern at those points.  White space may appear elsewhere in the
+pattern; this is not stripped.  If the tt(SH_GLOB) option is set, so
+that an opening parenthesis can be unambiguously treated as part of the
+case syntax, the expression is parsed into separate words and these are
+treated as strict alternatives (as in other shells).
 
 If the var(list) that is executed is terminated with tt(;&) rather than
 tt(;;), the following list is also executed.  The rule for
diff --git a/Src/parse.c b/Src/parse.c
index 053db3fe2..06cea744e 100644
--- a/Src/parse.c
+++ b/Src/parse.c
@@ -1183,7 +1183,7 @@ par_case(int *cmplx)
 	 *
 	 * The next token we get may be
 	 * - ")" or "|" if we're looking at an honest-to-god
-	 *   "case" patten, either because there's no opening
+	 *   "case" pattern, either because there's no opening
 	 *   parenthesis, or because SH_GLOB is set and we
 	 *   managed to grab an initial "(" to mark the start
 	 *   of the case pattern.
@@ -1196,7 +1196,7 @@ par_case(int *cmplx)
 	 *   the string, so may be separated by whitespace.
 	 *   So we quietly massage the whitespace and hope
 	 *   no one noticed.  This is horrible, but it's
-	 *   unfortunately too difficult to comine traditional
+	 *   unfortunately too difficult to combine traditional
 	 *   zsh patterns with a properly parsed case pattern
 	 *   without generating incompatibilities which aren't
 	 *   all that popular (I've discovered).