[system] / branches / rel-2-0-pr1-hardcopy-changes / webwork2 / lib / WeBWorK / ContentGenerator / Hardcopy.pm Repository:
ViewVC logotype

Diff of /branches/rel-2-0-pr1-hardcopy-changes/webwork2/lib/WeBWorK/ContentGenerator/Hardcopy.pm

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

Revision 478 Revision 492
18use Apache::Constants qw(:common); 18use Apache::Constants qw(:common);
19use CGI qw(); 19use CGI qw();
20use WeBWorK::Form; 20use WeBWorK::Form;
21use WeBWorK::Utils qw(readFile); 21use WeBWorK::Utils qw(readFile);
22 22
23sub texBlockComment { return "\n".("%"x80)."\n%% ".join("", @_)."\n".("%"x80)."\n\n"; }
24
23sub go { 25sub go {
24 my ($self, $singleSet) = @_; 26 my ($self, $singleSet) = @_;
25 $singleSet =~ s/^set//; 27 $singleSet =~ s/^set//;
26 my $r = $self->{r}; 28 my $r = $self->{r};
27 my $ce = $self->{courseEnvironment}; 29 my $ce = $self->{courseEnvironment};
31 unshift @sets, $singleSet; 33 unshift @sets, $singleSet;
32 return DECLINED unless @sets; 34 return DECLINED unless @sets;
33 35
34 $r->content_type("text/plain"); 36 $r->content_type("text/plain");
35 $r->send_http_header(); 37 $r->send_http_header();
38 $self->writePDF($singleSet);
39 #$self->{texFH} = \*STDOUT;
36 print $self->getSetTeX($singleSet); 40 #$self->writeMultiSetTeX($singleSet);
37 41
38 return OK; 42 return OK;
39} 43}
40 44
41sub getMultiSetTeX { 45sub writePDF {
46 my ($self, @sets) = @_;
47 my $ce = $self->{courseEnvironment};
48 my $pdflatex = $ce->{externalPrograms}->{pdflatex};
42 49
50 open $self->{texFH}, "|-", "$pdflatex -v2" or die "Failed to call $pdflatex: $!\n";
51 $self->writeMultiSetTeX(@sets);
52 close $self->{texFH};
53}
54
55sub writeMultiSetTeX {
56 my ($self, @sets) = @_;
57 my $texFH = $self->{texFH};
58 my $ce = $self->{courseEnvironment};
59
60 # print the document preamble
61 $self->texInclude($ce->{webworkFiles}->{hardcopySnippets}->{preamble});
62
63 while (my $set = shift @sets) {
64 $self->getSetTeX($set);
65 if (@sets) {
66 # divide sets, but not after the last set
67 $self->texInclude($ce->{webworkFiles}->{hardcopySnippets}->{setDivider});
68 }
69 }
70
71 # print the document postamble
72 $self->texInclude($ce->{webworkFiles}->{hardcopySnippets}->{postamble});
43} 73}
44 74
45sub getSetTeX { 75sub getSetTeX {
46 my ($self, $setName) = @_; 76 my ($self, $setName) = @_;
77 my $texFH = $self->{texFH};
47 my $ce = $self->{courseEnvironment}; 78 my $ce = $self->{courseEnvironment};
48 my $wwdb = $self->{wwdb}; 79 my $wwdb = $self->{wwdb};
49 my $user = $self->{r}->param("user"); 80 my $user = $self->{r}->param("user");
50 my @problemNumbers = $wwdb->getProblems($user, $setName); 81 my @problemNumbers = sort { $a <=> $b } $wwdb->getProblems($user, $setName);
51 82
52 my $tex; 83 # get header and footer
84 my $setHeader = $wwdb->getSet($user, $setName)->set_header
85 || $ce->{webworkFiles}->{hardcopySnippets}->{setHeader};
86 my $setFooter = $ce->{webworkFiles}->{hardcopySnippets}->{setFooter};
87 # database doesn't support the following yet :(
88 #my $setFooter = $wwdb->getSet($user, $setName)->set_footer
89 # || $ce->{webworkFiles}->{hardcopySnippets}->{setFooter};
53 90
54 # include the set preamble 91 # render header
55 $tex .= texBlockComment("BEGIN Set: $setName Preamble");
56 eval { $tex .= readFile($ce->{webworkFiles}->{paperSetPreamble}) };
57 $@ and warn $@;
58
59 # render the set header (problem 0 is the set header, see PG.pm)
60 #$tex .= texBlockComment("BEGIN Set: $setName Header"); 92 print $texFH texBlockComment("BEGIN $setName : $setHeader");
61 #$tex .= $self->getProblemTeX($setName, 0); 93 #print $texFH $self->getProblemTeX($setName, $setHeader);
62 94
63 # render each problem 95 # render each problem
64 foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) { 96 while (my $problemNumber = shift @problemNumbers) {
65 $tex .= texBlockComment("BEGIN Set: $setName Problem: $problemNumber"); 97 print $texFH texBlockComment("BEGIN $setName : $problemNumber");
66 $tex .= $self->getProblemTeX($setName, $problemNumber); 98 print $texFH $self->getProblemTeX($setName, $problemNumber);
99 if (@problemNumbers) {
100 # divide problems, but not after the last problem
101 $self->texInclude($ce->{webworkFiles}->{hardcopySnippets}->{problemDivider});
102 }
67 } 103 }
68 104
69 # include the set postamble 105 # render footer
70 $tex .= texBlockComment("BEGIN Set: $setName Postamble"); 106 print $texFH texBlockComment("BEGIN $setName : $setFooter");
71 eval { $tex .= readFile($ce->{webworkFiles}->{paperSetPostamble}) }; 107 print $texFH $self->getProblemTeX($setName, $setFooter);
72 $@ and warn $@;
73
74 return $tex;
75} 108}
76 109
77sub getProblemTeX { 110sub getProblemTeX {
78 my ($self, $setName, $problemNumber) = @_; 111 my ($self, $setName, $problemNumber) = @_;
79 my $r = $self->{r}; 112 my $r = $self->{r};
82 my $pg = WeBWorK::PG->new( 115 my $pg = WeBWorK::PG->new(
83 $ce, 116 $ce,
84 $r->param('user'), 117 $r->param('user'),
85 $r->param('key'), 118 $r->param('key'),
86 $setName, 119 $setName,
87 $problemNumber, 120 $problemNumber, # this may be non-numeric, for headers and the like
88 { # translation options 121 { # translation options
89 displayMode => "tex", 122 displayMode => "tex",
90 showHints => 0, 123 showHints => 0,
91 showSolutions => 0, 124 showSolutions => 0,
92 processAnswers => 0, 125 processAnswers => 0,
93 }, 126 },
94 WeBWorK::Form->new->Vars 127 WeBWorK::Form->new->Vars # this is silly, i should say {} instead
95 ); 128 );
96 129
130 # *** # handle errors/warnings here!
97 return $pg->{body_text}; 131 return $pg->{body_text};
98} 132}
99 133
100sub texBlockComment { 134sub texInclude {
101 return "%% \n%% " . join("", @_) . "\n%% \n"; 135 my ($self, $texFile) = @_;
136 my $texFH = $self->{texFH};
137
138 print $texFH texBlockComment("BEGIN: $texFile");
139 eval {
140 print $texFH readFile($texFile)
141 };
142 if ($@) {
143 print $texFH texBlockComment($@);
144 }
102} 145}
103 146
1041; 1471;

Legend:
Removed from v.478  
changed lines
  Added in v.492

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9