[Templates] auto filtering
David Dick
david_dick@mbox.com.au
Mon, 18 Nov 2002 13:31:51 +1100
This is a multi-part message in MIME format.
--Boundary_(ID_br4/VQUuOu9F74s0u+cv8w)
Content-type: text/plain; charset=us-ascii
Content-disposition: inline
Content-transfer-encoding: 7BIT
Solved the problem by using a custom stash (example attached) and
overriding the get method. As a side note, also needed to override the
private _assign method due to a line in Template::Stash that read
if ($rootref eq 'HASH' || $rootref eq __PACKAGE__) {
which i needed to translate to
if ($rootref eq 'HASH' || UNIVERSAL::isa($root, __PACKAGE__)) {
to inherit the Template::Stash object.
Cheers
-Dave
----- Original Message -----
From: darren chamberlain <dlc@users.sourceforge.net>
Date: Wednesday, November 13, 2002 5:25 am
Subject: Re: [Templates] auto filtering
> * Mark Fowler <mark@twoshortplanks.com> [2002-11-12 11:20]:
> > On Tue, 12 Nov 2002, Andy Wardley wrote:
> > > You could write a custom stash which puts a wrapper around the
> > > get() method, filtering all the output that it returns.
> >
> > Putting it at the stash level seems to be a mistake to me...you
> often> want to manipulate the data and do a lot of stuff and not
> have to
> > worry about filtering it until the last matter.
>
> I came to exactly the same conclusion when I decided to spend a few
> minutes trying to implement it.
>
> > Since we're talking about being lazy here, I'd probably
> implement it
> > as an option to auto filter interpolated variables. So in this
> > example:
> >
> > This is a [% foo %] with very many $bar.
> >
> > foo would not be filtered, but $bar would be. This seems to
> give you
> > the right degree of balance between convenience and flexibility.
>
> Interesting... as long as we can assume that we're talking about HTML.
> I would hate for my GD images to be HTML encoded, for example. That's
> why filters are optional, and need to be specified explicitly.
>
> (darren)
>
> --
> How can I believe in God when just last week I got my tongue
> caught in
> the roller of an electric typewriter?
> -- Woody Allen
>
> _______________________________________________
> templates mailing list
> templates@template-toolkit.org
> http://lists.ourshack.com/mailman/listinfo/templates
>
--Boundary_(ID_br4/VQUuOu9F74s0u+cv8w)
Content-type: application/octet-stream; NAME=MyStash.pm
Content-disposition: attachment; filename=MyStash.pm
Content-transfer-encoding: base64
cGFja2FnZSBNeVN0YXNoOwp1c2Ugc3RyaWN0OwoKdXNlIFRlbXBsYXRlOjpTdGFzaCgpOwp1
c2UgSFRNTDo6RW50aXRpZXMoKTsKdXNlIHZhcnMgcXcoQElTQSk7CkBJU0EgPSBxdyhUZW1w
bGF0ZTo6U3Rhc2gpOwoKc3ViIGdldCB7CglteSAoJHNlbGYsICRpZGVudCwgJGFyZ3MpID0g
QF87CglteSAoJHJlc3VsdCkgPSAkc2VsZi0+U1VQRVI6OmdldCgkaWRlbnQsICRhcmdzKTsK
CSRyZXN1bHQgPSBIVE1MOjpFbnRpdGllczo6ZW5jb2RlKCRyZXN1bHQpOwkKCXJldHVybiAo
JHJlc3VsdCk7Cn0KCnN1YiBfYXNzaWduIHsKICAgIG15ICgkc2VsZiwgJHJvb3QsICRpdGVt
LCAkYXJncywgJHZhbHVlLCAkZGVmYXVsdCkgPSBAXzsKICAgIG15ICRyb290cmVmID0gcmVm
ICRyb290OwogICAgbXkgJHJlc3VsdDsKICAgICRhcmdzIHx8PSBbIF07CiAgICAkZGVmYXVs
dCB8fD0gMDsKCiMgICAgcHJpbnQoU1RERVJSICJfYXNzaWduKHJvb3Q9JHJvb3QsIGl0ZW09
JGl0ZW0sIGFyZ3M9W0AkYXJnc10sIFxuIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAi
dmFsdWU9JHZhbHVlLCBkZWZhdWx0PSRkZWZhdWx0KVxuIikKIyAgICAgICBpZiAkREVCVUc7
CgogICAgIyByZXR1cm4gdW5kZWYgd2l0aG91dCBhbiBlcnJvciBpZiBlaXRoZXIgc2lkZSBv
ZiB0aGUgZG90IGlzIHVudmlhYmxlCiAgICAjIG9yIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0
byB1cGRhdGUgYSBwcml2YXRlIG1lbWJlciwgc3RhcnRpbmcgXyBvciAuCiAgICByZXR1cm4g
dW5kZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
IyBSRVRVUk4KICAgICAgICB1bmxlc3MgJHJvb3QgYW5kIGRlZmluZWQgJGl0ZW0gYW5kICRp
dGVtICF+IC9eW1wuX10vOwoKICAgIGlmICgkcm9vdHJlZiBlcSAnSEFTSCcgfHwgVU5JVkVS
U0FMOjppc2EoJHJvb3QsIF9fUEFDS0FHRV9fKSkgewojICAgICAgIGlmICgkaXRlbSBlcSAn
SU1QT1JUJyAmJiBVTklWRVJTQUw6OmlzYSgkdmFsdWUsICdIQVNIJykpIHsKIyAgICAgICAg
ICAgIyBpbXBvcnQgaGFzaCBlbnRyaWVzIGludG8gcm9vdCBoYXNoCiMgICAgICAgICAgIEAk
cm9vdHsga2V5cyAlJHZhbHVlIH0gPSB2YWx1ZXMgJSR2YWx1ZTsKIyAgICAgICAgICAgcmV0
dXJuICcnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIFJF
VFVSTgojICAgICAgIH0KICAgICAgICAjIGlmIHRoZSByb290IGlzIGEgaGFzaCB3ZSBzZXQg
dGhlIG5hbWVkIGtleQogICAgICAgIHJldHVybiAoJHJvb3QtPnsgJGl0ZW0gfSA9ICR2YWx1
ZSkgICAgICAgICAgICAgICAgICAgICAgIyMgUkVUVVJOCiAgICAgICAgICAgIHVubGVzcyAk
ZGVmYXVsdCAmJiAkcm9vdC0+eyAkaXRlbSB9OwogICAgfQogICAgZWxzaWYgKCRyb290cmVm
IGVxICdBUlJBWScgJiYgJGl0ZW0gPX4gL14tP1xkKyQvKSB7CiAgICAgICAgIyBvciBzZXQg
YSBsaXN0IGl0ZW0gYnkgaW5kZXggbnVtYmVyCiAgICAgICAgcmV0dXJuICgkcm9vdC0+WyRp
dGVtXSA9ICR2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAjIyBSRVRVUk4KICAgICAg
ICAgICAgdW5sZXNzICRkZWZhdWx0ICYmICRyb290LT57ICRpdGVtIH07CiAgICB9CiAgICBl
bHNpZiAoVU5JVkVSU0FMOjppc2EoJHJvb3QsICdVTklWRVJTQUwnKSkgewogICAgICAgICMg
dHJ5IHRvIGNhbGwgdGhlIGl0ZW0gYXMgYSBtZXRob2Qgb2YgYW4gb2JqZWN0CgogICAgICAg
IHJldHVybiAkcm9vdC0+JGl0ZW0oQCRhcmdzLCAkdmFsdWUpICAgICAgICAgICAgICAgICAg
ICAgIyMgUkVUVVJOCiAgICAgICAgICAgIHVubGVzcyAkZGVmYXVsdCAmJiAkcm9vdC0+JGl0
ZW0oKTsKCiMgMiBpc3N1ZXM6CiMgICAtIG1ldGhvZCBjYWxsIHNob3VsZCBiZSB3cmFwcGVk
IGluIGV2YWwgeyB9CiMgICAtIGZhbGxiYWNrIG9uIGhhc2ggbWV0aG9kcyBpZiBvYmplY3Qg
bWV0aG9kIG5vdCBmb3VuZAojCiMgICAgICAgICBldmFsIHsgJHJlc3VsdCA9ICRyb290LT4k
aXRlbShAJGFyZ3MsICR2YWx1ZSk7IH07CiMKIyAgICAgICAgIGlmICgkQCkgewojICAgICAg
ICAgICAgIGRpZSAkQCBpZiByZWYoJEApIHx8ICgkQCAhfiAvQ2FuJ3QgbG9jYXRlIG9iamVj
dCBtZXRob2QvKTsKIwojICAgICAgICAgICAgICMgZmFpbGVkIHRvIGNhbGwgb2JqZWN0IG1l
dGhvZCwgc28gdHJ5IHNvbWUgZmFsbGJhY2tzCiMgICAgICAgICAgICAgaWYgKFVOSVZFUlNB
TDo6aXNhKCRyb290LCAnSEFTSCcpICYmIGV4aXN0cyAkcm9vdC0+eyAkaXRlbSB9KSB7CiMg
ICAgICAgICAgICAgICAgICRyZXN1bHQgPSAoJHJvb3QtPnsgJGl0ZW0gfSA9ICR2YWx1ZSkK
IyAgICAgICAgICAgICAgICAgICAgIHVubGVzcyAkZGVmYXVsdCAmJiAkcm9vdC0+eyAkaXRl
bSB9OwojICAgICAgICAgICAgIH0KIyAgICAgICAgIH0KIyAgICAgICAgIHJldHVybiAkcmVz
dWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMg
UkVUVVJOCgogICAgfQogICAgZWxzZSB7CiAgICAgICAgZGllICJkb24ndCBrbm93IGhvdyB0
byBhc3NpZ24gdG8gWyRyb290XS5bJGl0ZW1dXG4iOyAgICAjIyBESUUKICAgIH0KCiAgICBy
ZXR1cm4gdW5kZWY7Cn0KCjE7Cg==
--Boundary_(ID_br4/VQUuOu9F74s0u+cv8w)--