X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fblosxom-plugins.git;a=blobdiff_plain;f=gavinc%2Fflavourpathinfo;h=e800a8bfa601166329e5cb8963f2cebe49bdeddb;hp=35c6353980fe98f2ea438f8f7304635ebfbf8665;hb=20f6152e08a8e4e7bc9a063cf5d4b4a73f8c3b48;hpb=7cad1e1be8cd6b9fd11cf050a4e917ee814b83dc diff --git a/gavinc/flavourpathinfo b/gavinc/flavourpathinfo index 35c6353..e800a8b 100644 --- a/gavinc/flavourpathinfo +++ b/gavinc/flavourpathinfo @@ -1,7 +1,8 @@ # Blosxom Plugin: flavourpathinfo # Author(s): Gavin Carr -# 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