Simple xml stylesheet transfomations
[% USE xmlstyle table = { attributes = { border = 0 cellpadding = 4 cellspacing = 1 } } %]
[% FILTER xmlstyle %] <table> <tr> <td>Foo</td> <td>Bar</td> <td>Baz</td> </tr> </table> [% END %]
This plugin defines a filter for performing simple stylesheet based transformations of \s-1XML\s0 text.
Named parameters are used to define those \s-1XML\s0 elements which require transformation. These may be specified with the \s-1USE\s0 directive when the plugin is loaded and/or with the \s-1FILTER\s0 directive when the plugin is used.
This example shows how the default attributes \*(C`border="0"\*(C' and \*(C`cellpadding="4"\*(C' can be added to <table> elements.
[% USE xmlstyle table = { attributes = { border = 0 cellpadding = 4 } } %]
[% FILTER xmlstyle %] <table> ... </table> [% END %]
This produces the output:
<table border="0" cellpadding="4"> ... </table>
Parameters specified within the \s-1USE\s0 directive are applied automatically each time the \*(C`xmlstyle\*(C' \s-1FILTER\s0 is used. Additional parameters passed to the \s-1FILTER\s0 directive apply for only that block.
[% USE xmlstyle table = { attributes = { border = 0 cellpadding = 4 } } %]
[% FILTER xmlstyle tr = { attributes = { valign="top" } } %] <table> <tr> ... </tr> </table> [% END %]
Of course, you may prefer to define your stylesheet structures once and simply reference them by name. Passing a hash reference of named parameters is just the same as specifying the named parameters as far as the Template Toolkit is concerned.
[% style_one = { table = { ... } tr = { ... } } style_two = { table = { ... } td = { ... } } style_three = { th = { ... } tv = { ... } } %]
[% USE xmlstyle style_one %]
[% FILTER xmlstyle style_two %] # style_one and style_two applied here [% END %]
[% FILTER xmlstyle style_three %] # style_one and style_three applied here [% END %]
Any attributes defined within the source tags will override those specified in the style sheet.
[% USE xmlstyle div = { attributes = { align = 'left' } } %]
[% FILTER xmlstyle %] <div>foo</div> <div align="right">bar</div> [% END %]
The output produced is:
<div align="left">foo</div> <div align="right">bar</div>
The filter can also be used to change the element from one type to another.
[% FILTER xmlstyle th = { element = 'td' attributes = { bgcolor='red' } } %] <tr> <th>Heading</th> </tr> <tr> <td>Value</td> </tr> [% END %]
The output here is as follows. Notice how the end tag \*(C`</th>\*(C' is changed to \*(C`</td>\*(C' as well as the start tag.
<tr> <td bgcolor="red">Heading</td> </tr> <tr> <td>Value</td> </tr>
You can also define text to be added immediately before or after the start or end tags. For example:
[% FILTER xmlstyle table = { pre_start = '<div align="center">' post_end = '</div>' } th = { element = 'td' attributes = { bgcolor='red' } post_start = '<b>' pre_end = '</b>' } %] <table> <tr> <th>Heading</th> </tr> <tr> <td>Value</td> </tr> </table> [% END %]
The output produced is:
<div align="center"> <table> <tr> <td bgcolor="red"><b>Heading</b></td> </tr> <tr> <td>Value</td> </tr> </table> </div>
Andy Wardley
Copyright (C) 2001-2006 Andy Wardley. All Rights Reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Template::Plugin