NAME
Embperl::Recipe - 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:
- memory
-
get data from a scalar
Parameter:
- epparse
-
parse file into a Embperl tree structure
Parameter:
- epcompile
-
compile Embperl tree structure
Parameter:
- eprun
-
execute Embperl tree structure
Parameter:
- eptostring
-
convert Embperl tree structure to string
Parameter:
- libxslt-parse-xml
-
parse xml source for libxslt
Parameter:
- libxslt-compile-xsl
-
parse and compile stylesheet for libxslt
Parameter:
- libxslt
-
do a xsl transformation via libxslt
Parameter:
- xalan-parse-xml
-
parse xml source for xalan
Parameter:
- xalan-compile-xsl
-
parse and compile stylesheet for xalan
Parameter:
- xalan
-
do a xsl transformation via xalan
Parameter:
Cache parameter
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.