]> git.deb.at Git - deb/packages.git/blobdiff - bin/parse-debtags-voc
fix off-by-one after switching on the brain again
[deb/packages.git] / bin / parse-debtags-voc
index ebd65471b33dd2af1c8beb61565e02c76cd4e969..7515de118b8357f28a99e9ca4e808351f614c6be 100755 (executable)
@@ -1,8 +1,6 @@
 #!/usr/bin/perl -w
 # Convert Debtags vocabulary.gz files into Sleepycat db files
 #
-# $Id: parse-packages 227 2006-11-12 20:24:48Z djpig $
-#
 # Copyright (C) 2006  Frank Lichtenheld <djpig@debian.org>
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -16,7 +14,7 @@
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 use strict;
 use warnings;
@@ -24,6 +22,7 @@ use lib './lib';
 
 $| = 1;
 
+use POSIX;
 use DB_File;
 use File::Path;
 use Data::Dumper;
@@ -32,8 +31,8 @@ use URI::Escape;
 
 use Deb::Versions;
 use Packages::Template;
-use Packages::Config qw( $TOPDIR );
-use Packages::CGI;
+use Packages::Config qw( $TOPDIR @LANGUAGES );
+use Packages::I18N::Locale;
 &Packages::Config::init( './' );
 my $debtagsdir = "$TOPDIR/files/debtags";
 my $wwwdir = "$TOPDIR/www/about";
@@ -42,10 +41,20 @@ my (%voc, %voc_db);
 
 $/ = "";
 
-delete $ENV{'LANGUAGE'};
-delete $ENV{'LANG'};
-delete $ENV{'LC_ALL'};
-delete $ENV{'LC_MESSAGES'};
+sub process_desc {
+    my ($desc) = @_;
+
+    if ($desc) {
+       $desc = encode_entities($desc);
+
+       $desc =~ s,((ftp|http|https)://[\S~-]+?/?)((\&gt\;)?[)]?[']?[:.\,]?(\s|$)),<a href=\"$1\">$1</a>$3,go; # syntax highlighting -> '];
+       $desc =~ s/\A //o;
+       $desc =~ s/\n /\n/sgo;
+       $desc =~ s/\n.\n/\n<p>\n/go;
+       $desc =~ s/(((\n|\A) [^\n]*)+)/\n<pre>$1\n<\/pre>/sgo;
+    }
+    return $desc;
+}
 
 print "Parsing Vocabulary...\n";
 tie %voc_db, "DB_File", "$debtagsdir/vocabulary.db.new",
@@ -74,18 +83,22 @@ while (<VOC>) {
        warn "Duplicated key found: $voc_key\n";
        next;
     }
-    my ($sdesc,$ldesc) = split /\n/, encode_entities($data{description}), 2;
-
-    if ($ldesc) {
-       $ldesc =~ s,((ftp|http|https)://[\S~-]+?/?)((\&gt\;)?[)]?[']?[:.\,]?(\s|$)),<a href=\"$1\">$1</a>$3,go; # syntax highlighting -> '];
-       $ldesc =~ s/\A //o;
-       $ldesc =~ s/\n /\n/sgo;
-       $ldesc =~ s/\n.\n/\n<p>\n/go;
-       $ldesc =~ s/(((\n|\A) [^\n]*)+)/\n<pre>$1\n<\/pre>/sgo;
-    }
-    $data{html_description} = [ $sdesc, $ldesc||"" ];
+    my ($sdesc,$ldesc) = split /\n/, $data{description}, 2;
 
+    $data{html_description} = [ encode_entities($sdesc), process_desc($ldesc)||"" ];
     $voc_db{$voc_key} = $sdesc || "";
+
+    foreach my $lang (@LANGUAGES) {
+       next if $lang eq 'en';
+
+       my $cat = Packages::I18N::Locale->get_handle($lang)
+           or die "get_handle failed for $lang";
+
+       my $sdesc_trans = $cat->maketext($sdesc);
+       $voc_db{"$voc_key-$lang"} = $sdesc_trans
+           if $sdesc_trans and $sdesc_trans ne $sdesc;
+    }
+
     $voc{$voc_key} = \%data;
 }
 
@@ -104,7 +117,7 @@ my @facets = sort( grep { exists $voc{$_}{facet} } keys %voc );
 my @tags = sort( grep { exists $voc{$_}{tag} } keys %voc );
 my %tags_by_facet;
 foreach (@tags) {
-    my ($facet, $tag) = split /::/, $_, 2;
+    my ($facet, $tag) = split m/::/, $_, 2;
     warn "No facet data available for $facet\n"
        unless exists $voc{$facet};
     $tags_by_facet{$facet} ||= [];
@@ -112,15 +125,9 @@ foreach (@tags) {
 }
 my %content = ( vocabulary => \%voc,
                facets => \@facets, tags => \@tags,
-               tags_by_facet => \%tags_by_facet );
-# needed to work around the limitations of the the FILTER syntax
-$content{html_encode} = sub { return HTML::Entities::encode_entities(@_,'<>&"') };
-$content{uri_escape} = sub { return URI::Escape::uri_escape(@_) };
-$content{quotemeta} = sub { return quotemeta($_[0]) };
-$content{string2id} = sub { return &Packages::CGI::string2id(@_) };
-
+               tags_by_facet => \%tags_by_facet,
+               used_langs => [ 'en' ]);
 print TAGLST $template->page( 'tag_index', \%content );
-print TAGLST $template->trailer();
 close TAGLST or warn "Couldn't close tag list: $!";
 
 rename( "$wwwdir/debtags.en.html.new",