Enable warnings and strict for interpolate_fancy.
[matthijs/upstream/blosxom-plugins.git] / general / interpolate_fancy
index ff888e15979c4f680ee0e3def297a77141859c76..4f5b6ebc3ec01d201a416e57ec77bb9a45871fef 100644 (file)
@@ -8,6 +8,9 @@
 
 package interpolate_fancy;
 
+use warnings;
+use strict;
+
 # --- Configurable variables -----
 
 # Do you want me to recursively interpolate into the story $title
@@ -96,7 +99,10 @@ sub _resolve_nested {
 
 
 sub interpolate {
-  return sub {
+  return \&interpolate_fancy::do_interpolate;
+}
+
+sub do_interpolate {
 
     package blosxom;
 
@@ -145,7 +151,6 @@ sub interpolate {
 
     return $template;
 
-  };  
 }
 
 sub _test {
@@ -173,8 +178,16 @@ sub _action {
   $blosxom::plugins{$plugin} > 0
     and $plugin->can($action) 
       and $result = $plugin->$action($attributes, $content);
-
-  return $attributes->{'output'} =~ /yes/i ? $result : undef;
+  # Optionally interpolate and/or output the result, if requested. 
+  if ($attributes->{'output'} =~ /yes/i) {
+    if ($attributes->{'interpolate'} =~ /yes/i) {
+      $result = interpolate_fancy::do_interpolate($result);
+    } 
+    return $result;
+  } else {
+    return undef;
+  }
 }
 
 sub _attributes {
@@ -303,6 +316,10 @@ Specify that results should be sent to the browser using the output="yes" attrib
 
 Otherwise, subroutines will still have their effect, but the results will be tossed out.
 
+Normally, the result from the subroutine is sent as-is, but you can set the interpolate="yes" attribute to let interpolate_fancy interpolate the results, as follows:
+
+  <@plugin.subroutine arg1="a" arg2="bee" output="yes" interpolate="yes"/>
+
 Content wrapped in the action call is sent as another argument to the subroutine:
 
   <@thePlugin.subroutine encoding="Latin1" output="yes">
@@ -341,6 +358,14 @@ sub foreshorten {
   return substr($content, 0, $attributes->{'length'}||$default_length);
 }
 
+# This action includes the template specified in the 'name' attribute
+
+sub includetemplate {
+  my($self, $attributes, $content) = @_;
+  $name = $attributes->{'name'};
+  return &$blosxom::template($blosxom::path_info, $name, $blosxom::flavour);
+}
+
 --
 
 Calling these individually in a Blosxom flavour template looks something like:
@@ -369,6 +394,11 @@ The following bit of text is only 20 characters in length and devoid of HTML:
 </@myplugin.strip_html>
 </@myplugin.foreshorten>
 
+The following includes the 'sidebar' template, while interpolating
+the contents of that file:
+
+<@myplugin.include name="sidebar" output="yes" interpolate="yes"/>
+
 =head1 INSTALLATION
 
 Drop the interpolate_fancy plug-in into your Blosxom plugins folder.