# Blosxom Plugin: flavourpathinfo
# Author(s): Gavin Carr <gavin@openfusion.com.au>
-# Version: 0.001000
+# Version: 0.002002
# Documentation: 'perldoc flavourpathinfo'
+# Follows: extensionless
package flavourpathinfo;
# --- 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;
}
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