From: Mike G. v. a. <we...@ma...> - 2008-06-24 21:53:34
|
Log Message: ----------- forward port of the rel-2-4-5 changes that allow BEGIN_HINT, etc. Modified Files: -------------- pg/lib/WeBWorK/PG: Translator.pm Revision Data ------------- Index: Translator.pm =================================================================== RCS file: /webwork/cvs/system/pg/lib/WeBWorK/PG/Translator.pm,v retrieving revision 1.20 retrieving revision 1.21 diff -Llib/WeBWorK/PG/Translator.pm -Llib/WeBWorK/PG/Translator.pm -u -r1.20 -r1.21 --- lib/WeBWorK/PG/Translator.pm +++ lib/WeBWorK/PG/Translator.pm @@ -154,6 +154,8 @@ my $class = shift; my $safe_cmpt = new Safe; #('PG_priv'); my $self = { + preprocess_code => \&default_preprocess_code, + postprocess_code => \&default_postprocess_code, envir => undef, PG_PROBLEM_TEXT_ARRAY_REF => [], PG_PROBLEM_TEXT_REF => 0, @@ -882,13 +884,19 @@ ########################################## ###### PG preprocessing code ############# ########################################## - # BEGIN_TEXT and END_TEXT must occur on a line by themselves. - $evalString =~ s/\n\s*END_TEXT[\s;]*\n/\nEND_TEXT\n/g; - $evalString =~ s/\n\s*BEGIN_TEXT[\s;]*\n/\nTEXT\(EV3\(<<'END_TEXT'\)\);\n/g; - $evalString =~ s/ENDDOCUMENT.*/ENDDOCUMENT();/s; # remove text after ENDDOCUMENT + + $evalString = &{$self->{preprocess_code}}($evalString); + + +# # default_preprocess_code +# # BEGIN_TEXT and END_TEXT must occur on a line by themselves. +# $evalString =~ s/\n\s*END_TEXT[\s;]*\n/\nEND_TEXT\n/g; +# $evalString =~ s/\n\s*BEGIN_TEXT[\s;]*\n/\nTEXT\(EV3\(<<'END_TEXT'\)\);\n/g; +# $evalString =~ s/ENDDOCUMENT.*/ENDDOCUMENT();/s; # remove text after ENDDOCUMENT +# +# $evalString =~ s/\\/\\\\/g; # \ can't be used for escapes because of TeX conflict +# $evalString =~ s/~~/\\/g; # use ~~ as escape instead, use # for comments - $evalString =~ s/\\/\\\\/g; # \ can't be used for escapes because of TeX conflict - $evalString =~ s/~~/\\/g; # use ~~ as escape instead, use # for comments =pod @@ -922,6 +930,12 @@ ########## end EVALUATION code ########### ############################################################################# + ########################################## + ###### PG postprocessing code ############# + ########################################## + $PG_PROBLEM_TEXT_REF = &{$self->{postprocess_code}}($PG_PROBLEM_TEXT_REF); + + =pod (5) B<Process errors> @@ -960,7 +974,7 @@ $self -> {errors}."\r\n" . "****************<BR>\n"); - push(@PROBLEM_TEXT_OUTPUT , "------Input Read\r\n"); + push(@PROBLEM_TEXT_OUTPUT , "------Input Read\r\n"); $self->{source} =~ s/</</g; @input=split("\n", $self->{source}); $lineNumber = 1; @@ -1607,6 +1621,37 @@ } +sub original_preprocess_code { + my $evalString = shift; + # BEGIN_TEXT and END_TEXT must occur on a line by themselves. + $evalString =~ s/\n\s*END_TEXT[\s;]*\n/\nEND_TEXT\n/g; + $evalString =~ s/\n\s*BEGIN_TEXT[\s;]*\n/\nTEXT\(EV3\(<<'END_TEXT'\)\);\n/g; + $evalString =~ s/ENDDOCUMENT.*/ENDDOCUMENT();/s; # remove text after ENDDOCUMENT + + $evalString =~ s/\\/\\\\/g; # \ can't be used for escapes because of TeX conflict + $evalString =~ s/~~/\\/g; # use ~~ as escape instead, use # for comments + $evalString; +} +sub default_preprocess_code { + my $evalString = shift; + # BEGIN_TEXT and END_TEXT must occur on a line by themselves. + $evalString =~ s/\n\s*END_TEXT[\s;]*\n/\nEND_TEXT\n/g; + $evalString =~ s/\n\s*END_SOLUTION[\s;]*\n/\nEND_SOLUTION\n/g; + $evalString =~ s/\n\s*END_HINT[\s;]*\n/\nEND_HINT\n/g; + $evalString =~ s/\n\s*BEGIN_TEXT[\s;]*\n/\nTEXT\(EV3\(<<'END_TEXT'\)\);\n/g; + $evalString =~ s/\n\s*BEGIN_SOLUTION[\s;]*\n/\nSOLUTION\(EV3\(<<'END_SOLUTION'\)\);\n/g; + $evalString =~ s/\n\s*BEGIN_HINT[\s;]*\n/\nHINT\(EV3\(<<'END_HINT'\)\);\n/g; + $evalString =~ s/ENDDOCUMENT.*/ENDDOCUMENT();/s; # remove text after ENDDOCUMENT + + $evalString =~ s/\\/\\\\/g; # \ can't be used for escapes because of TeX conflict + $evalString =~ s/~~/\\/g; # use ~~ as escape instead, use # for comments + $evalString; +} +sub default_postprocess_code { + my $evalString_ref = shift; + $evalString_ref; +} + sub dumpvar { my ($packageName) = @_; |