Recipe(3)

NAME
Embperl base class for defining custom recipes

SYNOPSIS
   EMBPERL_RECIPE "XSLT Embperl"

DESCRIPTION
Embperl::Recipe provides basic features that are necessary for createing your own recipes. To do so you have to create a class that provides a "get_recipe" method which returns a array reference that contains the description what to do.

  get_recipe ($class, $r, $recipe)

$class
    The class name

$r  The Embperl request record object (Embperl::Req), maybe a derived object when running under EmbperlObject.

$recipe
    The name of the recipe

The function must return an array that describes the desired action. The array contains a tree structure of providers.

  Providers

file
    read file data

    Parameter:

    filename
        Gives the file to read

memory
    get data from a scalar

    Parameter:

    source
        Gives the source as a scalar reference

    name
        Gives the name under which this item should be cache

epparse
    parse file into a Embperl tree structure

    Parameter:

    source
        Gives the source

    syntax
        Syntax to use

epcompile
    compile Embperl tree structure

    Parameter:

    source
        Gives the source

eprun
    execute Embperl tree structure

    Parameter:

    source
        Gives the source

    cache_key
        See description of cacheing

    cache_key_options
        See description of cacheing

    cache_key_func
        See description of cacheing

eptostring
    convert Embperl tree structure to string

    Parameter:

    source
        Gives the source

libxslt-parse-xml
    parse xml source for libxslt

    Parameter:

    source
        Gives the xml source

libxslt-compile-xsl
    parse and compile stylesheet for libxslt

    Parameter:

    stylesheet
        Gives the stylesheet source

libxslt
    do a xsl transformation via libxslt

    Parameter:

    source
        Gives the parsed xml source

    stylesheet
        Gives the compiled stylesheet source

    param
        Gives the parameters as hash ref

xalan-parse-xml
    parse xml source for xalan

    Parameter:

    source
        Gives the xml source

xalan-compile-xsl
    parse and compile stylesheet for xalan

    Parameter:

    stylesheet
        Gives the stylesheet source

xalan
    do a xsl transformation via xalan

    Parameter:

    source
        Gives the parsed xml source

    stylesheet
        Gives the compiled stylesheet source

    param
        Gives the parameters as hash ref

  Cache parameter

expires_in
expires_func
expires_filename
cache

  Format
Heres an example that show how the recipe must be build:

  sub get_recipe

    {
    my ($class, $r, $recipe) = @_ ;

    my $param  = $r -> component -> param  ;
    my @recipe ;

    push @recipe, {'type'   =>  'file'      } ;
    push @recipe, {'type'   =>  'epparse'   } ;
    push @recipe, {'type'   =>  'epcompile', cache => 1 } ;
    push @recipe, {'type'   =>  'eprun'     }  ;

    my $config = $r -> component -> config  ;
    my $xsltproc = $config -> xsltproc ;

    my @stylesheet =
        (
        { type => 'file',  filename  => $config -> xsltstylesheet, },
        { type =>  $xsltproc . '-compile-xsl', cache => 1 },
        ) ;

    push @recipe, {'type'   =>  'eptostring' } ;
    push @recipe, {'type'   =>  $xsltproc . '-parse-xml', } ;
    push @recipe, {'type'   =>  $xsltproc,   stylesheet => \@stylesheet } ;

    return \@recipe ;
    }

This corresponds to the following diagramm (when xsltproc = xalan):

    +-------------------+   +--------------------+
    + file {inputfile}  +   +file{xsltstylesheet}+
    +-------------------+   +--------------------+
          |                         |
          v                         v
    +-------------------+   +-------------------+
    + xalan-parse-xml   +   + xalan-compile-xsl +
    +-------------------+   +-------------------+
          |                         |
          |                         |
          |         +-----------+   |
          +-------> + xalan     + <-+
                    +-----------+

Take a look at the recipes that comes with Embperl to get more ideas what can be done.