]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/shared/Template.pm
now, if main file is master locked, fo_view.pl won't show any single message
[selfforum.git] / selfforum-cgi / shared / Template.pm
index 44da2cc3d1c831b02ff1e41cf58edfd1dea76619..5dc6322a6d2f173385fccb98dc721e06197c7cdc 100644 (file)
@@ -4,16 +4,19 @@ package Template;
 #                                                                              #
 # File:        shared/Template.pm                                              #
 #                                                                              #
 #                                                                              #
 # 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;
 #                                                                              #
 # 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[
 
 BEGIN {
   $xml_dom_used = eval q[
@@ -23,7 +26,18 @@ BEGIN {
   ];
 }
 
   ];
 }
 
-### sub new ####################################################################
+################################################################################
+#
+# Version check
+#
+# last modified:
+#    $Date$ (GMT)
+# by $Author$
+#
+sub VERSION {(q$Revision$ =~ /([\d.]+)\s*$/)[0] or '0.0'}
+
+
+### new () #####################################################################
 #
 # constructor
 #
 #
 # constructor
 #
@@ -42,7 +56,7 @@ sub new {
   $self;
 }
 
   $self;
 }
 
-### sub file ###################################################################
+### file () ####################################################################
 #
 # assign new template file to object
 # parse the template file
 #
 # assign new template file to object
 # parse the template file
@@ -63,7 +77,7 @@ sub file {
   $old;
 }
 
   $old;
 }
 
-### sub insert #################################################################
+### insert () ##################################################################
 #
 # return the placeholder surrounded by meta delimiters
 #
 #
 # return the placeholder surrounded by meta delimiters
 #
@@ -82,7 +96,7 @@ sub insert {
   $self -> {metaon} . $name . $self -> {metaoff};
 }
 
   $self -> {metaon} . $name . $self -> {metaoff};
 }
 
-### sub list ###################################################################
+### list () ####################################################################
 #
 # fill in a complete list
 #
 #
 # fill in a complete list
 #
@@ -93,23 +107,43 @@ sub insert {
 #
 sub list {
   my $self = shift;
 #
 sub list {
   my $self = shift;
-  my $name = shift;
 
   croak "no template file specified"
     unless (defined $self -> {file});
 
 
   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;
 }
 
 
   # return
   \$list;
 }
 
-### sub scrap ##################################################################
+### scrap () ###################################################################
 #
 # fill in a template 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
 #
 #
 # Return: scalar reference - filled in scrap
 #
@@ -117,6 +151,11 @@ sub scrap {
   my $self = shift;
   my $name = shift;
 
   my $self = shift;
   my $name = shift;
 
+  my $no_nl;
+  if (!ref $_[$#_]) {
+      $no_nl = pop @_;
+  }
+
   croak "no template file specified"
     unless (defined $self -> {file});
 
   croak "no template file specified"
     unless (defined $self -> {file});
 
@@ -168,11 +207,51 @@ sub scrap {
     \%params
   );
 
     \%params
   );
 
+  # remove newlines
+  #
+  $scrap =~ s/\015\012|\015|\012//g if ($no_nl);
+
   # return
   \$scrap;
 }
 
   # 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
 #
 #
 # read in and parse template file
 #
@@ -272,7 +351,7 @@ sub parse_file {
   return; # anything failed (??)
 }
 
   return; # anything failed (??)
 }
 
-### sub parse_if ###############################################################
+### parse_if () ################################################################
 #
 # parse conditional blocks
 #
 #
 # parse conditional blocks
 #
@@ -333,7 +412,7 @@ sub parse_if {
   return;
 }
 
   return;
 }
 
-# keeping 'require' happy
+# keep 'require' happy
 1;
 
 #
 1;
 
 #

patrick-canterino.de