]> git.deb.at Git - pkg/blosxom.git/blobdiff - blosxom.cgi
Added a $blog_encoding variable which can be used in the various templates. Updated...
[pkg/blosxom.git] / blosxom.cgi
index fbed8d5909ab41b234e023b7cfeae7340d5ea994..eef5b113ae7ce0965b9c8cb0a4e20589d5d8d961 100755 (executable)
@@ -19,6 +19,9 @@ $blog_description = "Yet another Blosxom weblog.";
 # What's this blog's primary language (for outgoing RSS feed)?
 $blog_language = "en";
 
+# What's this blog's text encoding ?
+$blog_encoding = "UTF-8";
+
 # Where are this blog's entries kept?
 $datadir = "/Library/WebServer/Documents/blosxom";
 
@@ -70,13 +73,14 @@ $static_entries = 0;
 
 # --------------------------------
 
-use vars qw! $version $blog_title $blog_description $blog_language $datadir $url %template $template $depth $num_entries $file_extension $default_flavour $static_or_dynamic $config_dir $plugin_list $plugin_dir $plugin_state_dir @plugins %plugins $static_dir $static_password @static_flavours $static_entries $path_info $path_info_yr $path_info_mo $path_info_da $path_info_mo_num $flavour $static_or_dynamic %month2num @num2month $interpolate $entries $output $header $show_future_entries %files %indexes %others !;
+use vars qw! $version $blog_title $blog_description $blog_language $blog_encoding $datadir $url %template $template $depth $num_entries $file_extension $default_flavour $static_or_dynamic $config_dir $plugin_list $plugin_dir $plugin_state_dir @plugins %plugins $static_dir $static_password @static_flavours $static_entries $path_info $path_info_yr $path_info_mo $path_info_da $path_info_mo_num $flavour $static_or_dynamic %month2num @num2month $interpolate $entries $output $header $show_future_entries %files %indexes %others !;
 
 use strict;
 use FileHandle;
 use File::Find;
 use File::stat;
 use Time::localtime;
+use Time::Local;
 use CGI qw/:standard :netscape/;
 
 $version = "2.0.2";
@@ -334,8 +338,6 @@ else {
   my $content_type = (&$template($path_info,'content_type',$flavour));
   $content_type =~ s!\n.*!!s;
 
-  $header = {-type=>$content_type};
-
   print generate('dynamic', $path_info, "$path_info_yr/$path_info_mo_num/$path_info_da", $flavour, $content_type);
 }
 
@@ -374,6 +376,10 @@ sub generate {
     # override the default built-in interpolate subroutine
     my $tmp; foreach my $plugin ( @plugins ) { $plugins{$plugin} > 0 and $plugin->can('interpolate') and defined($tmp = $plugin->interpolate()) and $interpolate = $tmp and last; }
         
+    # Content_type
+    $content_type=&$interpolate($content_type);
+    $header = {-type=>$content_type};
+
     # Head
     my $head = (&$template($currentdir,'head',$flavour));
   
@@ -419,8 +425,8 @@ sub generate {
       $path &&= "/$path";
 
       # Date fiddling for by-{year,month,day} archive views
-      use vars qw/ $dw $mo $mo_num $da $ti $yr $hr $min $hr12 $ampm /;
-      ($dw,$mo,$mo_num,$da,$ti,$yr) = nice_date($files{"$path_file"});
+      use vars qw/ $dw $mo $mo_num $da $ti $yr $hr $min $hr12 $ampm $utc_offset/;
+      ($dw,$mo,$mo_num,$da,$ti,$yr,$utc_offset) = nice_date($files{"$path_file"});
       ($hr,$min) = split /:/, $ti;
       ($hr12, $ampm) = $hr >= 12 ? ($hr - 12,'pm') : ($hr, 'am'); 
       $hr12 =~ s/^0//; $hr12 == 0 and $hr12 = 12;
@@ -494,20 +500,25 @@ sub nice_date {
   my($unixtime) = @_;
   
   my $c_time = ctime($unixtime);
-  my($dw,$mo,$da,$ti,$yr) = ( $c_time =~ /(\w{3}) +(\w{3}) +(\d{1,2}) +(\d{2}:\d{2}):\d{2} +(\d{4})$/ );
+  my($dw,$mo,$da,$hr,$min,$yr) = ( $c_time =~ /(\w{3}) +(\w{3}) +(\d{1,2}) +(\d{2}):(\d{2}):\d{2} +(\d{4})$/ );
+  $ti="$hr:$min";
   $da = sprintf("%02d", $da);
   my $mo_num = $month2num{$mo};
-  
-  return ($dw,$mo,$mo_num,$da,$ti,$yr);
+
+  my $offset = timegm(00, $min, $hr, $da, $mo_num-1, $yr-1900)-$unixtime;  
+  my $utc_offset = sprintf("%+03d", int($offset / 3600)).sprintf("%02d", ($offset % 3600)/60) ;
+
+  return ($dw,$mo,$mo_num,$da,$ti,$yr,$utc_offset);
 }
 
 
 # Default HTML and RSS template bits
 __DATA__
-html content_type text/html
+html content_type text/html; charset=$blog_encoding
 
 html head <html>
 html head     <head>
+html head         <meta http-equiv="content-type" content="text/html;charset=$blog_encoding" />
 html head         <link rel="alternate" type="type="application/rss+xml" title="RSS" href="$url/index.rss" />
 html head         <title>$blog_title $path_info_da $path_info_mo $path_info_yr
 html head         </title>
@@ -536,22 +547,24 @@ html foot         </center>
 html foot     </body>
 html foot </html>
 
-rss content_type text/xml
+rss content_type text/xml ; charset=$blog_encoding
 
-rss head <?xml version="1.0"?>
-rss head <!-- name="generator" content="blosxom/$version" -->
-rss head <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-rss head 
-rss head <rss version="0.91">
+rss head <?xml version="1.0" encoding="$blog_encoding"?>
+rss head <rss version="2.0">
 rss head   <channel>
-rss head     <title>$blog_title $path_info_da $path_info_mo $path_info_yr</title>
-rss head     <link>$url</link>
+rss head     <title>$blog_title</title>
+rss head     <link>$url/$path_info</link>
 rss head     <description>$blog_description</description>
 rss head     <language>$blog_language</language>
+rss head     <docs>http://blogs.law.harvard.edu/tech/rss</docs>
+rss head     <generator>blosxom/$version</generator>
 
 rss story   <item>
 rss story     <title>$title</title>
+rss story     <pubDate>$dw, $da $mo $yr $ti:00 $utc_offset</pubDate>
 rss story     <link>$url/$yr/$mo_num/$da#$fn</link>
+rss story     <category>$path</category>
+rss story     <guid isPermaLink="false">$path/$fn</guid>
 rss story     <description>$body</description>
 rss story   </item>