Pod::Simple::Vim - Render pod for display in vim


Pod-Simple-Vim documentation Contained in the Pod-Simple-Vim distribution.

Index


Code Index:

NAME

Top

Pod::Simple::Vim - Render pod for display in vim

VERSION

Top

Version 0.02

SYNOPSIS

Top

  # See Pod::Simple's documentation for interface details
  use Pod::Simple::Vim;

  my $parser = Pod::Simple::Vim->new;

  my $perldoc;
  $parser->output_string(\$perldoc);
  $parser->parse_file($pod_filename); 

  print $perldoc;

DESCRIPTION

Top

This module translates pod into a format used by the vim PERLDOC2 plugin to display perl documentation with syntax highlighting, rather than as plain text.

USAGE

Top

This module is not meant to be used directly, it is a backend to the vim PERLDOC2 plugin.

AUTHOR

Top

Petar Shangov, <pshangov at yahoo.com>

SEE ALSO

Top

Pod::Simple, the PERLDOC2 plugin at http://www.vim.org/scripts/script.php?script_id=2171

BUGS

Top

Please report any bugs or feature requests pertaining to either this module or the PERLDOC2 plugin to bug-pod-simple-vim at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Pod-Simple-Vim. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

COPYRIGHT & LICENSE

Top


Pod-Simple-Vim documentation Contained in the Pod-Simple-Vim distribution.

package Pod::Simple::Vim;

use strict;
use warnings;

use Text::Wrap;

our $VERSION = '0.02';

use base 'Pod::Simple::Methody';

my $list_indent_level = 0;
my $text_indent_level = 0;
my $initial_tab;
my $text_bin;
my $wrap = 0;
my $wrap_text_item = 0;
my $first_item;


#---------------------------------------------------------------------------
#  HANDLE VARIOUS TYPES OF TEXT
#---------------------------------------------------------------------------

#GENERAL TEXT HANDLER
sub handle_text 
{
	my($self, $text) = @_;
	if ($wrap)
	{
		$text_bin .= $text;
	} else {
		print OUTFH $text;
	}
}

#ORDINARY TEXT
sub start_Para
{
	$wrap = 1;
	print OUTFH "\n" unless $first_item;
	undef $first_item;
}

sub end_Para
{
	$wrap = 0;
	$initial_tab = "\040\040\040\040"x$list_indent_level if $list_indent_level;
	local $Text::Wrap::unexpand = 0;
	#local $Text::Wrap::columns = 78;
	print OUTFH wrap($initial_tab, $initial_tab, $text_bin);
	print OUTFH "\n";
	undef $text_bin;
}

#VERBATIM
sub start_Verbatim
{
	my($self, $attrs) = @_;
	print OUTFH ">\n";
	$wrap = 1;
}

sub end_Verbatim
{
	my ($self, $attrs) = @_;
	$initial_tab = "";
	$initial_tab = "\040\040\040\040"x$list_indent_level if $list_indent_level;
	my @lines = split /\n/, $text_bin;
	print OUTFH $initial_tab, $_, "\n" for @lines;
	undef $wrap;
	undef $text_bin;
	print OUTFH "<";
}

#---------------------------------------------------------------------------
#  HANDLE HEADINGS
#---------------------------------------------------------------------------

#HEAD1
sub start_head1 {
	my($self, $attrs) = @_;
	print OUTFH "\n" unless $first_item;
	undef $first_item;
}

sub end_head1 {
	my($self) = @_;
	print OUTFH " ~\n";
}

#HEAD2
sub start_head2 {
	my($self, $attrs) = @_;
	print OUTFH "\n" unless $first_item;
	undef $first_item;
}

sub end_head2 {
	my($self) = @_;
	print OUTFH " ~\n";
}

#HEAD3
sub start_head3 {
	my($self, $attrs) = @_;
	print OUTFH "\n" unless $first_item;
	print OUTFH " ";
	undef $first_item;
}

sub end_head3 {
	my($self) = @_;
	print OUTFH " ~\n";
}

#HEAD4
sub start_head4 {
	my($self, $attrs) = @_;
	print OUTFH "\n" unless $first_item;
	print OUTFH "  ";
	undef $first_item;
}

sub end_head4 {
	my($self) = @_;
	print OUTFH " ~\n";
}

#---------------------------------------------------------------------------
# HANDLE LISTS  
#---------------------------------------------------------------------------

#TEXT
sub start_over_text {
	my($self, $attrs) = @_;
	$list_indent_level++;
}

sub end_over_text {
	my($self) = @_;
	$list_indent_level--;
}

sub start_item_text {
	my($self, $attrs) = @_;
	print OUTFH "\n" unless $first_item;
	undef $first_item;
	print OUTFH "\t"x$list_indent_level;
}

sub end_item_text {
	my($self) = @_;
	print OUTFH "\n";
}

#BULLET
sub start_over_bullet {
	my($self, $attrs) = @_;
	$list_indent_level++;
}

sub end_over_bullet {
	my($self) = @_;
	$list_indent_level--;
}

sub start_item_bullet {
	my($self, $attrs) = @_;
	print OUTFH "\n" unless $first_item;
	undef $first_item;
	print OUTFH "\t"x($list_indent_level-1) if $list_indent_level;
	print OUTFH "  * ";
	#$in_bullet++;
	$wrap = 1;
}

sub end_item_bullet {
	my($self) = @_;
	$initial_tab = "\040\040\040\040"x$list_indent_level if $list_indent_level;
	local $Text::Wrap::unexpand = 0;
	print OUTFH wrap("", $initial_tab, $text_bin);
	print OUTFH "\n";
	undef $text_bin;
	undef $wrap;
}

#NUMBER
sub start_over_number {
	my($self, $attrs) = @_;
	$list_indent_level++;
}

sub end_over_number {
	my($self) = @_;
	$list_indent_level--;
}

sub start_item_number {
	my($self, $attrs) = @_;
	print OUTFH "\n" unless $first_item;
	undef $first_item;
	print OUTFH "\t"x($list_indent_level-1) if $list_indent_level;
	print OUTFH " " . $attrs->{'number'} . ". ";
	#$in_bullet++;
	$wrap = 1;
}

sub end_item_number {
	my($self) = @_;
	$initial_tab = "\040\040\040\040"x$list_indent_level if $list_indent_level;
	local $Text::Wrap::unexpand = 0;
	print OUTFH wrap("", $initial_tab, $text_bin);
	print OUTFH "\n";
	undef $text_bin;
	undef $wrap;
}

#---------------------------------------------------------------------------
#  VIM MODELINE
#---------------------------------------------------------------------------

sub start_Document
{
	my $self = shift;
	$first_item = 1;
	*OUTFH = $self->output_fh();
}

sub end_Document
{
    print OUTFH "\n\nvim:nonu:ts=4:syn=perldoc:noet:lbr:bt=nofile:noma:bh=delete:noswf";
}

1;

__END__