mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
				
	
	
		
			151 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Perl
		
	
	
	
#! /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
 |