-my (%pages);
-
-print "opening files ...\n";
-foreach my $s (@SUITES) {
- foreach my $a (@ARCHIVES) {
- next if $a eq 'security';
- next if $a eq 'non-US';
- my $key = ($a eq 'us') ? $s : "$s/$a";
- mkpath ( "$wwwdir/$key" );
- open $pages{$key}{index}{fh}, '>', "$wwwdir/$key/index.en.html.new"
- or die "can't open index file for output: $!";
- open $pages{$key}{fh}, '>', "$wwwdir/$key/allpackages.en.html.new"
- or die "can't open index file for output: $!";
-
- my $title = sprintf( gettext ( "Software Packages in \"%s\"" ),
- $s );
- my $index_title = sprintf( gettext ( "List of sections in \"%s\"" ),
- $s );
- print {$pages{$key}{fh}} header( title => $title,
- title_keywords => "debian, $s",
- desc => encode_entities( $title, '"' ),
- lang => 'en' ),
- title( $title ), '<dl>';
- print {$pages{$key}{index}{fh}} header( title => $index_title,
- title_keywords => "debian, $s",
- desc => encode_entities( $index_title, '"' ),
- lang => 'en' ),
- title( $index_title ), '<div id="lefthalfcol"><dl>';
-
- foreach my $sec (keys %{$sections->{$s}{$a}}) {
- mkpath ( "$wwwdir/$key/$sec" );
- open $pages{$key}{$sec}{fh}, '>', "$wwwdir/$key/$sec/index.en.html.new"
- or die "can't open index file for output: $!";
- $title = sprintf( gettext ( "Software Packages in \"%s\", section %s" ),
- $s, $sec );
- print {$pages{$key}{$sec}{fh}} header( title => $title,
- title_keywords => "debian, $s, $sec",
- desc => encode_entities( $title, '"' ),
- lang => 'en' ),
- title( $title ), '<dl>';
+my @PACKAGES = sort keys %packages;
+my @SRC_PACKAGES = sort keys %src_packages;
+
+print "Found ".scalar(@PACKAGES)." packages\n";
+print "Found ".scalar(@SRC_PACKAGES)." source packages\n";
+
+my $template = new Packages::Template( "$TOPDIR/templates", 'html');
+my $txt_template = new Packages::Template( "$TOPDIR/templates", 'txt');
+
+my $charset = 'UTF-8';
+my (%cat, %lang_vars, $prov_string, %s, %fh);
+foreach my $lang (@LANGUAGES) {
+ $cat{$lang} = Packages::I18N::Locale->get_handle($lang)
+ or die "get_handle failed for $lang";
+ $lang_vars{$lang} = { po_lang => $lang, ddtp_lang => $lang,
+ charset => $charset,
+ cat => $cat{$lang}, used_langs => \@LANGUAGES };
+ $s{begin}{$lang} = '['.uc($lang).':';
+ $s{end}{$lang} = ':'.uc($lang).']';
+ $prov_string .= $s{begin}{$lang}.$cat{$lang}->g('virtual package provided by').$s{end}{$lang};
+}
+
+sub open_file {
+ my ($key, $vars, $file) = @_;
+
+ $file ||= 'index';
+
+ print "opening $key\n";
+ mkdirp ( "$wwwdir/$key" );
+ if ($fh{$key}) {
+ warn "filehandle for $key already open\n";
+ return;
+ }
+ open($fh{$key}, '>',
+ "$wwwdir/$key/$file.slices.new")
+ or die "Cannot open file $wwwdir/$key/$file.slices.new: $!";
+
+ foreach my $lang (@LANGUAGES) {
+ print {$fh{$key}} "$s{begin}{$lang}\n";
+ $template->page( 'index_head',
+ { %{$lang_vars{$lang}},
+ %$vars },
+ $fh{$key});
+ print {$fh{$key}} "\n$s{end}{$lang}\n";
+ }
+}
+
+sub close_file {
+ my ($key, $vars, $file) = @_;
+
+ $file ||= 'index';
+
+ print "closing $key\n";
+ unless ($fh{$key}->opened()) {
+ warn "filehandle for $key already closed\n";
+ return;
+ }
+
+ foreach my $lang (@LANGUAGES) {
+ print {$fh{$key}} "\n$s{begin}{$lang}\n";
+ $template->page( 'index_foot',
+ { %{$lang_vars{$lang}},
+ %$vars },
+ $fh{$key});
+ print {$fh{$key}} "\n$s{end}{$lang}\n";
+ }
+ close($fh{$key})
+ or die "Cannot close file $wwwdir/$key/$file.slices.new: $!";
+
+ activate("$wwwdir/$key/$file.slices");
+}
+
+
+sub open_txt_file {
+ my ($key, $vars, $file) = @_;
+
+ $file ||= 'allpackages';
+ my $lang = 'en';
+
+ print "opening $key (txt,lang=$lang)\n";
+ mkdirp ( "$wwwdir/$key" );
+ $fh{"$key/$lang/txt"} = gzopen("$wwwdir/$key/$file.$lang.txt.gz.new", 'wb9')
+ or die "Cannot open file $wwwdir/$key/$file.$lang.txt.gz.new: $!";
+
+ my $gztxt = $txt_template->page( 'index_head',
+ { %{$lang_vars{$lang}},
+ %$vars });
+ $fh{"$key/$lang/txt"}->gzwrite($gztxt);
+}
+
+sub close_txt_file {
+ my ($key, $vars, $file) = @_;
+
+ $file ||= 'allpackages';
+ my $lang = 'en';
+
+ print "closing $key (txt,lang=$lang)\n";
+ my $gztxt = $txt_template->page( 'index_foot',
+ { %{$lang_vars{$lang}},
+ %$vars });
+ $fh{"$key/$lang/txt"}->gzwrite($gztxt);
+ ($fh{"$key/$lang/txt"}->gzclose == Z_OK) or
+ warn("can't close text index file $wwwdir/$key/$file.$lang.txt.gz.new: "
+ . $fh{"$key/$lang/txt"}->gzerror);
+ activate("$wwwdir/$key/$file.$lang.txt.gz");
+}
+
+
+foreach my $source (("", "source/")) {
+ print "write headers ...\n";
+ foreach my $s (@SUITES) {
+ mkdirp ( "$wwwdir/$source$s" );
+ my %common_vars = ( suite => $s,
+ is_source => $source );
+
+ open_file("$source$s", \%common_vars, 'allpackages');
+ open_txt_file("$source$s", \%common_vars, 'allpackages');
+
+ foreach my $sec (keys %{$sections->{$s}}) {
+ open_file("$source$s/$sec",
+ { %common_vars,
+ category => { id => N_('Section'),
+ name => $sec }});