| Pod-Simple-Vim documentation | Contained in the Pod-Simple-Vim distribution. |
Pod::Simple::Vim - Render pod for display in vim
Version 0.02
# 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;
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.
This module is not meant to be used directly, it is a backend to the vim PERLDOC2 plugin.
Petar Shangov, <pshangov at yahoo.com>
Pod::Simple, the PERLDOC2 plugin at http://www.vim.org/scripts/script.php?script_id=2171
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 2008 Petar Shangov, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| 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__