I'm in the process of converting an old (undocumented) template language
into TT templates. The old template system allow tags within tags, and
AFAIK, TT does not allow this.
After initial conversion I end up with a TT template that contains tags
like this:
[% popup('begin','[% embed('22478997-9520-4d0f-8abc-f888e2434c81', {
type => 'image', mimetype => 'image/gif' } ) %] What have you learned',
{ event => 'onclick', title => '[%
link('22478997-9520-4d0f-8abc-f888e2434c81') %]' } ) %]
PS: popup() is a function to create a popup-window (in HTML), embed()
returns the correct <img> tag, and link() returns a pretty formatted <a>.
PS2: I know there are some bogus single-quotes in that statement aswell.
Hopefully it will not be a problem with my proposed solution.
My first initial reaction was to try and remove the inner tags, add a
terminating single quote and use a string concatenation character to
include the output of the embed() function directly into the string. I
researched the mailinglist, but found no string concatenation character
in TT. Only some references to "." or "~" that didn't work. But I found
a reference that suggested [% INCLUDE [% value %] %] be changed to [%
INCLUDE $value %] which should work. This got me thinking that something
like this should be possible:
[%
out1 = embed('22478997-9520-4d0f-8abc-f888e2434c81', { type => 'image',
mimetype => 'image/gif' } );
out2 = link('22478997-9520-4d0f-8abc-f888e2434c81');
popup('begin',"$out1 What have you learned?", { event => 'onclick',
title => "$out2" } )
%]
Of course, since the old language supported nesting of tags there must
some smart algorithm that reads the nesting in reverse (or something)
and outputs numbered variables to include in the outer tag.
My regexp/LALR knowledge is a bit too weak to be able to understand
exactly how I should write a parser that can transform the first code to
the second. Also be alert that there can be multiple occourences of
similar outer tags in the same text. So some sort of s//g thing is
needed to transform them all, and of course the numbered variable
mustn't overwrite the ones who have been defined in the earlier tags
(document global counter). The routine doesn't need to be super-fast, as
it will only be used once per document, and the resulting TT template
will be stored for later display.
What I do now is just to go through the old template and exchange each
occurence of the old template with the new TT code, and I was planning
on using this final algorithm to fix any accidential nesting problems
that had occured.
Am I looking at this problem all wrong? Any hints/code
examples/suggestions are welcome.
Regards,
Robin Smidsrød
_______________________________________________
templates mailing list
[email protected]
http://lists.template-toolkit.org/mailman/listinfo/templates