sub render {
my ($self,$usemap) = @_;
- return $self->[0]->render($usemap) . ' AND ' . $self->[1]->render($usemap);
+ return $self->[0]->render($usemap)
+ . ( $usemap->{RPN}->{And} || ' AND ' )
+ . $self->[1]->render($usemap);
}
package Net::Z3950::RPN::Or;
sub render {
my ($self,$usemap) = @_;
- return $self->[0]->render($usemap) . ' OR ' . $self->[1]->render($usemap);
+ return $self->[0]->render($usemap)
+ . ( $usemap->{RPN}->{Or} || ' OR ' )
+ . $self->[1]->render($usemap);
}
package Net::Z3950::RPN::AndNot;
sub render {
my ($self,$usemap) = @_;
- return $self->[0]->render($usemap) . ' AND NOT ' . $self->[1]->render($usemap);
+ return $self->[0]->render($usemap)
+ . ( $usemap->{RPN}->{Or} || ' AND NOT ' )
+ . $self->[1]->render($usemap);
}
package Net::Z3950::RPN::Term;
my $comp = $attributes->{6};
if ($prefix) {
if ( defined($comp) && ( $comp >= 2 ) ) {
- $prefix = "all$prefix= ";
- }
- else {
- $prefix = "$prefix=";
+ $prefix = "all$prefix"; # FIXME?
}
}
- my $q = $prefix . $self->{term} . '*';
+ my $q;
+
+ if ( $usemap->{prefix_term} ) {
+ warn "# using custom prefix_term query";
+ $q = $usemap->{prefix_term}->( $prefix, $self->{term} );
+ } else {
+ $q = ( $prefix ? $prefix . '=' : '' ) . $self->{term} . '*';
+ }
print "# q: $q\n";
return $q;
}
# 12 => '',
# 1007 => '',
1016 => 'all',
+
+ RPN => {
+ And => '&bool[]=AND&',
+ Or => '&bool[]=OR&',
+ },
+ prefix_term => sub {
+ my ( $prefix, $term ) = @_;
+ return 'type[]=' . $prefix . '&lookfor[]=' . $term;
+ }
}};
sub search {
die "need query" unless defined $query;
# http://catalog.hathitrust.org/Search/Home?lookfor=croatia%20AND%20zagreb&type=title
- my $url = 'http://catalog.hathitrust.org/Search/Home?lookfor=' . $query;
+ my $url = 'http://catalog.hathitrust.org/Search/Home?' . $query;
diag "get $url";