Re: [SMARTY-DEV] Regex bug?
| From: | boots | Date: | Wed, 07 May 2003 04:04:17 +0000 |
| Subject: | Re: [SMARTY-DEV] Regex bug? | ||
| References: | 1 | Groups: | php.smarty.dev |
| Request: | Send a blank email to php-smarty-dev+get-1397@lists.php.net to get a copy of this message | ||
--- Monte Ohrt <monte@ispi.net> wrote:
> It's not a bug.
Well, its not a feature!!
> You can never nest delimiters within delimiters in the Smarty
> language.
> The left delimiter works only because the parser is looking for a
> right
> delimiter at that moment, this wasn't intentional. Don't bury
> delimiters
> within delimiters or the regex engine will come to haunt you. ;-)
> Maybe
> if Smarty had a better parser one day, but for now it is based on
> regex.
Hmmm. That sucks. It won't even allow an {RDELIM} (obviously). Can't we
allow back-slash escaped delimiters within delimiters? Or am I stuck,
having to create $RDELIM and $LDELIM as well?
<off_topic>
Speaking of parsers, I wrote a very extendible (and abstracted) class
based stack parsing system that I believe deals with this case, even
though it was also regex based. I abandoned it because it was too much
work to maintain on my own and though it was moderately fast, it was
pretty rough, especially when excellent projects such as Smarty had
already matured. Since Smarty is less generalized, it is even faster
;). The biggest thing about it, though, was that you didn't have to
write regexs--it had external library(ies) of limited regexes (which
you could add to manually) and a very simple language for capture
patterns. It would compile that capture patterns to regexes which were
added to the library. You could then base new patterns on already
defined patterns, mixing and matching libraries.
It also supported generic replacement patterns (which could be either
preg_replace, preg_callback or preg_match based). A new parser was
arbitrary the combination of a ccapture and replace. Parsers could nest
other parsers which could either be loaded from a library(ies) or
created on the fly. Etc. I implemented a few toy languages with it and
a few text transforms (like bb->html, etc).
As I get more familiar with Smarty, I sometimes wonder if I could
implement Smarty's template language in my older system. I think it
would be neat if I re-imagined it as a simple type of YACC/Bison which
would have as a target PHP regex based parsers.
I suspect that better (non-regex) parsers can be built, but I dread to
consider the performance of a traditional parser written in PHP. one
thing about a generalized parser, though, is that it can be implemented
in C as a PHP module.
Anyhow, I know that a new parser is being considered for Smarty. I'm
curious to see what the gang cooks up. :)
</off_topic>
__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com