/[Grep]/lib/Grep/Source.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 /lib/Grep/Source.pm

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

revision 121 by dpavlin, Sat Apr 28 13:08:50 2007 UTC revision 130 by dpavlin, Sun Apr 29 12:07:06 2007 UTC
# Line 201  sub element_by_triplet { Line 201  sub element_by_triplet {
201          my $args = {@_};          my $args = {@_};
202    
203          my $tree = $args->{tree} || die "no tree";          my $tree = $args->{tree} || die "no tree";
204          my $message = $args->{message};          my $message = $args->{message} || '';
205          my $fatal = $args->{fatal};          my $fatal = $args->{fatal};
206          die "no templates" unless defined( $args->{templates} );          die "no triplets" unless defined( $args->{triplets} );
207          my @templates = @{ $args->{templates} };          my @triplets;
208            if ( ref( $args->{triplets} ) eq 'ARRAY' ) {
209                    @triplets = @{ $args->{triplets} };
210            } else {
211                    @triplets = ( $args->{triplets} );
212            }
213    
214          push @templates, ( undef, undef ) if ( $#templates == 0 );          push @triplets, ( undef, undef ) if ( $#triplets == 0 );
215    
216          die "wrapper doesn't have 3 elements but ", $#templates unless (          die "wrapper doesn't have 3 elements but ", $#triplets unless (
217                  ( $#templates + 1 ) % 3 == 0                  ( $#triplets + 1 ) % 3 == 0
218          );          );
219    
220          my ( $result, $el, $attr, $value );          my ( $el, $attr, $value );
221    
222            my @results;
223          my @tags;          my @tags;
224    
225          while ( @templates ) {          while ( @triplets ) {
226                  ( $el,$attr,$value ) = splice( @templates, 0, 3 );                  ( $el,$attr,$value ) = splice( @triplets, 0, 3 );
227                  my $tag = $attr ? "<$el $attr=\"$value\">" : "<$el>";                  my $tag = $attr ? "<$el $attr=\"$value\">" : "<$el>";
228                  push @tags, $tag;                  push @tags, $tag;
229                  $self->log->debug("looking for $message $tag");                  $self->log->debug("looking for $message $tag");
230                  $result = $tree->look_down( '_tag', $el, sub {                  @results = $tree->look_down( '_tag', $el, sub {
231                                  return 1 unless ( $attr && $value );                                  return 1 unless ( $attr && $value );
232                                  ( $_[0]->attr( $attr ) || '' ) eq $value;                                  ( $_[0]->attr( $attr ) || '' ) eq $value;
233                  });                  });
234                  last if $result;                  last if @results;
235          }          }
236    
237          if ( ! $result ) {          if ( ! @results ) {
238                  my $msg = "can't find $message ", join(" ", @tags);                  my $msg = "can't find $message ", join(" ", @tags);
239                  die $msg if ( $fatal );                  die $msg if ( $fatal );
240                  warn $msg;                  warn $msg;
241                  return;                  return;
242          }          }
243    
244          return $result;          $self->log->debug("found ", $#results + 1, " results");
245    
246            return @results if wantarray;
247            return shift @results;
248  }  }
249    
250  sub scrape {  sub scrape {
# Line 277  sub scrape { Line 286  sub scrape {
286    
287          my $div = $self->element_by_triplet(          my $div = $self->element_by_triplet(
288                  tree => $tree,                  tree => $tree,
289                  templates => $args->{wrapper},                  triplets => $args->{wrapper},
290                  message => 'wrapper for all results',                  message => 'wrapper for all results',
291                  fatal => 1                  fatal => 1
292          );          );
# Line 290  sub scrape { Line 299  sub scrape {
299    
300          my @r = $self->element_by_triplet(          my @r = $self->element_by_triplet(
301                  tree => $tree,                  tree => $tree,
302                  templates => $args->{results},                  triplets => $args->{results},
303                  message => 'result element',                  message => 'result element',
304          );          );
305    
# Line 313  sub scrape { Line 322  sub scrape {
322                                  $div = $self->element_by_triplet(                                  $div = $self->element_by_triplet(
323                                          tree => $page_tree,                                          tree => $page_tree,
324                                          message => "result $nr",                                          message => "result $nr",
325                                          templates => $args->{scrape}                                          triplets => $args->{scrape}
326                                  );                                  );
327    
328                                  $self->add_record(                                  $self->add_record(

Legend:
Removed from v.121  
changed lines
  Added in v.130

  ViewVC Help
Powered by ViewVC 1.1.26