From b11722492ac58fae1649d122bed603e4b2da64dd Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Mon, 5 Apr 2010 11:29:49 +0000 Subject: [PATCH] --- modules/codepad.pl | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/modules/codepad.pl b/modules/codepad.pl index 123b6e71..dfd3327f 100755 --- a/modules/codepad.pl +++ b/modules/codepad.pl @@ -9,6 +9,12 @@ use HTML::Entities; use HTML::Parse; use HTML::FormatText; +my @languages = qw/C C++ D Haskell Lua OCaml PHP Perl Python Ruby Scheme Tcl/; + +my %preludes = ( 'C' => "#include \n#include \n#include \n", + 'C++' => "#include \n", + ); + if($#ARGV <= 0) { print "Usage: $0 \n"; exit 0; @@ -17,11 +23,12 @@ if($#ARGV <= 0) { my $nick = shift @ARGV; my $code = join ' ', @ARGV; +open FILE, ">> codepad_log.txt"; +print FILE "$nick: $code\n"; + my $lang = "C"; $lang = $1 if $code =~ s/-lang=([^\b\s]+)//i; -my @languages = qw/C C++ D Haskell Lua OCaml PHP Perl Python Ruby Scheme Tcl/; - my $found = 0; foreach my $l (@languages) { if(uc $lang eq uc $l) { @@ -41,18 +48,18 @@ my $ua = LWP::UserAgent->new(); $ua->agent("Mozilla/5.0"); push @{ $ua->requests_redirectable }, 'POST'; -$code =~ s/#include <([^>]+)>/#include <$1>\n/g; +$code =~ s/#include <([^>]+)>/\n#include <$1>\n/g; +$code =~ s/#([^ ]+) (.*?)\\n/\n#$1 $2\n/g; -if(($lang eq "C" or $lang eq "C++") and not $code =~ m/\w+ main\s?\([^)]*\)\s?{/) { - my $includes = ''; - $includes = $1 if $code =~ s/^(#include.*>)//; - $code = "$includes\n int main(int argc, char **argv) { $code ; return 0; }"; +$code = $preludes{$lang} . $code; + +if(($lang eq "C" or $lang eq "C++") and not $code =~ m/(int|void) main\s*\([^)]*\)\s*{/) { + my $prelude = ''; + $prelude = "$1$2" if $code =~ s/^\s*(#.*)(#.*?[>\n])//s; + $code = "$prelude\n int main(int argc, char **argv) { $code ; return 0; }"; } -# my $escaped_code = uri_escape($code, "\0-\377"); - my %post = ( 'lang' => $lang, 'code' => $code, 'private' => 'True', 'run' => 'True', 'submit' => 'Submit' ); - my $response = $ua->post("http://codepad.org", \%post); if(not $response->is_success) { @@ -61,10 +68,10 @@ if(not $response->is_success) { } my $text = $response->decoded_content; -my $redirect = $response->request->uri; - +my $url = $response->request->uri; my $output; +# remove line numbers $text =~ s/\d+<\/a>//g; if($text =~ /Output:<\/span>.+?
(.*)<\/div>.+?<\/table>/si) { @@ -86,4 +93,7 @@ $output =~ s/ \(first use in this function\)//g; $output =~ s/error: \(Each undeclared identifier is reported only once.*?\)//g; $output =~ s/error: (.*?) error/error: $1; error/g; +print FILE "$nick: [$url] $output\n\n"; +close FILE; print "$nick: $output\n"; +