home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2004 July / APC0407D2.iso / workshop / apache / files / ActivePerl-5.6.1.638-MSWin32-x86.msi / _645d945ef3e5034bb759ad71bf3c9090 < prev    next >
Encoding:
Text File  |  2004-04-13  |  8.4 KB  |  328 lines

  1. @rem = '--*-Perl-*--
  2. @echo off
  3. if "%OS%" == "Windows_NT" goto WinNT
  4. perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
  5. goto endofperl
  6. :WinNT
  7. perl -x -S %0 %*
  8. if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
  9. if %errorlevel% == 9009 echo You do not have Perl in your PATH.
  10. if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
  11. goto endofperl
  12. @rem ';
  13. #!perl
  14. #line 15
  15.     eval 'exec C:\p4view\Apps\ActivePerl\MSI\data\ActivePerl\Perl\bin\perl.exe -S $0 ${1+"$@"}'
  16.     if $running_under_some_shell;
  17.  
  18. # pod2latex conversion program
  19.  
  20. use Pod::LaTeX;
  21. use Pod::Find qw/ pod_find /;
  22. use Pod::Usage;
  23. use Getopt::Long;
  24. use File::Basename;
  25.  
  26. # Read command line arguments
  27.  
  28. my %options = (
  29.            "help"   => 0,
  30.            "man"    => 0,
  31.            "sections" => [],
  32.            "full"   => 0,
  33.            "out"    => undef,
  34.            "verbose" => 0,
  35.            "modify" => 0,
  36.           );
  37.  
  38. GetOptions(\%options, 
  39.        "help",
  40.        "man",
  41.        "verbose",
  42.        "full",
  43.        "sections=s@",
  44.        "out=s",
  45.        "modify",
  46.       ) || pod2usage(2);
  47.  
  48. pod2usage(1)  if ($options{help});
  49. pod2usage(-verbose => 2)  if ($options{man});
  50.  
  51.  
  52. # Read all the files from the command line
  53. my @files = @ARGV;
  54.  
  55. # Now find which ones are real pods and convert 
  56. # directories to their contents.
  57.  
  58. # Extract the pods from each arg since some of them might
  59. # be directories
  60. # This is not as efficient as using pod_find to search through
  61. # everything at once but it allows us to preserve the order 
  62. # supplied by the user
  63.  
  64. my @pods;
  65. foreach my $arg (@files) {
  66.   my %pods = pod_find($arg);
  67.   push(@pods, sort keys %pods);
  68. }
  69.  
  70. # Abort if nothing to do
  71. if ($#pods == -1) {
  72.   warn "None of the supplied Pod files actually exist\n";
  73.   exit;
  74. }
  75.  
  76.  
  77.  
  78. # If $options{'out'} is set we are processing to a single output file
  79. my $multi_documents;
  80. if (exists $options{'out'} && defined $options{'out'}) {
  81.   $multi_documents = 0;
  82. } else {
  83.   $multi_documents = 1;
  84. }
  85.  
  86. # If the output file is not specified it is assumed that
  87. # a single output file is required per input file using
  88. # a .tex extension rather than any exisiting extension
  89.  
  90. if ($multi_documents) {
  91.  
  92.   # Case where we just generate one input per output
  93.  
  94.   foreach my $pod (@pods) {
  95.  
  96.     if (-f $pod) {
  97.  
  98.       my $output = $pod;
  99.       $output = basename($output, '.pm', '.pod','.pl') . '.tex';
  100.  
  101.       # Create a new parser object
  102.       my $parser = new Pod::LaTeX(
  103.                   AddPreamble => $options{'full'},
  104.                   AddPostamble => $options{'full'},
  105.                   MakeIndex => $options{'full'},
  106.                   TableOfContents => $options{'full'},
  107.                   ReplaceNAMEwithSection => $options{'modify'},
  108.                   UniqueLabels => $options{'modify'},
  109.                  );
  110.  
  111.       # Select sections if supplied
  112.       $parser->select(@{ $options{'sections'}})
  113.     if @{$options{'sections'}};
  114.  
  115.       # Derive the input file from the output file
  116.       $parser->parse_from_file($pod, $output);
  117.  
  118.       print "Written output to $output\n" if $options{'verbose'};
  119.  
  120.     } else {
  121.       warn "File $pod not found\n";
  122.     }
  123.  
  124.   }
  125. } else {
  126.   
  127.   # Case where we want everything to be in a single document
  128.  
  129.   # Need to open the output file ourselves
  130.   my $output = $options{'out'};
  131.   $output .= '.tex' unless $output =~ /\.tex$/;
  132.  
  133.   # Use auto-vivified file handle in perl 5.6
  134.   use Symbol;
  135.   my $outfh = gensym;
  136.   open ($outfh, ">$output") || die "Could not open output file: $!\n";
  137.  
  138.   # Flag to indicate whether we have converted at least one file
  139.   # indicates how many files have been converted
  140.   my $converted = 0;
  141.  
  142.   # Loop over the input files
  143.   foreach my $pod (@pods) {
  144.  
  145.     if (-f $pod) {
  146.  
  147.       warn "Converting $pod\n" if $options{'verbose'};
  148.  
  149.       # Open the file (need the handle)
  150.       # Use auto-vivified handle in perl 5.6
  151.       my $podfh = gensym;
  152.       open ($podfh, "<$pod") || die "Could not open pod file $pod: $!\n";
  153.  
  154.       # if this is the first file to be converted we may want to add
  155.       # a preamble (controlled by command line option)
  156.       if ($converted == 0 && $options{'full'}) {
  157.     $preamble = 1;
  158.       } else {
  159.     $preamble = 0;
  160.       }
  161.  
  162.       # if this is the last file to be converted may want to add
  163.       # a postamble (controlled by command line option)
  164.       # relies on a previous pass to check existence of all pods we
  165.       # are converting.
  166.       my $postamble = ( ($converted == $#pods && $options{'full'}) ? 1 : 0 );
  167.  
  168.       # Open parser object
  169.       # May want to start with a preamble for the first one and
  170.       # end with an index for the last
  171.       my $parser = new Pod::LaTeX(
  172.                   MakeIndex => $options{'full'},
  173.                   TableOfContents => $preamble,
  174.                   ReplaceNAMEwithSection => $options{'modify'},
  175.                   UniqueLabels => $options{'modify'},
  176.                   StartWithNewPage => $options{'full'},
  177.                   AddPreamble => $preamble,
  178.                   AddPostamble => $postamble,
  179.                  );
  180.  
  181.       # Store the file name for error messages
  182.       # This is a kluge that breaks the data hiding of the object
  183.       $parser->{_INFILE} = $pod;
  184.  
  185.       # Select sections if supplied
  186.       $parser->select(@{ $options{'sections'}})
  187.     if @{$options{'sections'}};
  188.  
  189.       # Parse it
  190.       $parser->parse_from_filehandle($podfh, $outfh);
  191.  
  192.       # We have converted at least one file
  193.       $converted++;
  194.  
  195.     } else {
  196.       warn "File $pod not found\n";
  197.     }
  198.  
  199.   }
  200.  
  201.   # Should unlink the file if we didn't convert anything!
  202.   # dont check for return status of unlink
  203.   # since there is not a lot to be done if the unlink failed
  204.   # and the program does not rely upon it.
  205.   unlink "$output" unless $converted;
  206.  
  207.   # If verbose
  208.   warn "Converted $converted files\n" if $options{'verbose'};
  209.  
  210. }
  211.  
  212. exit;
  213.  
  214. __END__
  215.  
  216. =head1 NAME
  217.  
  218. pod2latex - convert pod documentation to latex format
  219.  
  220. =head1 SYNOPSIS
  221.  
  222.   pod2latex *.pm
  223.  
  224.   pod2latex -out mytex.tex *.pod
  225.  
  226.   pod2latex -full -sections 'DESCRIPTION|NAME' SomeDir
  227.  
  228. =head1 DESCRIPTION
  229.  
  230. C<pod2latex> is a program to convert POD format documentation
  231. (L<perlpod>) into latex. It can process multiple input documents at a
  232. time and either generate a latex file per input document or a single
  233. combined output file.
  234.  
  235. =head1 OPTIONS AND ARGUMENTS
  236.  
  237. This section describes the supported command line options. Minium
  238. matching is supported.
  239.  
  240. =over 4
  241.  
  242. =item B<-out>
  243.  
  244. Name of the output file to be used. If there are multiple input pods
  245. it is assumed that the intention is to write all translated output
  246. into a single file. C<.tex> is appended if not present.  If the
  247. argument is not supplied, a single document will be created for each
  248. input file.
  249.  
  250. =item B<-full>
  251.  
  252. Creates a complete C<latex> file that can be processed immediately
  253. (unless C<=for/=begin> directives are used that rely on extra packages).
  254. Table of contents and index generation commands are included in the
  255. wrapper C<latex> code.
  256.  
  257. =item B<-sections>
  258.  
  259. Specify pod sections to include (or remove if negated) in the
  260. translation.  See L<Pod::Select/"SECTION SPECIFICATIONS"> for the
  261. format to use for I<section-spec>. This option may be given multiple
  262. times on the command line.This is identical to the similar option in
  263. the C<podselect()> command.
  264.  
  265. =item B<-modify>
  266.  
  267. This option causes the output C<latex> to be slightly
  268. modified from the input pod such that when a C<=head1 NAME>
  269. is encountered a section is created containing the actual
  270. pod name (rather than B<NAME>) and all subsequent C<=head1>
  271. directives are treated as subsections. This has the advantage
  272. that the description of a module will be in its own section
  273. which is helpful for including module descriptions in documentation.
  274. Also forces C<latex> label and index entries to be prefixed by the
  275. name of the module.
  276.  
  277. =item B<-help>
  278.  
  279. Print a brief help message and exit.
  280.  
  281. =item B<-man>
  282.  
  283. Print the manual page and exit.
  284.  
  285. =item B<-verbose>
  286.  
  287. Print information messages as each document is processed.
  288.  
  289. =back
  290.  
  291. =head1 BUGS
  292.  
  293. Known bugs are:
  294.  
  295. =over 4
  296.  
  297. =item * 
  298.  
  299. Cross references between documents are not resolved when multiple
  300. pod documents are converted into a single output C<latex> file.
  301.  
  302. =item * 
  303.  
  304. Functions and variables are not automatically recognized 
  305. and they will therefore not be marked up in any special way
  306. unless instructed by an explicit pod command.
  307.  
  308. =back
  309.  
  310. =head1 SEE ALSO
  311.  
  312. L<Pod::LaTeX>
  313.  
  314. =head1 AUTHOR
  315.  
  316. Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt>
  317.  
  318. This program is free software; you can redistribute it
  319. and/or modify it under the same terms as Perl itself.
  320.  
  321. Copyright (C) 2000 Tim Jenness.
  322.  
  323. =cut
  324.  
  325.  
  326. __END__
  327. :endofperl
  328.