require 5; use 5.006; package AnnoCPAN::Perldoc; use strict; use warnings; use base 'Pod::Perldoc'; our $VERSION = '0.10'; sub maybe_generate_dynamic_pod { my($self, $found_things) = @_; if ($self->opt_f or $self->opt_q) { warn "Warning: -f and -q do not support annotations yet\n"; return shift->SUPER::maybe_generate_dynamic_pod(@_); } my @dynamic_pod; $self->filter_pod($found_things, \@dynamic_pod); my ($buffd, $buffer) = $self->new_tempfile('pod', 'dyn'); push @{ $self->{'temp_file_list'} }, $buffer; # I.e., it MIGHT be deleted at the end. print $buffd @dynamic_pod or die "Can't print $buffer: $!"; close $buffd or die "Can't close $buffer: $!"; @$found_things = $buffer; # Yes, so found_things never has more than one thing in # it, by time we leave here $self->add_formatter_option('__filter_nroff' => 1); return; } sub filter_pod { my($self, $found_things, $pod) = @_; Pod::Perldoc::DEBUG > 2 and print "Search: @$found_things\n"; my $file = shift @$found_things; open(F, "<", $file) # "Funk is its own reward" or die("Can't open $file $!"); Pod::Perldoc::DEBUG > 2 and print "Going to filter for $file\n"; my $content = do { local $/; }; my ($filter_class) = 'AnnoCPAN::Perldoc::Filter'; eval "require $filter_class"; if($@) { die "Couldn't load filter class '$filter_class': $@\n"; } my $filter = $filter_class->can('new') ? $filter_class->new : $filter_class ; @$pod = $filter->filter($content); close F or die "Can't close $file $!"; return; } 1; __END__ =head1 NAME AnnoCPAN::Perldoc - Integrate AnnoCPAN notes locally into perldoc =head1 SYNOPSYS # This is a fully functional 'perldoc' use AnnoCPAN::Perldoc; AnnoCPAN::Perldoc->run; =head1 DESCRIPTION AnnoCPAN is a web interface for the documentation of all the modules on CPAN, where users can add annotations on the margin of specific paragraphs throughout the POD. The master AnnoCPAN site is located at http://annocpan.org/. AnnoCPAN-Perldoc provides a substitute for the 'perldoc' command that displays the annotations locally and without requiring a connection to the Internet. It works by using a local note database that can be downloaded from http://annocpan.org/annopod.db This is an SQLite3 database; the file should be saved in one of these locations: $HOME $USERPROFILE $ALLUSERSPROFILE /var/annocpan It can also be called .annopod.db, to hide it in Unix-like systems. It is your resposibility to keep this file as up-to-date as you want. Future versions may include an automatic update feature (which will require network connectivity). =head1 SEE ALSO L, L, L =head1 AUTHOR Ivan Tubert-Brohman Eitub@cpan.orgE =head1 COPYRIGHT Copyright (c) 2005 Ivan Tubert-Brohman. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut