package ExaLead::Value; use strict; use CGI qw(unescapeHTML); sub new { ### c my( $class, $value, $query ) = @_; my $self = { 'value' => $value, 'query' => $query }; bless $self, $class; return $self; } sub value :lvalue { ### a $_[0]->{'value'}; } # get/set string sub getString { ### Returns a plain (un-highlighted) version of the string for the renderer ### (exhibits same intreface as {{Exalead::TextSeg}}) return CGI::unescapeHTML( $_[0]->{'value'} ); } sub getHighlighted { ### Returns a string with query terms tagged with with a highlighted span ### (exhibits same intreface as {{Exalead::TextSeg}} my $string = CGI::unescapeHTML( $_[0]->{'value'} ); my @values = split /(<.*?>)/, $string; foreach my $qt ( sort { length($b->regexp) <=> length($a->regexp) } $_[0]->{'query'}->terms ) { my @new_values; my $R = '('.$qt->regexp.')'; # warn $R. ".... @values ..."; for(my $i=0;$i<@values;$i+=2){ (my $T = $values[$i]) =~ s/$R/<span class="hi">$1<\/span>/ismg; push @new_values, split /(<.*?>)/, $T; push @new_values, $values[$i+1]; } @values = @new_values; } return join "",@values; } 1;