# Blosxom Plugin: flavourpathinfo
# Author(s): Gavin Carr <gavin@openfusion.com.au>
-# Version: 0.001000
+# Version: 0.002000
# Documentation: 'perldoc flavourpathinfo'
package flavourpathinfo;
sub start {
my $path_info = $blosxom::path_info;
- return 1 if -e "$blosxom::datadir/$path_info";
debug(1, "original path_info: $path_info");
+ return 1 if -e "$blosxom::datadir/$path_info";
- $path_info =~ s!/$!!;
- if ($path_info =~ m!^(.*)/([^/]+)$!) {
+ # Remove any trailing /
+ $path_info =~ s! /$ !!x;
+
+ # 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;
}
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