The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package App::PodPreview;
BEGIN {
  $App::PodPreview::VERSION = '0.002';
}

# ABSTRACT: Preview POD files in a browser

use strict;
use warnings;	
use autodie;

use Perl6::Export::Attrs;
use Pod::Simple::HTML;
use Config::Tiny;
use Browser::Open qw(open_browser_cmd);
use File::HomeDir;
use File::Temp;
use File::Spec;
use Carp qw(carp);

sub podpreview :Export
{
	my $input_pod = shift;

	my $parser = Pod::Simple::HTML->new;
	my $config_path = File::Spec->catfile(File::HomeDir->my_home, '.podpreview');

	if ( -e $config_path and -f $config_path )
	{
		my $config = Config::Tiny->read($config_path) 
			or carp "Error loading config: " . Config::Tiny::errstr;

		my @options = qw(
			perldoc_url_prefix
			perldoc_url_postfix
			man_url_prefix
			man_url_postfix
			title_prefix
			title_postfix
			html_h_level
			html_header_before_title
			html_header_after_title
			html_footer
			index
			html_css
			html_javascript
			force_title 
			default_title
		);

		foreach my $option (@options)
		{
			if ( exists $config->{_}->{$option} )
			{
				$parser->$option( $config->{_}->{$option} );
			}
		}
	}

	my $fh = File::Temp->new( SUFFIX => '.html');
	$parser->output_fh($fh);
	$parser->parse_file($input_pod);
	close $fh;

	if ( $^O eq "MSWin32" )
	{
		# Browser::Open currently has issues on Win32
		exec ( "start " . $fh->filename );
	}
	else
	{
		exec ( open_browser_cmd . " " . $fh->filename );
	}
}

1;

=head1 NAME

App::PodPreview - Preview POD files in a browser

=head1 VERSION

version 0.002

=head1 SYNOPSIS

  use App::PodPreview qw(podpreview);
  podpreview('/path/to/file.pod');

=head1 DESCRIPTION

This module is used internally by the C<podpreview> utility.

=head1 AUTHOR

Peter Shangov <pshangov at yahoo dot com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2010 by Peter Shangov.

This is free software; you can redistribute it and/or modify it under the
same terms as the Perl 5 programming language system itself.