use EPrints; use strict; use warnings; my $session = EPrints::Session->new(); my $string_frag = lc $session->param( "q" ); my $lookup_file = $session->param( "file" ); my $mode = $session->param( "mode" ) || "phrase"; if( !defined $lookup_file ) { EPrints::abort( "no filename" ); } my $lookup_xml ={}; my $lookup_lc_names = []; $lookup_file=~s/\///sg; $lookup_file=~s/^\.+//s; my $filepath = $session->get_repository->get_conf( "config_path" )."/autocomplete/$lookup_file"; open( DATA, '<', $filepath ) || EPrints::abort "can't read $filepath: $!"; my @filtered_lookup_names; if( $mode eq "phrase" ) { @filtered_lookup_names = grep { index( $_, $string_frag ) != -1 } <DATA>; } if( $mode eq "prefix" ) { my $l = length $string_frag; @filtered_lookup_names = grep { substr( $_, 0, $l ) eq $string_frag } <DATA>; } close DATA; print <<END; <?xml version="1.0" encoding="UTF-8" ?> END print '<ul>'; my $togo = 20; my $first = 1; foreach my $value ( @filtered_lookup_names ) { chomp $value; $value =~ s/&/&/g; $value =~ s/>/>/g; $value =~ s/</</g; print "<li"; if( $first ) { print " class='ep_first'"; } print ">$value"; print "<ul><li id='for:value:relative:'>$value</li></ul>"; print "</li>"; $first= 0; --$togo; last unless $togo; } print '</ul>'; $session->terminate;