Hi Mirek,

thanks for pointing this out. This looks like a great site -- although, as
you say, will require some [longer term] study.

I'll have closer look at Smarty as well...


"Mirek Novak" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Hi,
>   I think that smarty [ http://smarty.php.net ] can do this for u. It
> has tag nesting and, of course, you can define your own tag as a plugin.
>
> As for performance problem - this is known "feature" of regexp. Solution
> is not simple. You, IMHO, have to rethink your approach. For parsing
> larger or complex files is much better to use state machine (finite
> state automaton). Try to search google for more theory. For ex.
> http://en.wikipedia.org/wiki/Finite_state_automaton
>
> Martin Helie wrote:
> > Hello,
> >
> > I'm writing a routine that recursively reads an HTML document, looking
for
> > "special tags". It's a template system, but contrary to what I've seen
out
> > there so far, no template engines allow for any kind of customization
from
> > within the document; they only seem to be variable replacement systems.
> >
> > What I have in mind is something along the lines of:
> >
> > <HTML>
> >     blah blah
> >     {MAGICTAG param1=a param2=b}some more {ANOTHERTAG}text{/ANOTHERTAG}
here
> > {/MAGICTAG}
> >     blah
> > </HTML>
> >
> > The text between ANOTHERTAG would first be changed and then passed along
> > with the other text to MAGICTAG. ie, the data is treated from the inside
> > out, and nesting is obviously supported.
> >
> > I've got everything working, but the problem is I'm using quite a few
"ereg"
> > statements recursively, so performance is not so good.
> >
> > Here's a simplified version of the core (it's part of a class, and I
> > modified the code for a "standalone" version here).
> >
> > Thanks in advance for any ideas. Feel free to recycle this code.
> >
> > function parse( $template ) {
> >
> >     //Look for (before*) {a tag} (after*) anything and store matches in
> > $regs
> >     if( ereg( "(.*)[{]([a-zA-Z0-9]+)[}](.*)", $template, $regs ) ) {
> >         $before = $regs[1];
> >         $tag     = $regs[2];
> >
> >         //Now look for (data*) {/closing tag} (after*) in the "after"
> > portion of first match
> >         if( ereg( "(.*)[{][/]" . $tag. "[}](.*)", $regs[3], $regs ) ) {
> >             $after = $regs[2];
> >             $data = $regs[1];
> >             $resolvedTag = initHandler( $tag, $data ); //handle this tag
and
> > data
> >         }
> >         //support for "standalone" tags (no {/closing tag} )
> >         else {
> >             ereg( "(.*)", $regs[3], $regs );
> >             $resolvedTag = getTagValue( $tag );
> >             $after = $regs[1];
> >         }
> >     }
> >     if( $resolvedTag ) {
> >         $template =
> >         $before
> >         . $resolvedTag
> >         . $after;
> >         parse( $template );
> >     }
> >     else {
> >         return $template;
> >     }
> > }
> >
>
> -- 
> Mirek Novak
>
> jabberID: [EMAIL PROTECTED]
> ICQ: 119499448

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to