/[webpac]/branches/fsb/WebPac.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /branches/fsb/WebPac.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 150 by dpavlin, Sun Nov 16 22:39:06 2003 UTC revision 186 by dpavlin, Sat Nov 29 18:40:19 2003 UTC
# Line 28  my $MAX_HITS = $cfg_global->val('webpac' Line 28  my $MAX_HITS = $cfg_global->val('webpac'
28  my $ON_PAGE =$cfg_global->val('webpac', 'on_page') || 10;  my $ON_PAGE =$cfg_global->val('webpac', 'on_page') || 10;
29  my $MIN_WILDCARD =$cfg_global->val('webpac', 'min_wildcard') || 1;  my $MIN_WILDCARD =$cfg_global->val('webpac', 'min_wildcard') || 1;
30  my $TEMPLATE =$cfg_global->val('webpac', 'template');  my $TEMPLATE =$cfg_global->val('webpac', 'template');
31    my $UNAC_FILTER =$cfg_global->val('global', 'unac_filter');
32    
33    if ($UNAC_FILTER) {
34            require $UNAC_FILTER;
35    }
36    
37  Text::Iconv->raise_error(0);     # Conversion errors raise exceptions  Text::Iconv->raise_error(0);     # Conversion errors raise exceptions
38    
# Line 105  sub show_results_list { Line 109  sub show_results_list {
109    
110                  push @persist_vars, "f$i";                  push @persist_vars, "f$i";
111                  push @persist_vars, "v$i";                  push @persist_vars, "v$i";
112                    push @persist_vars, "e$i" if ($q->param("e$i"));
113    
114                  push @url_params,"f$i=".$q->url_param("f$i");                  push @url_params,"f$i=".$q->url_param("f$i");
115                  push @url_params,"v$i=".$q->url_param("v$i");                  foreach my $v ($q->url_param("v$i")) {
116                            push @url_params,"v$i=$v";
117                    }
118                    push @url_params,"e$i=".$q->url_param("e$i");
119    
120                  my $wc="*";     # swish wildcard                  my $wc="*";     # swish wildcard
121                  $wc="" if ($i eq "");   # don't apply wildcard on field 0                  $wc="" if ($i eq "");   # don't apply wildcard on field 0
# Line 115  sub show_results_list { Line 123  sub show_results_list {
123                  # re-write query from +/- to and/and not                  # re-write query from +/- to and/and not
124                  my @param_vals = $q->param("v$i");                  my @param_vals = $q->param("v$i");
125                  my @swish_q;                  my @swish_q;
126                    my ($pre,$post,$exact) = ('','','');
127                  while (my $search = shift @param_vals) {                  while (my $search = shift @param_vals) {
128                          my $s;                          my $s;
129                          # remove accents                          # remove accents
# Line 125  sub show_results_list { Line 134  sub show_results_list {
134                          $search =~ s/^\s+//;                          $search =~ s/^\s+//;
135                          $search =~ s/\s+$//;                          $search =~ s/\s+$//;
136    
137                            # filed e[nr] is exact match bitmask
138                            # 1 = beginning, 2=end, 3=both
139                            $pre = '"xxbxx ' if ($q->param("e$i") & 1);
140                            $post = ' xxexx"' if ($q->param("e$i") & 2);
141                            # add qotes on other side
142                            if ($q->param("e$i")) {
143                                    $pre = '"' if (! $pre);
144                                    $post = '"' if (! $post);
145                                    $wc = '';       # don't use windcard in exact
146                                    $exact = '_exact';
147                            }
148    
149                          foreach (split(/\s+/,$search)) {                          foreach (split(/\s+/,$search)) {
150                                  if (m/^([+-])(\S+)/) {                                  if (m/^([+-])(\S+)/) {
151                                          $s.= ($s) ? "and " : "";                                          $s.= ($s) ? "and " : "";
152                                          $s.="not " if ($1 eq "-");                                          $s.="not " if ($1 eq "-");
153                                          $s.="$2$wc ";                                          $s.=$2.$wc." ";
154                                  } elsif (m/^\s*(and|or|not)\s*$/i) {                                  } elsif (m/^\s*(and|or|not)\s*$/i) {
155                                          $s.="$_ ";                                          $s.=$_." ";
156                                  # don't add * to words with less than x chars                                  # don't add * to words with less than x chars
157                                  } elsif (length($_) <= $MIN_WILDCARD) {                                  } elsif (length($_) <= $MIN_WILDCARD) {
158                                          $s.="$_ ";                                          $s.=$_." ";
159                                  } else {                                  } else {
160                                          $s.="$_$wc ";                                          $s.=$_.$wc." ";
161                                  }                                  }
162                          }                          }
163                          $s =~ s/\*+/*/g;                          $s =~ s/\*+/*/g;
164                            $s = $pre.$s.$post if ($q->param("e$i"));
165                          push @swish_q,$s;                          push @swish_q,$s;
166                  }                  }
167                  # FIXME default operator for multi-value fields is or. There is                  # FIXME default operator for multi-value fields is or. There is
168                  # no way to change it, except here for now. Is there need?                  # no way to change it, except here for now. Is there need?
169                  push @s_arr, $q->param("f$i")."_swish=(".join(" or ",@swish_q).")";                  push @s_arr, $q->param("f$i")."_swish".$exact."=(".join(" or ",@swish_q).")";
170          }          }
171    
172          my $tmpl = $self->load_tmpl('results.html', global_vars => 1);          my $tmpl = $self->load_tmpl('results.html', global_vars => 1);

Legend:
Removed from v.150  
changed lines
  Added in v.186

  ViewVC Help
Powered by ViewVC 1.1.26