- }
-
- foreach my $path_file ( &$sort(\%f, \%others) ) {
- last if $ne <= 0 && $date !~ /\d/;
- use vars qw/ $path $fn /;
- ($path,$fn) = $path_file =~ m!^$datadir/(?:(.*)/)?(.*)\.$file_extension!;
-
- # Only stories in the right hierarchy
- $path =~ /^$currentdir/ or $path_file eq "$datadir/$currentdir" or next;
-
- # Prepend a slash for use in templates only if a path exists
- $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 $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;
-
- # Only stories from the right date
- my($path_info_yr,$path_info_mo_num, $path_info_da) = split /\//, $date;
- next if $path_info_yr && $yr != $path_info_yr; last if $path_info_yr && $yr < $path_info_yr;
- next if $path_info_mo_num && $mo ne $num2month[$path_info_mo_num];
- next if $path_info_da && $da != $path_info_da; last if $path_info_da && $da < $path_info_da;
-
- # Date
- my $date = (&$template($path,'date',$flavour));
-
- # Plugins: Date
- foreach my $plugin (@plugins) {
- if ( $plugins{$plugin} > 0 and $plugin->can('date') ) {
- $entries
- = $plugin->date( $currentdir, \$date, $files{$path_file}, $dw,
- $mo, $mo_num, $da, $ti, $yr );
- }
- }
-
- $date = &$interpolate($date);
-
- $curdate ne $date and $curdate = $date and $output .= $date;
-
- use vars qw/ $title $body $raw /;
- if (-f "$path_file" && $fh->open("< $path_file")) {
- chomp($title = <$fh>);
- chomp($body = join '', <$fh>);
- $fh->close;
- $raw = "$title\n$body";
- }
- my $story = (&$template($path,'story',$flavour));
-
- # Plugins: Story
- foreach my $plugin (@plugins) {
- if ( $plugins{$plugin} > 0 and $plugin->can('story') ) {
- $entries = $plugin->story( $path, $fn, \$story, \$title, \$body );
- }
- }
-
- if ($content_type =~ m{\bxml\b}) {
- # Escape <, >, and &, and to produce valid RSS
- my %escape = ('<'=>'<', '>'=>'>', '&'=>'&', '"'=>'"');
- my $escape_re = join '|' => keys %escape;
- $title =~ s/($escape_re)/$escape{$1}/g;
- $body =~ s/($escape_re)/$escape{$1}/g;
- }
-
- $story = &$interpolate($story);
-
- $output .= $story;
- $fh->close;
-
- $ne--;
- }
-
- # Foot
- my $foot = (&$template($currentdir,'foot',$flavour));
-
- # Plugins: Foot
- foreach my $plugin (@plugins) {
- if ( $plugins{$plugin} > 0 and $plugin->can('foot') ) {
- $entries = $plugin->foot( $currentdir, \$foot );