zsh-workers
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>,
	<zsh-workers@sunsite.dk>
Subject: Re: Patterns quoting in subscript (was: Re: PATCH: Assorted parameter stuff)
Date: Wed, 18 Apr 2001 07:38:53 +0000	[thread overview]
Message-ID: <1010418073853.ZM28977@candle.brasslantern.com> (raw)
In-Reply-To: <Pine.SV4.4.33.0104172214250.9148-100000@itsrm2.mow.siemens.ru>

On Apr 17, 10:30pm, Andrej Borsenkow wrote:
}
} At least one thing has changed (but I consider behaviour broken in
} anyway):
} 
} bor@itsrm2:~%> foo=(a '?' '\?')
} bor@itsrm2:~%> print -r $foo[(r)?]
} a
} bor@itsrm2:~%> print -r $foo[(r)\?]
} ?
} bor@itsrm2:~%> print -r $foo[(r)\\?]
} ?
} bor@itsrm2:~%> print -r $foo[(r)\\\?]
} ?

You just didn't try enough backslashes yet:

schaefer[507] print -r $foo[(r)\\\\\?]
\?

The reason you need five is that [...] is parsed as if double quoted,
except that \] is magic instead of \".  Then the pattern inside it is
tokenized by (r) before being passed to patcompile().  So it goes like:

     parse        tokenize     pattern
    \\ \\ \?  -->  \\ \?   -->   \?

(In double quotes, \\ --> \ but \? --> \?.)

} Both are broken. Without patch you have at least some (albeit completely
} unclear) possibility to quote patterns in subscript - with patch even this
} one is gone.

Not true.  Without the patch you can't explain the rationale for quoting,
but with the patch it's predictable.  Similarly, without the patch this
fails utterly:

schaefer[508] x='\?'
schaefer[509] print -r $foo[(r)${(q)x}]
\?

But with the patch it's possible to explain why it works:

     parse       tokenize     pattern
    ${(q)x}  -->  \\ \?   -->   \?
 
} Suggestion is something like
} 
} $foo[()pattern] - is parsed just like a "normal" globbing pattern, taking
} in account any quoting. I.e. in $foo[(r)\*$bar] neither ``*'' nor contents
} of $bar is taken as pattern.

Unfortunately, this is a significant change in zsh semantics.  I don't
think we have the opportunity to do this any longer.  It may be too bad
that this wasn't originally the spec, but I think we're stuck with the
current interpretation of [(r)$bar].
 
} Special consideration is needed for double quotes. Because normally
} "$foo[(r)\?]" is parsed as *two* characters - ``\'' and ``?'', to allow
} quoting inside double-quotes extension of quoting rules is needed. I.e.
} ``\'' should be allowed to quote pattern metacharacters inside of
} subscript.

You'll note that with my patch the quoting inside and outside of double
quotes works exactly the same (except of course for the double-quote
character itself).  That is,

schaefer[513] print -r "$foo[(r)\\\\\?]"
\?

Five backslashes, just as before; same result.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   


  reply	other threads:[~2001-04-18  8:15 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-04-15  8:06 PATCH: Assorted parameter stuff Bart Schaefer
2001-04-17  3:54 ` Example from manual seems broken F. G. Marx
2001-04-17  4:45   ` Bart Schaefer
2001-04-18  6:57     ` PATCH: Assorted parameter stuff Bart Schaefer
2001-04-18  8:44       ` Sven Wischnowsky
2001-04-19  3:57         ` Bart Schaefer
2001-04-19  7:05           ` Sven Wischnowsky
2001-04-19  8:53             ` fpath problem on clean install Andrej Borsenkow
2001-04-19  9:50               ` PATCH: " Sven Wischnowsky
2001-04-19 14:02                 ` Andrej Borsenkow
2001-04-19  9:20             ` PATCH: Assorted parameter stuff Andrej Borsenkow
2001-04-19  9:47               ` Bart Schaefer
2001-04-19  9:34             ` Bart Schaefer
2001-04-20  5:20               ` Bart Schaefer
2001-04-17 18:30 ` Patterns quoting in subscript (was: Re: PATCH: Assorted parameter stuff) Andrej Borsenkow
2001-04-18  7:38   ` Bart Schaefer [this message]
2001-04-18  8:10     ` Bart Schaefer
2001-04-18  8:34     ` Andrej Borsenkow
2001-04-18  8:45     ` Andrej Borsenkow
2001-04-18 17:26       ` Bart Schaefer
2001-04-18 20:14         ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1010418073853.ZM28977@candle.brasslantern.com \
    --to=schaefer@candle.brasslantern.com \
    --cc=Andrej.Borsenkow@mow.siemens.ru \
    --cc=zsh-workers@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).