X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fblosxom.git;a=blobdiff_plain;f=blosxom.cgi;h=9cef4da472926f660424a54ed4d4f07593cfc5bc;hp=86166f4449d2dca7b2011adcb31ef80ac60b7467;hb=refs%2Fheads%2Fstderr;hpb=16767be1028e381a35fe100e949ccc75acb9a8b9 diff --git a/blosxom.cgi b/blosxom.cgi index 86166f4..9cef4da 100755 --- a/blosxom.cgi +++ b/blosxom.cgi @@ -2,7 +2,7 @@ # Blosxom # Author: Rael Dornfest (2002-2003), The Blosxom Development Team (2005-2009) -# Version: 2.1.2 ($Id: blosxom.cgi,v 1.96 2009/07/19 12:21:09 xtaran Exp $) +# Version: 2.1.2 ($Id: blosxom.cgi,v 1.98 2009/07/19 17:18:37 xtaran Exp $) # Home/Docs/Licensing: http://blosxom.sourceforge.net/ # Development/Downloads: http://sourceforge.net/projects/blosxom @@ -99,6 +99,14 @@ $default_flavour = "html"; # Should I show entries from the future (i.e. dated after now)? $show_future_entries = 0; +# Should date components of the path always be at the front? +# If this is disabled, the date components can appear anywhere in the +# url (but always directly after each other, in the year/month/day +# order). For example, /category/subcategory/2008/12/ (or even +# /category/2008/12/subcategory/) shows all posts in subcategory from +# December 2008. +$date_first_in_url = 0; + # --- Plugins (Optional) ----- # File listing plugins blosxom should load (if empty blosxom will load @@ -237,6 +245,7 @@ use vars qw! $output $header $show_future_entries + $date_first_in_url %files %indexes %others @@ -395,9 +404,12 @@ sub blosxom_html_escape { # Global variable to be used in head/foot.{flavour} templates $path_info = ''; -# Add all @path_info elements to $path_info till we come to one that could be a year -while ( $path_info[0] && $path_info[0] !~ /^(19|20)\d{2}$/) { - $path_info .= '/' . shift @path_info; + +if (!$date_first_in_url) { + # Add all @path_info elements to $path_info till we come to one that could be a year + while ( $path_info[0] && $path_info[0] !~ /^(19|20)\d{2}$/) { + $path_info .= '/' . shift @path_info; + } } # Pull date elements out of path @@ -858,14 +870,20 @@ sub generate { } } + # Save unescaped versions and allow them to be used in + # flavour templates. + use vars qw/$url_unesc $path_unesc $fn_unesc/; + $url_unesc = $url; + $path_unesc = $path; + $fn_unesc = $fn; + + # Fix special characters in links inside XML content if ( $encode_xml_entities && $content_type =~ m{\bxml\b} && $content_type !~ m{\bxhtml\b} ) { # Escape special characters inside the container - $url =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg; - $path =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg; - $fn =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg; + &url_escape_url_path_and_fn(); # Escape <, >, and &, and to produce valid RSS $title = blosxom_html_escape($title); @@ -875,10 +893,9 @@ sub generate { $fn = blosxom_html_escape($fn); } + # Fix special characters in links inside XML content if ($encode_8bit_chars) { - $url =~ s([^-a-zA-Z0-9_./:])(sprintf('%%%02X', ord($&)))ge; - $path =~ s([^-a-zA-Z0-9_./:])(sprintf('%%%02X', ord($&)))ge; - $fn =~ s([^-a-zA-Z0-9_./:])(sprintf('%%%02X', ord($&)))ge; + &url_escape_url_path_and_fn(); } $story = &$interpolate($story); @@ -938,6 +955,12 @@ sub nice_date { return ( $dw, $mo, $mo_num, $da, $ti, $yr, $utc_offset ); } +sub url_escape_url_path_and_fn { + $url =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg; + $path =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg; + $fn =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg; +} + # Default HTML and RSS template bits __DATA__ html content_type text/html; charset=$blog_encoding