[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--