/[nn]/search/nn-swish.cgi
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /search/nn-swish.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (hide annotations)
Tue Sep 9 08:20:51 2003 UTC (20 years, 7 months ago) by dpavlin
Branch: MAIN
Changes since 1.12: +25 -2 lines
count number of entries in each issue and offer option to limit search just to
one number.

1 dpavlin 1.1 #!/usr/bin/perl -w
2    
3     use strict;
4     use CGI qw/:standard -no_xhtml/;
5     use CGI::Carp qw(fatalsToBrowser);
6     use SWISH;
7 dpavlin 1.5 use Unicode::String qw(utf8 utf16);
8 dpavlin 1.3 require Unicode::Map8;
9 dpavlin 1.13 use GDBM_File;
10 dpavlin 1.1
11     my $dir='/home/dpavlin/nn/swish';
12 dpavlin 1.12 my $prog='/usr/bin/swish-e';
13 dpavlin 1.1
14     my $hits=0;
15 dpavlin 1.7 my $max_hits=100;
16    
17     my %labels = (100=>' 100', 200=>' 200', 500=>' 500', 0=>'neogranièeno');
18 dpavlin 1.1
19 dpavlin 1.13 my %brs_labels;
20    
21     my %tie;
22     tie %tie, 'GDBM_File', "$dir/brzakona.gdbm", &GDBM_READER, 0640 || die "tie: $!";
23     foreach (sort keys %tie) {
24     $brs_labels{$_} = sprintf("%-8s (%d zakona)",$_,$tie{$_});
25     }
26     untie %tie;
27    
28 dpavlin 1.1 print header(-charset=>'iso-8859-2'),start_html(-title=>'NN pretrazivanje',-lang=>'hr'),start_form;
29 dpavlin 1.7 print "Potra¾i ",popup_menu(-name=>'max_hits',-values=>[ sort keys %labels ],-labels=>\%labels,-default=>$max_hits)," zakona sa rijeèima: ",textfield('search');
30 dpavlin 1.1 print submit(-value=>'prika¾i');
31 dpavlin 1.13 print br,checkbox(-name=>'br_limit', -checked=>0, -label=>"ogranièi pretra¾ivanje samo na broj "),popup_menu(-name=>'br',-values=>[sort keys %brs_labels],-labels=>\%brs_labels);
32 dpavlin 1.1 print end_form,hr;
33    
34     if (param('search')) {
35    
36 dpavlin 1.6 my $s;
37     # re-write query from +/- to and/and not
38     foreach (split(/\s+/,param('search'))) {
39     if (m/^([+-])(\S+)/) {
40     $s.= ($s) ? "and " : "";
41     $s.="not " if ($1 eq "-");
42 dpavlin 1.10 $s.="$2* ";
43 dpavlin 1.6 } else {
44 dpavlin 1.10 $s .= "$_* ";
45 dpavlin 1.6 }
46     }
47 dpavlin 1.1 $s=~tr/šðžèæŠÐŽÈÆ/¹ð¾èæ©Ð®ÈÆ/; # 1250 -> iso8859-2
48     $s=~tr/¹©ðÐèÈæƾ®/sSdDcCcCzZ/;
49    
50 dpavlin 1.3 my $l2_map = Unicode::Map8->new("ISO-8859-2") || die;
51 dpavlin 1.5 my $us = Unicode::String->new();
52 dpavlin 1.3
53 dpavlin 1.1 my $sh = SWISH->connect('Fork',
54 dpavlin 1.12 prog => $prog,
55 dpavlin 1.1 indexes => "$dir/nn.index",
56 dpavlin 1.3 properties => [qw/god br nr/],
57 dpavlin 1.2 results => sub {
58 dpavlin 1.3 my ($sh,$hit) = @_;
59    
60 dpavlin 1.5 $us->utf8($hit->swishtitle);
61 dpavlin 1.2
62 dpavlin 1.5 print "<a href=\"",$hit->swishdocpath,"\"><tt>NN",$hit->god,"/",$hit->br,"</a> ",$hit->nr," </tt>",$l2_map->to8($us->utf16),"</a> [",$hit->swishrank,"]<br>\n";
63 dpavlin 1.2
64 dpavlin 1.3 # print $_[1]->as_string,"<br>\n";
65 dpavlin 1.2 # my @fields = $hit->field_names;
66     # print "Field '$_' = '", $hit->$_, "'<br>\n" for sort @fields;
67     },
68 dpavlin 1.8 maxhits => param('max_hits') || $max_hits,
69 dpavlin 1.1 );
70    
71     die $SWISH::errstr unless $sh;
72    
73 dpavlin 1.13 my $sw_q = "naslov_czs=($s)";
74    
75     if (param('br_limit')) {
76     my ($god,$br) = split(/\//,param('br'));
77     $sw_q .= " and god=".int($god) if ($god);
78     $sw_q .= " and br=".int($br) if ($br);
79     }
80    
81     print "<!-- swish query: $sw_q -->";
82    
83     $hits = $sh->query($sw_q);
84 dpavlin 1.1
85     if ($hits > 0) {
86 dpavlin 1.13 print p,hr,"Prikazujem $hits zakona";
87     print " iz broja ",param('br') if (param('br_limit'));
88     print " (maks. ",param('max_hits') || $max_hits,")... <small>($s)</small>";
89 dpavlin 1.1 } else {
90 dpavlin 1.6 print p,"Nije naðen niti jedan zakon... <small>($s, ",$sh->errstr,")</small>";
91 dpavlin 1.1 }
92     } else {
93 dpavlin 1.4 print p('Kod pretra¾ivanja pretra¾ivaè pronalazi sve zakone u kojima se pojavljuju <b>sve upisanje rijeèi</b>.',br,'Ako ispred rijeèi upi¹ete minus (-) neæe se prikazivati zakoni koji imaju takvu rijeè. Npr. <tt>+kava +zakon -dopunama</tt>');
94 dpavlin 1.9 print p("Mo¾ete proèitati i <a href=\"http://www.rot13.org/~dpavlin/nn.html\">èlanak</a> o tome kako je ovaj pretra¾ivaè napravljen i za¹to."),p("Ovo je <i>nova i br¾a verzija pretra¾ivaèa</i> o kojoj <a href=\"http://www.rot13.org/~dpavlin/nn.html#buducnost\">vi¹e mo¾ete saznati</a> iz èlanka.");
95 dpavlin 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.26