From 71175edf2bb82c616d4694752779a76f5b4d4078 Mon Sep 17 00:00:00 2001 From: Gavin Carr Date: Wed, 12 Sep 2007 12:11:45 +0000 Subject: [PATCH] Add dir/flavour support to flavourpathinfo, implying dir/index.flavour. --- gavinc/flavourpathinfo | 56 +++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/gavinc/flavourpathinfo b/gavinc/flavourpathinfo index 35c6353..6ab1b9c 100644 --- a/gavinc/flavourpathinfo +++ b/gavinc/flavourpathinfo @@ -1,6 +1,6 @@ # Blosxom Plugin: flavourpathinfo # Author(s): Gavin Carr -# Version: 0.001000 +# Version: 0.002000 # Documentation: 'perldoc flavourpathinfo' package flavourpathinfo; @@ -24,26 +24,54 @@ sub debug { 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; } @@ -71,6 +99,16 @@ 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 -- 2.30.2