--- trunk/html/swish.cgi 2003/03/16 21:06:43 8 +++ trunk/html/swish.cgi 2003/03/18 20:24:57 22 @@ -8,39 +8,51 @@ use Lingua::Spelling::Alternative; use Text::Iconv; -# output charset -my $CHARSET='ISO-8859-2'; - Text::Iconv->raise_error(0); # Conversion errors raise exceptions -my $from_utf8 = Text::Iconv->new('UTF8', $CHARSET); - my $config=XMLin(undef, # keyattr => { label => "value" }, forcecontent => 0, ); +my $from_utf8 = Text::Iconv->new('UTF8', $config->{charset}); +sub x { + return $from_utf8->convert($_[0]); +} + use Data::Dumper; #print Dumper($config); my $spelling_alt; # FIX: doesn't work very well +if ($config->{findaffix}) { + $spelling_alt = new Lingua::Spelling::Alternative; + $spelling_alt->load_findaffix(x($config->{findaffix})); +} if ($config->{affix}) { $spelling_alt = new Lingua::Spelling::Alternative; - $spelling_alt->load_findaffix($config->{affix}); + $spelling_alt->load_affix(x($config->{affix})); } my $hits=0; -my $max_hits=$config->{max_hits}; +my $max_hits=x($config->{max_hits}); my %labels; foreach (@{$config->{labels}->{label}}) { - $labels{$_->{value}} = $from_utf8->convert($_->{content}); + $labels{$_->{value}} = x($_->{content}); } -print header(-charset=>$CHARSET),start_html(-title=>'Pretrazivanje',-lang=>'hr'),start_form; -print "Potraži ",popup_menu(-name=>'max_hits',-values=>[ sort keys %labels ],-labels=>\%labels,-default=>$max_hits)," dokumenata sa riječima: ",textfield('search'); -print submit(-value=>'prikaži'); -print checkbox(-name=>'no_affix', -checked=>0, -label=>'ne koristi variranje oblika riječi'); +if ($config->{charset}) { + print header(-charset=>x($config->{charset})); +} else { + print header; +} +print start_html(-title=>x($config->{title})),start_form; +print x($config->{text}->{search}); +print popup_menu(-name=>'max_hits',-values=>[ sort keys %labels ],-labels=>\%labels,-default=>$max_hits); +print x($config->{text}->{documents}); +print textfield('search'); +print submit(-value=> x($config->{text}->{submit})); +print checkbox(-name=>'no_affix', -checked=>0, -label=>x($config->{text}->{no_spell})) if ($spelling_alt); print end_form,hr; if (param('search')) { @@ -83,20 +95,33 @@ $s=~tr/šŠđĐčČćĆžŽ/sSdDcCcCzZ/; $s=~s/\*\*+/*/g; + my %params; # optional parametars for swish + + my @properties = split(/\s+/,x($config->{properties})); + $params{properties} = \@properties if (@properties); + my $sh = SWISH->connect('Fork', - prog => $config->{prog}, - indexes => $config->{index}, -# properties => [qw/god br nr/], + prog => x($config->{prog}), + indexes => x($config->{index}), results => sub { my ($sh,$hit) = @_; - print "swishdocpath,"\">",$hit->swishtitle," [",$hit->swishrank,"]
\n"; + my $hit_fmt = x($config->{hit}) || + "%s [%s]
\n"; + + if ($config->{url}) { + printf ($hit_fmt ,"http://".virtual_host().x($config->{url}).$hit->swishdocpath,$hit->swishtitle || 'untitled',$hit->swishrank); + } else { + printf ($hit_fmt ,$hit->swishdocpath,$hit->swishtitle || 'untitled',$hit->swishrank, map($hit->$_, @properties) ); + + } # print $_[1]->as_string,"
\n"; # my @fields = $hit->field_names; # print "Field '$_' = '", $hit->$_, "'
\n" for sort @fields; }, maxhits => param('max_hits') || $max_hits, + \%params, ); die $SWISH::errstr unless $sh; @@ -105,10 +130,12 @@ $hits = $sh->query($s); if ($hits > 0) { - print p,hr,"Prikazujem $hits dokumenata (maks. ",param('max_hits') || $max_hits,")... ($s)"; + print p,hr; + printf (x($config->{text}->{hits}),$hits,param('max_hits') || $max_hits,$s); } else { - print p,"Nije nađen niti jedan dokument... ($s, ",$sh->errstr,")"; + print p; + printf (x($config->{text}->{no_hits}),$s,$sh->errstr); } } else { - print p('Kod pretraživanja pretraživač pronalazi sve dokumente u kojima se pojavljuju sve upisanje riječi.',br,'Ako ispred riječi upišete minus (-) neće se prikazivati dokumenti koji imaju takvu riječ. Npr. +mreza -novak'); + print p(x($config->{text}->{footer})); }