Help-Site Computer Manuals
Software
Hardware
Programming
Networking
  Algorithms & Data Structures   Programming Languages   Revision Control
  Protocols
  Cameras   Computers   Displays   Keyboards & Mice   Motherboards   Networking   Printers & Scanners   Storage
  Windows   Linux & Unix   Mac

Text::PSP
Perl extension implementing a JSP-like templating system.

Text::PSP - Perl extension implementing a JSP-like templating system.



NAME

Text::PSP - Perl extension implementing a JSP-like templating system.


SYNOPSIS


  use Text::PSP;

  

  my $psp_engine = Text::PSP->new(

        template_root   => 'templates',

        workdir => '/tmp/psp_work',

  );

  my $template_object = $psp_engine->template('/home/joost/templates/index.psp');

  my @out = $template_object->run(@arguments);

  print @out;


DESCRIPTION

The Text::PSP system consists of 3 modules: the Text::PSP manpage, Text::PSP::Parser and Text::PSP::Template. The parser creates perl modules from the input files, which are subclasses of Text::PSP::Template. Text::PSP is the module overseeing the creation and caching of the templates.

You can use the basics of the JSP system:


        <% 

                my $self = shift;

                # code mode

                my @words = qw(zero one two three);

        %>

                Hello, World - this is text mode

        <%=

                map { $i++ . ' = ' . $_ } @words

        %>

                That was an expression 

        <%!

                # define mode

                sub method {

                        return "method called";

                }

        %>

        <%= $self->method %>

                And insert mode again

        includes

        <%@file include="some/page.psp"%>

        and includes that search for a file upwards to the template

        root

        <%@file find="header.psp"%>

For a complete description of the template constructs, see the Text::PSP::Syntax manpage.


METHODS

new


        my $psp = Text::PSP->new( 

                template_root => './templates',

                workdir       => './work',

        );

Instantiates a new Text::PSP object.

Parameters

template_root
The root directory for the template files. No templates outside the template_root can be run by this Text::PSP object. This is a required parameter.

workdir
The directory in which to store the translated templates. This is a required parameter.

create_workdir
If this parameter is true and the workdir doesn't exist, one will be created. Default is false.

template


        my $template = $psp->template("index.psp");

        # or

        my $template = $psp->template("index.psp", force_rebuild => 1);

Get a template object from a template file. This will translate the template file into a Text::PSP::Template module if needed.

Optional arguments:

force_rebuild
Always rebuild the resulting .pm file and reload it (useful for development). Normally, the .pm file is only built if the top most template file is newer than the resulting module. This can be really annoying if you're developing and are only changing some included file.

find_template


        my $template = $psp->find_template("some/path/index.psp");

        # or

        my $template = $psp->find_template("some/path/index.psp", force_rebuild => 1);

Similar to the template() method, but searches for a file starting at the specified path, working up to the template_root.

The returned template object will behave as if it really were in the specified path, regardless of the real location of the template in the file system, so for instance any include and find directives will work from that path. =cut

sub find_template { croak ``Text::PSP find_template method takes 1+ argument'' if @_ < 2; my ($self,$directory,%options) = @_; $directory =~ s#([^/]+)$## or croak ``Cannot find a filename from $directory''; my $filename = $1; $directory = $self->normalize_path($directory); my $path = $directory; my $found = 0; while (1) { # warn ``testing $path/$filename''; $found =1,last if -f $self->normalize_path(``$self->{template_root}/$path/$filename''); last if $path eq ''; $path =~ s#/?[^/]+$##; } croak ``Cannot find $filename from directory $directory'' unless $found; my ($pmfile,$classname) = $self->translate_filename(``$directory/$filename''); if ( $options{force_rebuild} or ( !-f $pmfile ) or -M _ > -M ``$self->{template_root}/$path/$filename'' ) { delete $INC{ $pmfile }; $self->write_pmfile($filename,$pmfile,$classname,$directory); } require $pmfile; return $classname->new( engine => $self, filename => ``$path/$filename''); }

clear_workdir


    $psp->clear_workdir();

This will remove the entire content of the work directory, cleaning up disk space and forcing new calls to $psp->template() to recompile the template file.


COPYRIGHT

Copyright 2002 - 2005 Joost Diepenmaat, jdiepen@cpan.org. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


THANKS TO

Christian Hansen for supplying a patch to make the force_reload option work under mod_perl.


SEE ALSO

the Text::PSP::Syntax manpage, the Text::PSP::Template manpage.

Programminig
Wy
Wy
yW
Wy
Programming
Wy
Wy
Wy
Wy