mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| # Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
 | |
| #
 | |
| # Licensed under the OpenSSL license (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
 | |
| 
 | |
| package OpenSSL::Util::Pod;
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| use Exporter;
 | |
| use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 | |
| $VERSION = "0.1";
 | |
| @ISA = qw(Exporter);
 | |
| @EXPORT = qw(extract_pod_info);
 | |
| @EXPORT_OK = qw();
 | |
| 
 | |
| =head1 NAME
 | |
| 
 | |
| OpenSSL::Util::Pod - utilities to manipulate .pod files
 | |
| 
 | |
| =head1 SYNOPSIS
 | |
| 
 | |
|   use OpenSSL::Util::Pod;
 | |
| 
 | |
|   my %podinfo = extract_pod_info("foo.pod");
 | |
| 
 | |
|   # or if the file is already opened...  Note that this consumes the
 | |
|   # remainder of the file.
 | |
| 
 | |
|   my %podinfo = extract_pod_info(\*STDIN);
 | |
| 
 | |
| =head1 DESCRIPTION
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item B<extract_pod_info "FILENAME", HASHREF>
 | |
| 
 | |
| =item B<extract_pod_info "FILENAME">
 | |
| 
 | |
| =item B<extract_pod_info GLOB, HASHREF>
 | |
| 
 | |
| =item B<extract_pod_info GLOB>
 | |
| 
 | |
| Extracts information from a .pod file, given a STRING (file name) or a
 | |
| GLOB (a file handle).  The result is given back as a hash table.
 | |
| 
 | |
| The additional hash is for extra parameters:
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item B<section =E<gt> N>
 | |
| 
 | |
| The value MUST be a number, and will be the man section number
 | |
| to be used with the given .pod file.
 | |
| 
 | |
| =item B<debug =E<gt> 0|1>
 | |
| 
 | |
| If set to 1, extra debug text will be printed on STDERR
 | |
| 
 | |
| =back
 | |
| 
 | |
| =back
 | |
| 
 | |
| =head1 RETURN VALUES
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item B<extract_pod_info> returns a hash table with the following
 | |
| items:
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item B<section =E<gt> N>
 | |
| 
 | |
| The man section number this .pod file belongs to.  Often the same as
 | |
| was given as input.
 | |
| 
 | |
| =item B<names =E<gt> [ "name", ... ]>
 | |
| 
 | |
| All the names extracted from the NAME section.
 | |
| 
 | |
| =back
 | |
| 
 | |
| =back
 | |
| 
 | |
| =cut
 | |
| 
 | |
| sub extract_pod_info {
 | |
|     my $input = shift;
 | |
|     my $defaults_ref = shift || {};
 | |
|     my %defaults = ( debug => 0, section => 0, %$defaults_ref );
 | |
|     my $fh = undef;
 | |
|     my $filename = undef;
 | |
| 
 | |
|     # If not a file handle, then it's assume to be a file path (a string)
 | |
|     unless (ref $input eq "GLOB") {
 | |
|         $filename = $input;
 | |
|         open $fh, $input or die "Trying to read $filename: $!\n";
 | |
|         print STDERR "DEBUG: Reading $input\n" if $defaults{debug};
 | |
|         $input = $fh;
 | |
|     }
 | |
| 
 | |
|     my %podinfo = ( section => $defaults{section});
 | |
|     while(<$input>) {
 | |
|         s|\R$||;
 | |
|         # Stop reading when we have reached past the NAME section.
 | |
|         last if (m|^=head1|
 | |
|                  && defined $podinfo{lastsect}
 | |
|                  && $podinfo{lastsect} eq "NAME");
 | |
| 
 | |
|         # Collect the section name
 | |
|         if (m|^=head1\s*(.*)|) {
 | |
|             $podinfo{lastsect} = $1;
 | |
|             $podinfo{lastsect} =~ s/\s+$//;
 | |
|             print STDERR "DEBUG: Found new pod section $1\n"
 | |
|                 if $defaults{debug};
 | |
|             print STDERR "DEBUG: Clearing pod section text\n"
 | |
|                 if $defaults{debug};
 | |
|             $podinfo{lastsecttext} = "";
 | |
|         }
 | |
| 
 | |
|         next if (m|^=| || m|^\s*$|);
 | |
| 
 | |
|         # Collect the section text
 | |
|         print STDERR "DEBUG: accumulating pod section text \"$_\"\n"
 | |
|             if $defaults{debug};
 | |
|         $podinfo{lastsecttext} .= " " if $podinfo{lastsecttext};
 | |
|         $podinfo{lastsecttext} .= $_;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     if (defined $fh) {
 | |
|         close $fh;
 | |
|         print STDERR "DEBUG: Done reading $filename\n" if $defaults{debug};
 | |
|     }
 | |
| 
 | |
|     $podinfo{lastsecttext} =~ s| - .*$||;
 | |
| 
 | |
|     my @names =
 | |
|         map { s|\s+||g; $_ }
 | |
|         split(m|,|, $podinfo{lastsecttext});
 | |
| 
 | |
|     return ( section => $podinfo{section}, names => [ @names ] );
 | |
| }
 | |
| 
 | |
| 1;
 |