SYNOPSIS

    [% 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 %]

DESCRIPTION

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>

AUTHOR

Andy Wardley

COPYRIGHT

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.

RELATED TO Template::Plugin::XML::Style…

Template::Plugin