# #
# File: shared/Template.pm #
# #
-# Authors: André Malo <nd@o3media.de>, 2001-04-12 #
+# Authors: André Malo <nd@o3media.de> #
+# Frank Schönmann <fs@tower.de> #
# #
# Description: Handle XML based HTML-Templates #
# #
################################################################################
use strict;
-use vars qw($xml_dom_used);
+use vars qw(
+ $xml_dom_used
+);
-use Carp qw(croak confess);
+use Carp qw(croak);
BEGIN {
$xml_dom_used = eval q[
];
}
-### sub new ####################################################################
+################################################################################
+#
+# Version check
+#
+# last modified:
+# $Date$ (GMT)
+# by $Author$
+#
+sub VERSION {(q$Revision$ =~ /([\d.]+)\s*$/)[0] or '0.0'}
+
+
+### new () #####################################################################
#
# constructor
#
$self;
}
-### sub file ###################################################################
+### file () ####################################################################
#
# assign new template file to object
# parse the template file
$old;
}
-### sub insert #################################################################
+### insert () ##################################################################
#
# return the placeholder surrounded by meta delimiters
#
$self -> {metaon} . $name . $self -> {metaoff};
}
-### sub list ###################################################################
+### list () ####################################################################
#
# fill in a complete list
#
#
sub list {
my $self = shift;
- my $name = shift;
croak "no template file specified"
unless (defined $self -> {file});
-# no warnings 'uninitialized';
- my $list = join '' => map { ${ $self -> scrap ($name, $_) } } @{ +shift };
+ $self -> joinlist ('' => @_);
+}
+
+### joinlist () ################################################################
+#
+# fill in a complete list, using a scrap between the list elements
+#
+# Params: $join - joining string (or stringref)
+# $name - name of the atomic list scrap
+# $array - list of hashes (same strcuture like the hash used by 'scrap')
+#
+# Return: scalar reference - filled in list
+#
+sub joinlist {
+ my $self = shift;
+ my $join = shift;
+ $join = $$join if ref($join);
+ my $name = shift;
+
+ my $list = join $join => map { ${ $self -> scrap ($name, $_) } } @{ +shift };
# return
\$list;
}
-### sub scrap ##################################################################
+### scrap () ###################################################################
#
# fill in a template scrap
#
-# Params: $name - name of the scrap
+# Params: $name name of the scrap
+# ...
+# $no_nl 1 - remove newlines (\n)
+# 0 - do no such thing
#
# Return: scalar reference - filled in scrap
#
my $self = shift;
my $name = shift;
+ my $no_nl;
+ if (!ref $_[$#_]) {
+ $no_nl = pop @_;
+ }
+
croak "no template file specified"
unless (defined $self -> {file});
\%params
);
+ # remove newlines
+ #
+ $scrap =~ s/\015\012|\015|\012//g if ($no_nl);
+
# return
\$scrap;
}
-### sub parse_file #############################################################
+### printscrap () ##############################################################
+#
+# fill in a template scrap and print to STDOUT
+#
+# Params: $name name of the scrap
+# ...
+# $no_nl 1 - remove newlines (\n)
+# 0 - do no such thing
+#
+# Return: success code (boolean)
+#
+sub printscrap {
+ my $self = shift;
+
+ $self -> scrap2file (\*STDOUT, @_);
+}
+
+### scrap2file () ##############################################################
+#
+# fill in a template scrap and print to a file handle
+#
+# Params: $handle filehandle
+# $name name of the scrap
+# ...
+# $no_nl 1 - remove newlines (\n)
+# 0 - do no such thing
+#
+# Return: success code (boolean)
+#
+sub scrap2file {
+ my $self = shift;
+ my $handle = shift;
+
+ print $handle ${$self->scrap(@_)};
+}
+
+### parse_file () ##############################################################
#
# read in and parse template file
#
return; # anything failed (??)
}
-### sub parse_if ###############################################################
+### parse_if () ################################################################
#
# parse conditional blocks
#
return;
}
-# keeping 'require' happy
+# keep 'require' happy
1;
#