Changeset 2326

Show
Ignore:
Timestamp:
09/03/07 08:32:53
Author:
miyagawa
Message:

added 'c' and 'c all' to scraper

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Web-Scraper/trunk/bin/scraper

    r2324 r2326  
    33use warnings; 
    44 
     5use Config; 
    56use Term::ReadLine; 
    67use Data::Dumper; 
     
    89use Web::Scraper; 
    910use YAML; 
     11 
     12my(@stack, $source); 
    1013 
    1114my $stuff   = process_args($ARGV[0]) 
     
    2023 
    2124    if (!-t STDIN and my $content = join "", <STDIN>) { 
     25        $source = [ 'stdin' ]; 
    2226        return \$content; 
    2327    } elsif ($uri && $uri =~ m!^https?://!) { 
     28        $source = [ "URI", $uri ]; 
    2429        return URI->new($uri); 
    2530    } elsif ($uri && -e $uri) { 
     31        $source = [ 'file', $uri ]; 
    2632        open my $fh, "<", $uri or die "$uri: $!"; 
    2733        return join "", <$fh>; 
     
    4349        } elsif ($in eq 'q') { 
    4450            return; 
     51        } elsif ($in eq 'c') { 
     52            print generate_code($source, $stack[-1]); 
     53        } elsif ($in =~ /^c\s+all\s*$/) { 
     54            print generate_code($source, @stack); 
    4555        } else { 
    4656            my $res = eval $in; 
    4757            warn $@ if $@; 
     58            push @stack, $in unless $@; 
    4859        } 
    4960    } 
    5061} 
     62 
     63sub generate_code { 
     64    my($source, @stack) = @_; 
     65 
     66    my $code_stack = join "\n", map { "    $_" . (/;$/ ? "" : ";") } @stack; 
     67    my $stuff = 
     68        $source->[0] eq 'stdin'         ? '\join "", <STDIN>' : 
     69        $source->[0] eq 'URI'           ? qq(URI->new("$source->[1]")) : 
     70        $source->[0] eq 'file'          ? qq(\\do { my \$file = "$source->[1]"; open my \$fh, \$file or die "\$file: \$!"; join '', <\$fh> }) : 
     71                                          '...'; 
     72 
     73    return <<CODE; 
     74#!$Config{perlpath} 
     75use strict; 
     76use Web::Scraper; 
     77use URI; 
     78 
     79my \$stuff   = $stuff; 
     80my \$scraper = scraper { 
     81$code_stack 
     82}; 
     83my \$result = \$scraper->scrape(\$stuff); 
     84CODE 
     85 
     86}