[cgi-wiki-dev] CGI::Wiki::Formatter::Multiple
Tom Insam
cgi-wiki-dev@earth.li
Wed, 15 Sep 2004 15:20:43 +0100
--Apple-Mail-1-986726492
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed
On Sep 14, 2004, at 10:01, Kake L Pugh wrote:
> On Mon 13 Sep 2004, Tom Insam <tom@jerakeen.org> wrote:
>> attached is a patch against CGI::Wiki::Formatter::Multiple 0.01 that
>> will pass through the 'find_internal_links' call to the correct
>> formatter - as far as I can tell, wikis with >1 formatter don't
>> currently track backlinks..
>
> Good work! Can you send a test please?
New version of patch against current CPAN release includes a test
--Apple-Mail-1-986726492
Content-Type: multipart/appledouble;
boundary=Apple-Mail-2-986726493
Content-Disposition: attachment
--Apple-Mail-2-986726493
Content-Transfer-Encoding: base64
Content-Type: application/applefile;
name="formatter_multiple.diff"
Content-Disposition: attachment;
filename=formatter_multiple.diff
AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAAAoAAAADAAAASAAAABcAAAACAAAA
XwAABq5URVhUUipjaAAAZm9ybWF0dGVyX211bHRpcGxlLmRpZmYAAAEAAAAGaAAABWgAAABGAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAASAAJTW9uYWNvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgACACwAIgNW
AqIALAAiA1YCor1uDiMAAAxPAAAMTwAAArUBAQAABRhSKmNoAIQAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdDb3VyaWVyAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAACQAAAAQJSGVsdmV0aWNhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADENvbmZp
ZGVudGlhbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAQAAAYAAAACAAAAAgAAAAIAAAAAAAAEBAQAB
AQEAAAAAAgBQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmlz
by04ODU5LTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAZoAAAFaAAAAEYAZcCMA1gAAAAcAEYAAU1Q
U1IAAAASQkJTVAAAAB4D7f//AAAAAAB47FAAgP//AAAATAB47FQ=
--Apple-Mail-2-986726493
Content-Transfer-Encoding: 7bit
Content-Type: application/text;
x-mac-type=54455854;
x-unix-mode=0644;
x-mac-creator=522A6368;
name="formatter_multiple.diff"
Content-Disposition: attachment;
filename=formatter_multiple.diff
diff -ur CGI-Wiki-Formatter-Multiple-0.01/lib/CGI/Wiki/Formatter/Multiple.pm CGI-Wiki-Formatter-Multiple-changed/lib/CGI/Wiki/Formatter/Multiple.pm
--- CGI-Wiki-Formatter-Multiple-0.01/lib/CGI/Wiki/Formatter/Multiple.pm Mon Sep 22 16:09:33 2003
+++ CGI-Wiki-Formatter-Multiple-changed/lib/CGI/Wiki/Formatter/Multiple.pm Wed Sep 15 15:19:23 2004
@@ -96,8 +96,29 @@
sub format {
my ($self, $raw, $wiki, $metadata) = @_;
- my $formatter_label = $metadata->{formatter}[0] || "_DEFAULT";
- return $self->{formatters}{$formatter_label}->format( $raw, $wiki );
+ return $self->_formatter($metadata)->format($raw, $wiki);
+}
+
+=item B<find_internal_links( $raw, $metadata )>
+
+=cut
+
+sub find_internal_links {
+ my ($self, $raw, $metadata) = @_;
+ return () unless $self->_formatter($metadata);
+ return () unless $self->_formatter($metadata)->can("find_internal_links");
+ return $self->_formatter($metadata)->find_internal_links($raw, $metadata);
+}
+
+# internal method to return the correct formatter for the current
+# page.
+
+sub _formatter {
+ my $self = shift;
+ my $metadata = shift;
+ my $label = $metadata->{formatter} || "_DEFAULT";
+ $label = $label->[0] if ref($label);
+ return $self->{formatters}{$label} || $self->{formatters}{_DEFAULT};
}
=back
diff -ur CGI-Wiki-Formatter-Multiple-0.01/t/02_multiple_formatters.t CGI-Wiki-Formatter-Multiple-changed/t/02_multiple_formatters.t
--- CGI-Wiki-Formatter-Multiple-0.01/t/02_multiple_formatters.t Mon Sep 22 16:08:27 2003
+++ CGI-Wiki-Formatter-Multiple-changed/t/02_multiple_formatters.t Wed Sep 15 15:19:12 2004
@@ -5,7 +5,7 @@
use CGI::Wiki::Formatter::Multiple;
use vars qw( $num_sqlite_tests );
BEGIN {
- $num_sqlite_tests = 5;
+ $num_sqlite_tests = 7;
}
use Test::More tests => 1 + $num_sqlite_tests;
@@ -31,7 +31,7 @@
my $wiki = CGI::Wiki->new( store => $store, formatter => $formatter );
isa_ok( $wiki, "CGI::Wiki" );
- $wiki->write_node( "Normal Node", "foo bar", undef,
+ $wiki->write_node( "Normal Node", "foo bar FooBar", undef,
{ formatter => "normal" } ) or die "Can't write node";
$wiki->write_node( "UC Node", "foo bar", undef,
{ formatter => "uc" } ) or die "Can't write node";
@@ -39,7 +39,7 @@
my %data1 = $wiki->retrieve_node( "Normal Node" );
my $output1 = $wiki->format( $data1{content}, $data1{metadata} );
- like( $output1, qr|<p>\s*foo bar\s*</p>|,
+ like( $output1, qr|\Q<p>foo bar <a href="wiki.cgi?node=FooBar">FooBar</a></p>|,
"'normal' node formatted as expected" );
my %data2 = $wiki->retrieve_node( "UC Node" );
@@ -58,6 +58,12 @@
my %data4 = $wiki->retrieve_node( "Other Node" );
my $output4 = $wiki->format( $data4{content}, $data4{metadata} );
like( $output4, qr|<p>\s*foo bar\s*</p>|, "default _DEFAULT as expected" );
+
+ ok( $formatter->can("find_internal_links"),
+ "formatter can find_internal_links" );
+
+ my @links = $formatter->find_internal_links( $data1{content}, $data1{metadata} );
+ is_deeply(\@links, [ 'FooBar' ], "links are correct");
} # end of SKIP
--Apple-Mail-2-986726493--
--Apple-Mail-1-986726492--