123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- #! /usr/bin/env perl
- # Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
- #
- # Licensed under the Apache License 2.0 (the "License"). You may not use
- # this file except in compliance with the License. You can obtain a copy
- # in the file LICENSE in the source distribution or at
- # https://www.openssl.org/source/license.html
- # Implements the functionality to read one or more template files and run
- # them through Text::Template
- package OpenSSL::Template;
- =head1 NAME
- OpenSSL::Template - a private extension of Text::Template
- =head1 DESCRIPTION
- This provides exactly the functionality from Text::Template, with the
- following additions:
- =over 4
- =item *
- The template perl code delimiters (given with the C<DELIMITER> option)
- are set to C<{-> and C<-}> by default.
- =item *
- A few extra functions are offered to be used by the template perl code, see
- L</Functions>.
- =back
- =cut
- use File::Basename;
- use File::Spec::Functions;
- use Text::Template 1.46;
- our @ISA = qw(Text::Template); # parent
- sub new {
- my $class = shift;
- # Call the constructor of the parent class.
- my $self = $class->SUPER::new(DELIMITERS => [ '{-', '-}'],
- @_ );
- # Add few more attributes
- $self->{_output_off} = 0; # Default to output hunks
- return bless $self, $class;
- }
- sub fill_in {
- my $self = shift;
- my %opts = @_;
- my %hash = ( %{$opts{HASH}} );
- delete $opts{HASH};
- $self->SUPER::fill_in(HASH => { quotify1 => \"ify1,
- quotify_l => \"ify_l,
- output_on => sub { $self->output_on() },
- output_off => sub { $self->output_off() },
- %hash },
- %opts);
- }
- =head2 Functions
- =cut
- # Override Text::Template's append_text_to_result, as recommended here:
- #
- # http://search.cpan.org/~mjd/Text-Template-1.46/lib/Text/Template.pm#Automatic_postprocessing_of_template_hunks
- sub append_text_to_output {
- my $self = shift;
- if ($self->{_output_off} == 0) {
- $self->SUPER::append_text_to_output(@_);
- }
- return;
- }
- =begin comment
- We lie about the OO nature of output_on() and output_off(), 'cause that's
- not how we pass them, see the HASH option used in fill_in() above
- =end comment
- =over 4
- =item output_on()
- =item output_off()
- Switch on or off template output. Here's an example usage:
- =over 4
- {- output_off() if CONDITION -}
- whatever
- {- output_on() if CONDITION -}
- =back
- In this example, C<whatever> will only become part of the template output
- if C<CONDITION> is true.
- =back
- =cut
- sub output_on {
- my $self = shift;
- if (--$self->{_output_off} < 0) {
- $self->{_output_off} = 0;
- }
- }
- sub output_off {
- my $self = shift;
- $self->{_output_off}++;
- }
- # Helper functions for the templates #################################
- =head1 SEE ALSO
- L<Text::Template>
- =head1 AUTHORS
- Richard Levitte E<lt>levitte@openssl.orgE<gt>
- =head1 COPYRIGHT
- Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
- Licensed under the Apache License 2.0 (the "License"). You may not use
- this file except in compliance with the License. You can obtain a copy
- in the file LICENSE in the source distribution or at
- L<https://www.openssl.org/source/license.html>.
- =cut
|