1package t_template; 2 3use strict; 4use vars qw(@ISA @EXPORT_OK); 5 6@ISA=(); 7@EXPORT_OK= qw(init setparm output); 8 9sub init { # (\@parms, \%defaults, \@template) 10 my ($self, $parms, $defs, $templatelines) = @_; 11 $self->{parms} = { }; 12 $self->{values} = { }; 13 my $key; 14 foreach $key (@$parms) { 15 $self->{parms}{$key} = 1; 16 } 17 foreach $key (keys %$defs) { 18 $self->{values}{$key} = ${$defs}{$key}; 19 } 20 if (defined($templatelines)) { 21 $self->{template} = join "", @$templatelines; 22 } 23} 24 25sub validateparm { # (parmname) 26 no strict 'refs'; 27 my ($self, $parmname) = @_; 28 if (!defined($self->{parms}{$parmname})) { 29 die "unknown parameter $parmname"; 30 } 31} 32 33sub setparm { # (parm, value) 34 my ($self, $parm, $value) = @_; 35 $self->validateparm($parm); 36 $self->{values}{$parm} = $value; 37} 38 39sub substitute { # (text) 40 my ($self, $text) = @_; 41 my ($p); 42 43 # Do substitutions. 44 foreach $p (keys %{$self->{parms}}) { 45 if (!defined $self->{values}{$p}) { 46 die "$0: No value supplied for parameter $p\n"; 47 } 48 # XXX More careful quoting of supplied value! 49 $text =~ s|<$p>|$self->{values}{$p}|g; 50 } 51 return $text; 52} 53 54sub output { # (fh) 55 my ($self, $fh) = @_; 56 print $fh "/* start of ", ref($self), " template */\n"; 57 print $fh $self->substitute($self->{template}); 58 print $fh "/* end of ", ref($self), " template */\n"; 59} 60 611; 62