#!/usr/bin/env perl # # mkindex was written by Omar Polo and is placed in # the public domain. The author hereby disclaims copyright to this # source code. use open ":std", ":encoding(UTF-8)"; use utf8; use strict; use warnings; use v5.32; use File::Temp qw(tempfile); use SMArc qw(parse san urlencode initpage endpage index_header search thread_header threntry); my $outdir = $ENV{'OUTDIR'}; die 'Set $OUTDIR' unless defined $outdir; my $tfh; # thread file handle my $pfh; # page file handle my $page = 0; my @pages; my @files; my $from_day; my $to_day; my $threads_seen = 0; my $last_level = 0; my $last_tid; my $last_date; my $last_from; my $last_subj; my $threads = 0; my $threads_per_page = 100; sub maxs { my ($a, $b) = @_; return $a unless defined $b; return $a gt $b ? $a : $b; } sub mins { my ($a, $b) = @_; return $a unless defined $b; return $a lt $b ? $a : $b; } sub pagename { my $i = shift; return $i == 1 && "index.html" || "$i.html"; } sub endfile { say $pfh ''; close($pfh); push @pages, "$from_day - $to_day"; } sub nextfile { endfile if defined $pfh; $page += 1; my $path; ($pfh, $path) = tempfile "/tmp/smarc.index.XXXXXXXXXX"; binmode($pfh, ':utf8'); push @files, $path; say $pfh "
" x $last_level; say $tfh "\n
\n"; endpage($tfh); close($tfh); $last_level = 0; } sub nextthread { endthread if defined $tfh; my ($mid, $subj) = @_; my $dest = "$outdir/thread/$mid.html"; open($tfh, '>', $dest) or die "can't open $dest: $!"; initpage($tfh, $subj); thread_header $tfh, ["Thread: $subj"]; print $tfh "