[ic] Prevent search from matching on html

Josh Lavin josh at myprivacy.ca
Mon Oct 30 14:54:39 EST 2006


On Oct 27, 2006, at 2:10 PM, Kevin Walsh wrote:

> Josh Lavin <josh at myprivacy.ca> wrote:
>> On Oct 26, 2006, at 5:29 PM, Kevin Walsh wrote:
>>> You are always returning a true value.  A SearchOp's coderef needs
>>> to return true if a match is found or false if no match is found.
>>>
>>> Try something like this instead:
>>>
>>>     CodeDef not_tags SearchOp
>>>     CodeDef not_tags Routine <<EOR
>>>     sub {
>>>         my ($self, $i, $pat) = @_;
>>>         $pat = qr/$pat/i;
>>>
>>>         return sub {
>>>             my $string = shift;
>>>
>>>             $string =~ s:<[/\w].+?>::gi;
>>>             return $string =~ $pat;
>>>         };
>>>     }
>>>     EOR
>>>
>> Thanks, Kevin. That did the trick, but only after I made a change to
>> Search.pm, which you mentioned here:
>> http://www.icdevgroup.org/pipermail/interchange-users/2006-July/ 
>> 045747.html
>>
>> I was getting the same "Can't use an undefined value as an ARRAY
>> reference" error.
>>
>> After making the change, I then started getting random bareword
>> errors. When searching for 'berkey' (a real product), sometimes it
>> would get the result, and other times this:
>>
>> Limit subroutine creation: Bad code: Bareword found where operator
>> expected at (eval 1224) line 8, near "] aqberkey" syntax error at
>> (eval 1224) line 8, near "] aqberkey "
>>
>> This is mentioned here:
>> http://www.icdevgroup.org/pipermail/interchange-users/2004-June/ 
>> 039504.html
>>
> Ok.  Perhaps I'll take a look into that at some point, but not right
> now.  I assume you have a reasonably up to date Perl installation.
> I use the 5.8.8 version that comes with Gentoo GNU/Linux.  There's
> probably not a lot of point looking into it if you have Perl 5.6.

I have Perl 5.8.7.

> If you're using RPC mode then perhaps you should drop out of that,
> back to high/low traffic mode, and see if that helps.

Changing from RPC to High solved the problem. However, I removed the  
mv_column_op for the Text::Query module (aq), and now it works fine,  
even in RPC mode. :-)

>> Another thing, perhaps unrelated, is how to search multiple fields
>> with a custom SearchOp and get it to work on all? E.g.:
>> sf=description
>> vs.
>> sf=description,comment
>>
> I think that should "just work".  Have you tried it and verified that
> it fails?  What happens when you try?  What happens with "sf=*"?

Using more than one search field, or sf=*, or sf=:* with a custom  
SearchOp causes the search to fail. Maybe because it is now an array?

--
Josh Lavin
Kingdom Design   http://www.kingdomdesign.com/



More information about the interchange-users mailing list