tagging: Allow using titles in for related stories.
[matthijs/upstream/blosxom-plugins.git] / gavinc / flavourpathinfo
index 35c6353980fe98f2ea438f8f7304635ebfbf8665..e800a8bfa601166329e5cb8963f2cebe49bdeddb 100644 (file)
@@ -1,7 +1,8 @@
 # Blosxom Plugin: flavourpathinfo
 # Author(s): Gavin Carr <gavin@openfusion.com.au>
-# Version: 0.001000
+# Version: 0.002002
 # Documentation: 'perldoc flavourpathinfo'
+# Follows: extensionless
 
 package flavourpathinfo;
 
@@ -9,41 +10,66 @@ use strict;
 
 # --- Configurable variables -----
 
-my $debug_level = 0;
+# None
 
 # --------------------------------
 
-my $package = 'flavourpathinfo';
-sub debug {
-    my ($level, @msg) = @_;
-
-    if ($debug_level >= $level) {
-        print STDERR "$package debug $level: @msg\n";
-    }
-}
+# use Blosxom::Debug debug_level => 1;
 
 sub start { 
     my $path_info = $blosxom::path_info;
-    return 1 if -e "$blosxom::datadir/$path_info";
-    debug(1, "original path_info: $path_info");
 
-    $path_info =~ s!/$!!;
-    if ($path_info =~ m!^(.*)/([^/]+)$!) {
+    # Remove any trailing /
+    $path_info =~ s! /$ !!x;
+
+    my $path_file = $blosxom::path_info;
+    $path_file =~ s/\.\w+$/.$blosxom::file_extension/;
+    return 1 if -e "$blosxom::datadir/$path_info" || -f "$blosxom::datadir/$path_file";
+
+    # debug(1, "original path_info: $path_info");
+
+    # Check file/flavour variant
+    if ($path_info =~ m! ^ (.*) / ([^/]+) $ !x) {
         my $flavour = $2;
-        $path_info = "$1.$flavour";
+        my $path_info_new = "$1.$flavour";
         my $path_file = "$1.$blosxom::file_extension";
 
-        debug(1, "path_file: $path_file");
-        debug(1, "munged path_info: $path_info");
+        # debug(2, "path_file: $path_file, path_info_new: $path_info_new");
 
         if (-f "$blosxom::datadir/$path_file") {
-            debug(1, "munged \$path_info exists - updating \$blosxom::path_info");
-            $blosxom::path_info = $path_info;
+            # debug(1, "\$path_info_new exists - updating \$blosxom::path_info");
+            $blosxom::path_info = $path_info_new;
             $blosxom::flavour = $flavour;
             $blosxom::path_info_yr = undef;
+            return 1;
         }
     }
 
+    # Check dir/flavour variant (implying index.flavour)
+    if ($path_info =~ m! ^ (?: (.*) / )? ([^/]+) $ !x) {
+        my $dir = $1 || '';
+        my $flavour = $2;
+        # debug(2, "dir: $dir, flavour: $flavour");
+  
+        # Check there isn't an entry matching this
+        if (-f "$blosxom::datadir$dir/$flavour.$blosxom::file_extension") {
+          # debug(2, "entry $blosxom::datadir/$dir/$flavour.$blosxom::file_extension found - skipping");
+          return 1;
+        }
+          
+        # Check $dir is a directory (sanity check - overly aggressive?)
+        if ($dir && ! -d "$blosxom::datadir/$dir") {
+          # debug(2, "dir '$dir' is set but not a directory");
+          return 1; 
+        }
+
+        # debug(1, "dir '$dir' not set or exists and directory - setting \$blosxom::path_info");
+        $blosxom::path_info = $dir;
+        $blosxom::flavour = $flavour;
+        $blosxom::path_info_yr = undef;
+        return 1;
+    }
+
     return 1; 
 }
 
@@ -71,10 +97,23 @@ instead of the more typical:
     http://blog.example.com/category/post.atom
     http://blog.example.com/category/post.trackback
 
+With index pages, the 'index' portion can also be omitted, if desired:
+
+    http://blog.example.com/category/html
+    http://blog.example.com/category/atom
+
+map to:
+
+    http://blog.example.com/category/index.html
+    http://blog.example.com/category/index.atom
+
 =head1 USAGE
 
-Should be loaded early as it manipulates $blosxom::path_info
-e.g. as 00flavourpathinfo.
+If used with the 'extensionless' plugin, it should be loaded
+*after* extensionless.
+
+But should be loaded early as it manipulates $blosxom::path_info
+e.g. as 02flavourpathinfo.
 
 =head1 SEE ALSO