Path to current document: $ENV{'form.postdata'}
ENDHEADER1
-}
+ }
}
@@ -81,9 +82,10 @@ sub menu_for_output {
if ($title_for_single_resource ne '') {$title_for_single_resource = '"'.$title_for_single_resource.'"';}
if ($title_for_sequence ne '') {$title_for_sequence = '"'.$title_for_sequence.'"';}
if ($title_for_main_map ne '') {$title_for_main_map = '"'.$title_for_main_map.'"';}
+ $ENV{'form.postdata'} =~ s|http://[^/]+||;
my $subdir_to_print = $ENV{'form.postdata'};
$subdir_to_print =~ m/\/([^\/]+)$/;
- $subdir_to_print =~ s/$1//;
+ $subdir_to_print =~ s/\Q$1\E//;
$r->print(<What do you want to print? Make a choice.
@@ -142,6 +144,7 @@ ENDMENUOUT4
+
@@ -151,14 +154,27 @@ ENDMENUOUT5
sub sequence_content_menu {
my ($key_to,$r) = @_;
+ my $primary_sequence;
my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
my @sequence = split('___',$symbolic);
- my $primary_sequence = '/res/'.$sequence[0];
- my @master_seq = &coming_from_hash($primary_sequence,$sequence[0]);
+ $primary_sequence=&Apache::lonnet::clutter($sequence[0]);
+ my @master_seq = &coming_from_hash($primary_sequence);
+ my @titles_master_seq = ();
+ for (my $i=0;$i<=$#master_seq;$i++) {
+ my ($path,$title,$symb) = split /&&/,$master_seq[$i];
+ $master_seq[$i] = $path.'&&'.$symb;
+ push @titles_master_seq, $title;
+ }
my @master_seq_view = @master_seq;
- for (my $i=0;$i<=$#master_seq_view;$i++) {
- $master_seq_view[$i]=~/\/([^\/]+)$/;
- $master_seq_view[$i]=$1;
+ if ($ENV{'user.adv'}) {
+ for (my $i=0;$i<=$#master_seq_view;$i++) {
+ $master_seq_view[$i]=~/___\d+___(.+)$/;
+ $master_seq_view[$i]='/'.$1;
+ }
+ } else {
+ for (my $i=0;$i<=$#master_seq_view;$i++) {
+ $master_seq_view[$i]=' ';
+ }
}
$r->print(<
@@ -171,8 +187,7 @@ sub sequence_content_menu {
+
-
+
+
ENDMENUOUT1
my $inc=0;
for (my $i=0;$i<=$#master_seq_view;$i++) {
- if ($key_to==1 && $master_seq_view[$i]=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
- $r->print('
'.
- $master_seq_view[$i]);
+ if ($key_to==1 && $master_seq[$i]=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
+ $r->print('
'."\n".''.
+ $titles_master_seq[$i].' '.$master_seq_view[$i].'');
$inc++;
- } elsif ($key_to==0 && $master_seq_view[$i]=~/\.(problem|exam|quiz|assess|survey|form|library|xml|htm|html|page)$/) {
- $r->print('
'.
- $master_seq_view[$i]);
+ } elsif ($key_to==0 && $master_seq[$i]=~/\.(problem|exam|quiz|assess|survey|form|library|xml|htm|html|page)$/) {
+ $r->print('
'."\n".''.
+ $titles_master_seq[$i].' '.$master_seq_view[$i].'');
$inc++;
}
}
$r->print(<
+
+
+
ENDMENUOUT2
@@ -217,16 +236,17 @@ sub problem_choice_menu {
my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'});
$subdirtoprint =~ s/\/[^\/]+$//;
my @list_of_files = ();
- if ($ENV{'request.role'}=~m/^au\./ or $ENV{'request.role'}=~m/^ca\./) {
- $subdirtoprint =~ s/^[^~]*~(\w+)\//\/home\/$1\/public_html\//;
- } else {
- $subdirtoprint =~ s/.*(\/res\/)/$1/;
- }
my @content_directory = ();
- if ($ENV{'request.role'}=~m/^au\./ or $ENV{'request.role'}=~m/^ca\./) {
- @content_directory = &Apache::lonnet::dirlist($subdirtoprint,$ENV{'user.domain'}, $ENV{'user.name'},'');
+ $r->print("Subdir: " . $subdirtoprint . "
");
+ if ($subdirtoprint =~ m|/home/([^/]+)/public_html|) {
+ #localmachine CSTR space
+ my $user=$1;
+ my $domain=$Apache::lonnet::perlvar{'lonDefDomain'};
+ @content_directory = &Apache::lonnet::dirlist($subdirtoprint,
+ $domain, $user,'');
} else {
- @content_directory = &Apache::lonnet::dirlist($subdirtoprint);
+ #local library server res space (allows to print only from the own library server)
+ @content_directory = &Apache::lonnet::dirlist($subdirtoprint,$ENV{'user.domain'}, $ENV{'user.name'},'');
}
for (my $iy=0;$iy<=$#content_directory;$iy++) {
my @tempo_array = split(/&/,$content_directory[$iy]);
@@ -265,20 +285,23 @@ sub problem_choice_menu {
}
-
+
+
ENDMENUOUT1
my $i=0;
- foreach my $file (@list_of_files) {
+ foreach my $file (sort @list_of_files) {
$r->print('
'.
$file);
$i++;
}
$r->print(<
+
+
+
ENDMENUOUT2
}
@@ -330,7 +353,7 @@ ENDMENUOUT1
}
-
+
@@ -347,6 +370,7 @@ ENDDISHEADER
$sdom,$sname);
my $section=&Apache::lonnet::usection
($sdom,$sname,$ENV{'request.course.id'});
+ if ($section == -1) { $section = ''; }
$r->print(
'
'.
$reply{'firstname'}.' '.
@@ -358,11 +382,12 @@ ENDDISHEADER
}
}
$r->print(<Number of blank pages to add:
+
+
Number of blank pages added to each student assignments to print these assignments on physically different sheets (requires manual addjustment): |
@@ -431,7 +456,8 @@ ENDPART
if ($ENV{'form.papersize'} eq '') {$papersize = 'Letter [8 1/2x11 in]';}
if ($ENV{'form.numberofcolumns'} eq '') {$numberofcolumns = 2;}
}
- if (($choice eq 'Standard LaTeX output for current document') && ($ENV{'request.role'}=~m/^au\./ or $ENV{'request.role'}=~m/^ca\./)) {
+ if (($choice eq 'Standard LaTeX output for current document') &&
+ ($ENV{'form.url'}=~m|^/~|)) {
if ($ENV{'form.layout'} eq '') {$layout = 'CAPA';}
if ($ENV{'form.papersize'} eq '') {$papersize = 'Letter [8 1/2x11 in]';}
if ($ENV{'form.numberofcolumns'} eq '') {$numberofcolumns = 2;}
@@ -440,15 +466,18 @@ ENDPART
my $number_of_columns = 1; #used only for pages to determine the width of the cell
my $selectionmade = '';
my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
- my $LaTeXwidth;
-
+ if ($numberofcolumns == 1) {
+ $textwidth=$ENV{'form.width'};
+ $textheight=$ENV{'form.height'};
+ }
+ my $LaTeXwidth;
if ($textwidth=~/(\d+\s*cm)/) {
$LaTeXwidth = $1*10;
} elsif ($textwidth=~/(\d+\s*mm)/) {
$LaTeXwidth = $1;
}
if ($choice eq 'Standard LaTeX output for current document') {
- #-- single document - problem, page, html, xml
+ #-- single document - problem, page, html, xml, ...
$selectionmade = 1;
if ($ENV{'form.url'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
my %moreenv;
@@ -488,7 +517,7 @@ ENDPART
my $flag_latex_header_remove = 'NO';
my $flag_page_in_sequence = 'NO';
for (my $i=0;$i<=$#master_seq;$i++) {
- my ($urlp,$symb) = split /&&/, $master_seq[$i];
+ my ($urlp,$symb) = split /&&/, $master_seq[$i];
if ($choice eq 'Standard LaTeX output for the primary sequence') {
$selectionmade = 2;
} elsif ($choice eq 'Standard LaTeX output for whole primary sequence') {
@@ -498,7 +527,7 @@ ENDPART
$moreenv{'form.grade_target'}='tex';
$moreenv{'form.textwidth'}=$LaTeXwidth;
&Apache::lonnet::appenv(%moreenv);
- &Apache::lonnet::logthis("Trying to get $urlp with symb $symb");
+ #&Apache::lonnet::logthis("Trying to get $urlp with symb $symb");
my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
&Apache::lonnet::delenv('form.grade_target','form.textwidth');
if ($urlp =~ m/\.page/) {
@@ -521,14 +550,19 @@ ENDPART
} elsif ($choice eq 'Standard LaTeX output for the top level sequence') {
# where is the main sequence of the course?
$selectionmade = 4;
- my $main_seq = '/res/'.$ENV{'request.course.uri'};
- my @file_seq = &coming_from_hash_whole($main_seq);
+ my $main_seq=&Apache::lonnet::clutter($ENV{'request.course.uri'});
+ my @file_seq = &coming_from_hash($main_seq);
+ for (my $i=0;$i<=$#file_seq;$i++) {
+ my ($path,$title,$symb) = split /&&/,$file_seq[$i];
+ $file_seq[$i] = $path.'&&'.$symb;
+ }
my $flag_latex_header_remove = 'NO';
#-- produce an output string
for (my $i=0;$i<=$#file_seq;$i++) {
- my ($urlp,$symb) = split /&&/, $file_seq[$i];
- $urlp=~s/\/home\/httpd\/html//;
- if ($urlp=~m/\.(problem|exam|quiz|assess|survey|form|library)/) {
+ if (not $file_seq[$i]=~/^&&/) {
+ my ($urlp,$symb) = split /&&/, $file_seq[$i];
+ $urlp=~s/\/home\/httpd\/html//;
+ if ($urlp=~m/\.(problem|exam|quiz|assess|survey|form|library)/) {
my %moreenv;
$moreenv{'form.grade_target'}='tex';
$moreenv{'form.textwidth'}=$LaTeXwidth;
@@ -542,7 +576,8 @@ ENDPART
}
$result .= $texversion;
$flag_latex_header_remove = 'YES';
- }
+ }
+ }
}
$result .= '\end{document}';
} elsif ($choice eq 'All class print') {
@@ -557,17 +592,24 @@ ENDPART
#where is the primary sequence containing current resource (the same for all students)?
my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
my @sequence = split('___',$symbolic);
- my $primary_sequence = '/res/'.$sequence[0];
- my @master_seq = &coming_from_hash($primary_sequence,$sequence[0]);
+ my $primary_sequence;
+
+ $primary_sequence=&Apache::lonnet::clutter($sequence[0]);
+ my @master_seq = &coming_from_hash($primary_sequence);
+ for (my $i=0;$i<=$#master_seq;$i++) {
+ my ($path,$title,$symb) = split /&&/,$master_seq[$i];
+ $master_seq[$i] = $path.'&&'.$symb;
+ }
#loop over students
my $flag_latex_header_remove = 'NO';
my %moreenv;
$moreenv{'form.textwidth'}=$LaTeXwidth;
&Apache::lonnet::appenv(%moreenv);
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1);
foreach my $person (@students) {
my $current_output = '';
my ($usersection,$username,$userdomain) = split /:/,$person;
- my $fullname = &Apache::grades::get_fullname($username,$userdomain);
+ my $fullname = &get_name($username,$userdomain);
#goes through all resources, checks if they are available for current student, and produces output
foreach my $curresline (@master_seq) {
my ($curres,$symb) = split /&&/, $curresline;
@@ -586,17 +628,21 @@ ENDPART
$flag_latex_header_remove = 'YES';
}
}
+ my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
if ($current_output=~/\\documentclass/) {
- my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\setlength{\\headheight}{1cm}\\setlength{\\headsep}{0.5cm}\\pagestyle{myheadings}\\markboth{}{{$courseidinfo - $assignment}}\\begin{document}\\noindent\\textit{\\textbf{$fullname}}\\vskip 3 mm /;
+ $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\vskip 3 mm /;
} else {
my $blanspages = '';
for (my $j=0;$j<$ENV{'form.addedpages'};$j++) {$blanspages.='\clearpage\strut\clearpage';}
- $current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License } \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\textit{\textbf{'.$fullname.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
+ $current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
}
$result .= $current_output;
- &Apache::lonnet::delenv('form.counter');
+ &Apache::lonnet::delenv('form.counter');
+ &Apache::lonxml::init_counter();
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+ 'last student '.$fullname);
}
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= '\end{document}';
&Apache::lonnet::delenv('form.textwidth');
} elsif ($choice eq 'Subdirectory print') {
@@ -616,8 +662,10 @@ ENDPART
$moreenv{'form.grade_target'}='tex';
$moreenv{'form.textwidth'}=$LaTeXwidth;
&Apache::lonnet::appenv(%moreenv);
- if ($ENV{'request.role'}=~m/^au\./ or $ENV{'request.role'}=~m/^ca\./) {
- $urlp =~ s/\/home\/([^\/]*)\/public_html/\/~$1/;
+ if ($urlp =~ m|/home/([^/]+)/public_html|) {
+ $urlp =~ s|/home/([^/]*)/public_html|/~$1|;
+ } else {
+ $urlp =~ s|^/home/httpd/html||;
}
my $texversion=&Apache::lonnet::ssi($urlp);
&Apache::lonnet::delenv('form.grade_target','form.textwidth');
@@ -681,7 +729,7 @@ FINALEND
}
-sub coming_from_hash_whole {
+sub coming_from_hash {
my $mainsequence = shift;
my @resourcelist = ();
@@ -691,12 +739,11 @@ sub coming_from_hash_whole {
my $current_resource = $mapstart;
while ($current_resource ne $mapfinish) {
if ($hash{'src_'.$current_resource}=~/\.sequence$/) {
- push @resourcelist,&coming_from_hash_whole($hash{'src_'.$current_resource});
+ push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
} else {
- $mainsequence =~ /\/res\/(.*)$/;
- my $presymb = $1;
- my $rid = $hash{'ids_'.$hash{'src_'.$current_resource}};
- if ($rid=~/,/) {
+ my $presymb=&Apache::lonnet::declutter($mainsequence);
+ my $rid = $current_resource;
+ if ($rid=~/,/) {
my @rid = split /,/, $rid;
foreach my $rid_element (@rid) {
if ($rid_element =~ m/^$mapid\.(\d*)/) {
@@ -705,33 +752,22 @@ sub coming_from_hash_whole {
}
}
} else {
- $rid =~ m/^$mapid\.(\d*)/;
+ $rid =~ m/^$mapid\.(\d*)/;
$rid = $1;
}
- $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
- my $symb = $presymb.'___'.$rid.'___'.$1;
- push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$symb;
+ my $symb = $presymb.'___'.$rid.'___'.
+ &Apache::lonnet::declutter($hash{'src_'.$current_resource});
+ push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;
}
$current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};
- }
- return @resourcelist;
-}
-
-
-sub coming_from_hash {
-
- my ($mainsequence,$symb) = @_;
- my @resourcelist = ();
- my $mapid = $hash{'map_pc_'.$mainsequence};
- my $mapstart = $hash{'map_start_'.$mainsequence};
- my $mapfinish = $hash{'map_finish_'.$mainsequence};
- my ($presymb) = split(/___/,$symb);
- $presymb = $presymb.'___';
- my $current_resource = $mapstart;
- while ($current_resource ne $mapfinish) {
- if (not $hash{'src_'.$current_resource}=~/\.sequence$/) {
- my $rid = $hash{'ids_'.$hash{'src_'.$current_resource}};
- if ($rid=~/,/) {
+ }
+ #needs if final resource in the map (type="finish") contains something
+ if ($hash{'src_'.$current_resource}=~/\.sequence$/) {
+ push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
+ } else {
+ my $presymb=&Apache::lonnet::declutter($mainsequence);
+ my $rid = $current_resource;
+ if ($rid=~/,/) {
my @rid = split /,/, $rid;
foreach my $rid_element (@rid) {
if ($rid_element =~ m/^$mapid\.(\d*)/) {
@@ -740,38 +776,14 @@ sub coming_from_hash {
}
}
} else {
- $rid =~ m/^$mapid\.(\d*)/;
+ $rid =~ m/^$mapid\.(\d*)/;
$rid = $1;
}
- $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
- $symb = $presymb.$rid.'___'.$1;
- push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$symb;
- } else {
- push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
+ my $symb = $presymb.'___'.$rid.'___'.
+ &Apache::lonnet::declutter($hash{'src_'.$current_resource});
+ push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$hash{'title_'.$current_resource}.'&&'.$symb;
}
$current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};
- }
- #needs if final resource in the map (type="finish") contains something
- if (not $hash{'src_'.$current_resource}=~/\.sequence$/) {
- my $rid = $hash{'ids_'.$hash{'src_'.$current_resource}};
- if ($rid=~/,/) {
- my @rid = split /,/, $rid;
- foreach my $rid_element (@rid) {
- if ($rid_element =~ m/^$mapid\.(\d*)/) {
- $rid = $1;
- last;
- }
- }
- } else {
- $rid =~ m/^$mapid\.(\d*)/;
- $rid = $1;
- }
- $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
- $symb = $presymb.$rid.'___'.$1;
- push @resourcelist,$hash{'src_'.$current_resource}.'&&'.$symb;
- } else {
- push @resourcelist,&coming_from_hash($hash{'src_'.$current_resource});
- }
return @resourcelist;
}
@@ -786,326 +798,246 @@ sub latex_header_footer_remove {
sub character_chart {
my $result = shift;
- $result =~ s/?0?7;//g;
- $result =~ s/?0?9;//g;
- $result =~ s/?10;//g;
- $result =~ s/?13;//g;
- $result =~ s/?32;/ /g;
- $result =~ s/?33;/!/g;
- $result =~ s/?34;/"/g;
- $result =~ s/"/"/g; #"
- $result =~ s/?35;/\\#/g;
-# $result =~ s/?36;/\\\$/g;
- $result =~ s/?37;/\\%/g;
- $result =~ s/?38;/\\&/g;
- $result =~ s/&/\\&/g;
- $result =~ s/?39;/'/g;
- $result =~ s/?40;/(/g;
- $result =~ s/?41;/)/g;
- $result =~ s/?42;/\*/g;
- $result =~ s/?43;/\+/g;
- $result =~ s/?44;/,/g;
- $result =~ s/?45;/-/g;
- $result =~ s/?46;/\./g;
- $result =~ s/?47;/\//g;
- $result =~ s/?48;/0/g;
- $result =~ s/?49;/1/g;
- $result =~ s/?50;/2/g;
- $result =~ s/?51;/3/g;
- $result =~ s/?52;/4/g;
- $result =~ s/?53;/5/g;
- $result =~ s/?54;/6/g;
- $result =~ s/?55;/7/g;
- $result =~ s/?56;/8/g;
- $result =~ s/?57;/9/g;
- $result =~ s/?58;/:/g;
- $result =~ s/?59;/;/g;
- $result =~ s/?60;/\$<\$/g;
- $result =~ s/</\$<\$/g;
- $result =~ s/?61;/\$=\$/g;
- $result =~ s/?62;/\$>\$/g;
- $result =~ s/>/\$>\$/g;
- $result =~ s/?63;/?/g;
-# $result =~ s/?64;//g;
- $result =~ s/?65;/A/g;
- $result =~ s/?66;/B/g;
- $result =~ s/?67;/C/g;
- $result =~ s/?68;/D/g;
- $result =~ s/?69;/E/g;
- $result =~ s/?70;/F/g;
- $result =~ s/?71;/G/g;
- $result =~ s/?72;/H/g;
- $result =~ s/?73;/I/g;
- $result =~ s/?74;/J/g;
- $result =~ s/?75;/K/g;
- $result =~ s/?76;/L/g;
- $result =~ s/?77;/M/g;
- $result =~ s/?78;/N/g;
- $result =~ s/?79;/O/g;
- $result =~ s/?80;/P/g;
- $result =~ s/?81;/Q/g;
- $result =~ s/?82;/R/g;
- $result =~ s/?83;/S/g;
- $result =~ s/?84;/T/g;
- $result =~ s/?85;/U/g;
- $result =~ s/?86;/V/g;
- $result =~ s/?87;/W/g;
- $result =~ s/?88;/X/g;
- $result =~ s/?89;/Y/g;
- $result =~ s/?90;/Z/g;
- $result =~ s/?91;/[/g;
- $result =~ s/?92;/\\/g;
- $result =~ s/?93;/]/g;
-# $result =~ s/?94;//g;
-# $result =~ s/?95;//g;
- $result =~ s/?96;/`/g;
- $result =~ s/?97;/a/g;
- $result =~ s/?98;/b/g;
- $result =~ s/?99;/c/g;
- $result =~ s/d/d/g;
- $result =~ s/e/e/g;
- $result =~ s/f/f/g;
- $result =~ s/g/g/g;
- $result =~ s/h/h/g;
- $result =~ s/i/i/g;
- $result =~ s/j/j/g;
- $result =~ s/k/k/g;
- $result =~ s/l/l/g;
- $result =~ s/m/m/g;
- $result =~ s/n/n/g;
- $result =~ s/o/o/g;
- $result =~ s/p/p/g;
- $result =~ s/q/q/g;
- $result =~ s/r/r/g;
- $result =~ s/s/s/g;
- $result =~ s/t/t/g;
- $result =~ s/u/u/g;
- $result =~ s/v/v/g;
- $result =~ s/w/w/g;
- $result =~ s/x/x/g;
- $result =~ s/y/y/g;
- $result =~ s/z/z/g;
- $result =~ s/{/\\{/g;
- $result =~ s/|/\|/g;
- $result =~ s/}/\\}/g;
- $result =~ s/~/\~/g;
- $result =~ s//,/g;
-# $result =~ s///g;
- $result =~ s//''/g;
- $result =~ s/
/\$\\ldots\$/g;
- $result =~ s//\$\\dagger\$/g;
- $result =~ s//\$\\ddagger\$/g;
-# $result =~ s///g;
-# $result =~ s///g;
-# $result =~ s///g;
- $result =~ s//\$<\$/g;
-# $result =~ s///g;
- $result =~ s//`/g;
- $result =~ s//'/g;
- $result =~ s//``/g;
- $result =~ s//''/g;
- $result =~ s//\$\\bullet\$/g;
-# $result =~ s///g;
-# $result =~ s///g;
- $result =~ s//~/g;
-# $result =~ s///g;
-# $result =~ s///g;
- $result =~ s//\$>\$/g;
- $result =~ s//\\{\\oe\\}/g;
- $result =~ s//\\"\\{Y\\}/g;
- $result =~ s/ //g;
- $result =~ s/ //g;
- $result =~ s/¡/!`/g;
- $result =~ s/¡/!`/g; #`
-# $result =~ s/¢//g;
-# $result =~ s/¢//g;
- $result =~ s/£/\\pounds/g;
- $result =~ s/£/\\pounds/g;
-# $result =~ s/¤//g;
-# $result =~ s/¤//g;
-# $result =~ s/¥//g;
-# $result =~ s/¥//g;
-# $result =~ s/¦//g;
-# $result =~ s/¦//g;
-# $result =~ s/§//g;
-# $result =~ s/§//g;
-# $result =~ s/¨//g;
-# $result =~ s/¨//g;
- $result =~ s/©/\\copyright/g;
- $result =~ s/©/\\copyright/g;
-# $result =~ s/ª//g;
-# $result =~ s/ª//g;
-# $result =~ s/«//g;
-# $result =~ s/«//g;
- $result =~ s/¬/\$\\neg\$/g;
- $result =~ s/¬/\$\\neg\$/g;
-# $result =~ s///g;
-# $result =~ s///g;
-# $result =~ s/®//g;
-# $result =~ s/®//g;
-# $result =~ s/¯//g;
-# $result =~ s/¯//g;
- $result =~ s/°/\$^{\\circ}\$/g;
- $result =~ s/°/\$^{\\circ}\$/g;
- $result =~ s/±/\$\\pm\$/g;
- $result =~ s/±/\$\\pm\$/g;
- $result =~ s/²/\$^2\$/g;
- $result =~ s/²/\$^2\$/g;
- $result =~ s/³/\$^3\$/g;
- $result =~ s/³/\$^3\$/g;
-# $result =~ s/´//g;
-# $result =~ s/´//g;
- $result =~ s/µ/\$\\mu\$/g;
- $result =~ s/µ/\$\\mu\$/g;
- $result =~ s/¶/\\P/g;
- $result =~ s/¶/\\P/g;
- $result =~ s/·/\$\\cdot\$/g;
- $result =~ s/·/\$\\cdot\$/g;
-# $result =~ s/¸//g;
-# $result =~ s/¸//g;
- $result =~ s/¹/\$^1\$/g;
- $result =~ s/¹/\$^1\$/g;
-# $result =~ s/º//g;
-# $result =~ s/º//g;
-# $result =~ s/»//g;
-# $result =~ s/»//g;
-# $result =~ s/¼//g;
-# $result =~ s/¼//g;
-# $result =~ s/½//g;
-# $result =~ s/½//g;
-# $result =~ s/¾//g;
-# $result =~ s/¾//g;
- $result =~ s/¿/?`/g;
- $result =~ s/¿/?`/g; #`
- $result =~ s/À/\\`{A}/g;
- $result =~ s/À/\\`{A}/g; #`
- $result =~ s/Á/\\'{A}/g;
- $result =~ s/Á/\\'{A}/g; #'
- $result =~ s/Â/\\^{A}/g;
- $result =~ s/Â/\\^{A}/g;
- $result =~ s/Ã/\\~{A}/g;
- $result =~ s/Ã/\\~{A}/g;
- $result =~ s/Ä/\\"{A}/g;
- $result =~ s/Ä/\\"{A}/g; #"
- $result =~ s/Å/{\\AA}/g;
- $result =~ s/Å/{\\AA}/g;
- $result =~ s/Æ/{\\AE}/g;
- $result =~ s/Æ/{\\AE}/g;
-# $result =~ s/Ç//g;
-# $result =~ s/Ç//g;
- $result =~ s/È/\\`{E}/g;
- $result =~ s/È/\\`{E}/g; #`
- $result =~ s/É/\\'{E}/g; #'
- $result =~ s/É/\\'{E}/g; #'
- $result =~ s/Ê/\\^{E}/g;
- $result =~ s/Ê/\\^{E}/g;
- $result =~ s/Ë/\\`{E}/g;
- $result =~ s/Ë/\\`{E}/g; #`
- $result =~ s/Ì/\\`{I}/g;
- $result =~ s/Ì/\\`{I}/g; #`
- $result =~ s/Í/\\'{I}/g;
- $result =~ s/Í/\\'{I}/g; #'
- $result =~ s/Î/\\^{I}/g;
- $result =~ s/Î/\\^{I}/g;
- $result =~ s/Ï/\\"{I}/g;
- $result =~ s/Ï/\\"{I}/g; #"
-# $result =~ s/Ð//g;
-# $result =~ s/Ð//g;
- $result =~ s/Ñ/\\~{N}/g;
- $result =~ s/Ñ/\\~{N}/g;
- $result =~ s/Ò/\\`{O}/g;
- $result =~ s/Ò/\\`{O}/g; #`
- $result =~ s/Ó/\\'{O}/g;
- $result =~ s/Ó/\\'{O}/g; #'
- $result =~ s/Ô/\\^{O}/g;
- $result =~ s/Ô/\\^{O}/g;
- $result =~ s/Õ/\\~{O}/g;
- $result =~ s/Õ/\\~{O}/g;
- $result =~ s/Ö/\\"{O}/g;
- $result =~ s/Ö/\\"{O}/g; #"
- $result =~ s/×/\$\\times\$/g;
- $result =~ s/×/\$\\times\$/g;
- $result =~ s/Ø/{\\O}/g;
- $result =~ s/Ø/{\\O}/g;
- $result =~ s/Ù/\\`{U}/g;
- $result =~ s/Ù/\\`{U}/g; #`
- $result =~ s/Ú/\\'{U}/g; #'
- $result =~ s/Ú/\\'{U}/g; #'
- $result =~ s/Û/\\^{U}/g;
- $result =~ s/Û/\\^{U}/g;
- $result =~ s/Ü/\\"{U}/g; #"
- $result =~ s/Ü/\\"{U}/g; #"
- $result =~ s/Ý/\\'{Y}/g;
- $result =~ s/Ý/\\'{Y}/g; #'
-# $result =~ s/Þ//g;
-# $result =~ s/Þ//g;
-# $result =~ s/ß//g;
-# $result =~ s/ß//g;
- $result =~ s/à/\\`{a}/g;
- $result =~ s/à/\\`{a}/g; #`
- $result =~ s/á/\\'{a}/g;
- $result =~ s/á/\\'{a}/g; #'
- $result =~ s/â/\\^{a}/g;
- $result =~ s/â/\\^{a}/g;
- $result =~ s/ã/\\~{a}/g;
- $result =~ s/ã/\\~{a}/g;
- $result =~ s/ä/\\"{a}/g;
- $result =~ s/ä/\\"{a}/g; #"
- $result =~ s/å/{\\aa}/g;
- $result =~ s/å/{\\aa}/g;
- $result =~ s/æ/{\\ae}/g;
- $result =~ s/æ/{\\ae}/g;
-# $result =~ s/ç//g;
-# $result =~ s/ç//g;
- $result =~ s/è/\\`{e}/g;
- $result =~ s/è/\\`{e}/g; #`
- $result =~ s/é/\\'{e}/g;
- $result =~ s/é/\\'{e}/g; #'
- $result =~ s/ê/\\^{e}/g;
- $result =~ s/ê/\\^{e}/g;
- $result =~ s/ë/\\"{e}/g;
- $result =~ s/ë/\\"{e}/g; #"
- $result =~ s/ì/\\`{i}/g;
- $result =~ s/ì/\\`{i}/g; #`
- $result =~ s/í/\\'{i}/g;
- $result =~ s/í/\\'{i}/g; #'
- $result =~ s/î/\\^{i}/g;
- $result =~ s/î/\\^{i}/g;
- $result =~ s/ï/\\"{i}/g;
- $result =~ s/ï/\\"{i}/g; #"
-# $result =~ s/ð//g;
-# $result =~ s/ð//g;
- $result =~ s/ñ/\\~{n}/g;
- $result =~ s/ñ/\\~{n}/g;
- $result =~ s/ò/\\`{o}/g;
- $result =~ s/ò/\\`{o}/g; #`
- $result =~ s/ó/\\'{o}/g;
- $result =~ s/ó/\\'{o}/g; #'
- $result =~ s/ô/\\^{o}/g;
- $result =~ s/ô/\\^{o}/g;
- $result =~ s/õ/\\~{o}/g;
- $result =~ s/õ/\\~{o}/g;
- $result =~ s/ö/\\"{o}/g;
- $result =~ s/ö/\\"{o}/g; #"
- $result =~ s/÷/\$\\div\$/g;
- $result =~ s/÷/\$\\div\$/g;
- $result =~ s/ø/{\\o}/g;
- $result =~ s/ø/{\\o}/g;
- $result =~ s/ù/\\`{u}/g;
- $result =~ s/ù/\\`{u}/g; #`
- $result =~ s/ú/\\'{u}/g;
- $result =~ s/ú/\\'{u}/g; #'
- $result =~ s/û/\\^{u}/g;
- $result =~ s/û/\\^{u}/g;
- $result =~ s/ü/\\"{u}/g;
- $result =~ s/ü/\\"{u}/g; #"
- $result =~ s/ý/\\'{y}/g;
- $result =~ s/ý/\\'{y}/g; #'
-# $result =~ s/þ//g;
-# $result =~ s/þ//g;
- $result =~ s/ÿ/\\"{y}/g;
- $result =~ s/ÿ/\\"{y}/g; #"
- $result =~ s/θ/\$\\theta\$/g; #converts theta from html into tex
+ $result =~ s/&\#0?0?(7|9);//g;
+ $result =~ s/&\#0?(10|13);//g;
+ $result =~ s/&\#0?32;/ /g;
+ $result =~ s/&\#0?33;/!/g;
+ $result =~ s/&(\#0?34|quot);/\"/g;
+ $result =~ s/&\#0?35;/\\\#/g;
+ $result =~ s/&\#0?36;/\\\$/g;
+ $result =~ s/&\#0?37;/\\%/g;
+ $result =~ s/&(\#0?38|amp);/\\&/g;
+ $result =~ s/&\#(0?39|146);/\'/g;
+ $result =~ s/&\#0?40;/(/g;
+ $result =~ s/&\#0?41;/)/g;
+ $result =~ s/&\#0?42;/\*/g;
+ $result =~ s/&\#0?43;/\+/g;
+ $result =~ s/&\#(0?44|130);/,/g;
+ $result =~ s/&\#0?45;/-/g;
+ $result =~ s/&\#0?46;/\./g;
+ $result =~ s/&\#0?47;/\//g;
+ $result =~ s/&\#0?48;/0/g;
+ $result =~ s/&\#0?49;/1/g;
+ $result =~ s/&\#0?50;/2/g;
+ $result =~ s/&\#0?51;/3/g;
+ $result =~ s/&\#0?52;/4/g;
+ $result =~ s/&\#0?53;/5/g;
+ $result =~ s/&\#0?54;/6/g;
+ $result =~ s/&\#0?55;/7/g;
+ $result =~ s/&\#0?56;/8/g;
+ $result =~ s/&\#0?57;/9/g;
+ $result =~ s/&\#0?58;/:/g;
+ $result =~ s/&\#0?59;/;/g;
+ $result =~ s/&(\#0?60|lt|\#139);/\$<\$/g;
+ $result =~ s/&\#0?61;/\$=\$/g;
+ $result =~ s/&(\#0?62|gt|\#155);/\$>\$/g;
+ $result =~ s/&\#0?63;/\?/g;
+ $result =~ s/&\#0?65;/A/g;
+ $result =~ s/&\#0?66;/B/g;
+ $result =~ s/&\#0?67;/C/g;
+ $result =~ s/&\#0?68;/D/g;
+ $result =~ s/&\#0?69;/E/g;
+ $result =~ s/&\#0?70;/F/g;
+ $result =~ s/&\#0?71;/G/g;
+ $result =~ s/&\#0?72;/H/g;
+ $result =~ s/&\#0?73;/I/g;
+ $result =~ s/&\#0?74;/J/g;
+ $result =~ s/&\#0?75;/K/g;
+ $result =~ s/&\#0?76;/L/g;
+ $result =~ s/&\#0?77;/M/g;
+ $result =~ s/&\#0?78;/N/g;
+ $result =~ s/&\#0?79;/O/g;
+ $result =~ s/&\#0?80;/P/g;
+ $result =~ s/&\#0?81;/Q/g;
+ $result =~ s/&\#0?82;/R/g;
+ $result =~ s/&\#0?83;/S/g;
+ $result =~ s/&\#0?84;/T/g;
+ $result =~ s/&\#0?85;/U/g;
+ $result =~ s/&\#0?86;/V/g;
+ $result =~ s/&\#0?87;/W/g;
+ $result =~ s/&\#0?88;/X/g;
+ $result =~ s/&\#0?89;/Y/g;
+ $result =~ s/&\#0?90;/Z/g;
+ $result =~ s/&\#0?91;/[/g;
+ $result =~ s/&\#0?92;/\$\\setminus\$/g;
+ $result =~ s/&\#0?93;/]/g;
+ $result =~ s/&\#(0?94|136);/\$\\wedge\$/g;
+ $result =~ s/&\#(0?95|138|154);/\\underline{\\makebox[2mm]{\\strut}}/g;
+ $result =~ s/&\#(0?96|145);/\`/g;
+ $result =~ s/&\#0?97;/a/g;
+ $result =~ s/&\#0?98;/b/g;
+ $result =~ s/&\#0?99;/c/g;
+ $result =~ s/&\#100;/d/g;
+ $result =~ s/&\#101;/e/g;
+ $result =~ s/&\#102;/f/g;
+ $result =~ s/&\#103;/g/g;
+ $result =~ s/&\#104;/h/g;
+ $result =~ s/&\#105;/i/g;
+ $result =~ s/&\#106;/j/g;
+ $result =~ s/&\#107;/k/g;
+ $result =~ s/&\#108;/l/g;
+ $result =~ s/&\#109;/m/g;
+ $result =~ s/&\#110;/n/g;
+ $result =~ s/&\#111;/o/g;
+ $result =~ s/&\#112;/p/g;
+ $result =~ s/&\#113;/q/g;
+ $result =~ s/&\#114;/r/g;
+ $result =~ s/&\#115;/s/g;
+ $result =~ s/&\#116;/t/g;
+ $result =~ s/&\#117;/u/g;
+ $result =~ s/&\#118;/v/g;
+ $result =~ s/&\#119;/w/g;
+ $result =~ s/&\#120;/x/g;
+ $result =~ s/&\#121;/y/g;
+ $result =~ s/&\#122;/z/g;
+ $result =~ s/&\#123;/\\{/g;
+ $result =~ s/&\#124;/\|/g;
+ $result =~ s/&\#125;/\\}/g;
+ $result =~ s/&\#126;/\~/g;
+ $result =~ s/&\#131;/\\textflorin /g;
+ $result =~ s/&\#132;/\"/g;
+ $result =~ s/&\#133;/\$\\ldots\$/g;
+ $result =~ s/&\#134;/\$\\dagger\$/g;
+ $result =~ s/&\#135;/\$\\ddagger\$/g;
+ $result =~ s/&\#137;/\\textperthousand /g;
+ $result =~ s/&\#140;/{\\OE}/g;
+ $result =~ s/&\#147;/\`\`/g;
+ $result =~ s/&\#148;/\'\'/g;
+ $result =~ s/&\#149;/\$\\bullet\$/g;
+ $result =~ s/&\#150;/--/g;
+ $result =~ s/&\#151;/---/g;
+ $result =~ s/&\#152;/\$\\sim\$/g;
+ $result =~ s/&\#153;/\\texttrademark /g;
+ $result =~ s/&\#156;/\\oe/g;
+ $result =~ s/&\#159;/\\\"Y/g;
+ $result =~ s/&(\#160|nbsp);//g;
+ $result =~ s/&(\#161|iexcl);/!\`/g;
+ $result =~ s/&(\#162|cent);/\\textcent /g;
+ $result =~ s/&(\#163|pound);/\\pounds /g;
+ $result =~ s/&(\#164|curren);/\\textcurrency /g;
+ $result =~ s/&(\#165|yen);/\\textyen /g;
+ $result =~ s/&(\#166|brvbar);/\\textbrokenbar /g;
+ $result =~ s/&(\#167|sect);/\\textsection /g;
+ $result =~ s/&(\#168|uml);/\\texthighdieresis /g;
+ $result =~ s/&(\#169|copy);/\\copyright /g;
+ $result =~ s/&(\#170|ordf);/\\textordfeminine /g;
+ $result =~ s/&(\#172|not);/\$\\neg\$/g;
+ $result =~ s/&(\#173|shy);/ - /g;
+ $result =~ s/&(\#174|reg);/\\textregistered /g;
+ $result =~ s/&(\#175|macr);/\$^{-}\$/g;
+ $result =~ s/&(\#176|deg);/\$^{\\circ}\$/g;
+ $result =~ s/&(\#177|plusmn);/\$\\pm\$/g;
+ $result =~ s/&(\#178|sup2);/\$^2\$/g;
+ $result =~ s/&(\#179|sup3);/\$^3\$/g;
+ $result =~ s/&(\#180|acute);/\\textacute /g;
+ $result =~ s/&(\#181|micro);/\$\\mu\$/g;
+ $result =~ s/&(\#182|para);/\\P/g;
+ $result =~ s/&(\#183|middot);/\$\\cdot\$/g;
+ $result =~ s/&(\#184|cedil);/\\c{\\strut}/g;
+ $result =~ s/&(\#185|sup1);/\$^1\$/g;
+ $result =~ s/&(\#186|ordm);/\\textordmasculine /g;
+ $result =~ s/&(\#188|frac14);/\\textonequarter /g;
+ $result =~ s/&(\#189|frac12);/\\textonehalf /g;
+ $result =~ s/&(\#190|frac34);/\\textthreequarters /g;
+ $result =~ s/&(\#191|iquest);/?\`/g;
+ $result =~ s/&(\#192|Agrave);/\\\`{A}/g;
+ $result =~ s/&(\#193|Aacute);/\\\'{A}/g;
+ $result =~ s/&(\#194|Acirc);/\\^{A}/g;
+ $result =~ s/&(\#195|Atilde);/\\~{A}/g;
+ $result =~ s/&(\#196|Auml);/\\\"{A}/g;
+ $result =~ s/&(\#197|Aring);/{\\AA}/g;
+ $result =~ s/&(\#198|AElig);/{\\AE}/g;
+ $result =~ s/&(\#199|Ccedil);/\\c{c}/g;
+ $result =~ s/&(\#200|Egrave);/\\\`{E}/g;
+ $result =~ s/&(\#201|Eacute);/\\\'{E}/g;
+ $result =~ s/&(\#202|Ecirc);/\\^{E}/g;
+ $result =~ s/&(\#203|Euml);/\\\"{E}/g;
+ $result =~ s/&(\#204|Igrave);/\\\`{I}/g;
+ $result =~ s/&(\#205|Iacute);/\\\'{I}/g;
+ $result =~ s/&(\#206|Icirc);/\\^{I}/g;
+ $result =~ s/&(\#207|Iuml);/\\\"{I}/g;
+ $result =~ s/&(\#209|Ntilde);/\\~{N}/g;
+ $result =~ s/&(\#210|Ograve);/\\\`{O}/g;
+ $result =~ s/&(\#211|Oacute);/\\\'{O}/g;
+ $result =~ s/&(\#212|Ocirc);/\\^{O}/g;
+ $result =~ s/&(\#213|Otilde);/\\~{O}/g;
+ $result =~ s/&(\#214|Ouml);/\\\"{O}/g;
+ $result =~ s/&(\#215|times);/\$\\times\$/g;
+ $result =~ s/&(\#216|Oslash);/{\\O}/g;
+ $result =~ s/&(\#217|Ugrave);/\\\`{U}/g;
+ $result =~ s/&(\#218|Uacute);/\\\'{U}/g;
+ $result =~ s/&(\#219|Ucirc);/\\^{U}/g;
+ $result =~ s/&(\#220|Uuml);/\\\"{U}/g;
+ $result =~ s/&(\#221|Yacute);/\\\'{Y}/g;
+ $result =~ s/&(\#223|szlig);/\\ss/g;
+ $result =~ s/&(\#224|agrave);/\\\`{a}/g;
+ $result =~ s/&(\#225|aacute);/\\\'{a}/g;
+ $result =~ s/&(\#226|acirc);/\\^{a}/g;
+ $result =~ s/&(\#227|atilde);/\\~{a}/g;
+ $result =~ s/&(\#228|auml);/\\\"{a}/g;
+ $result =~ s/&(\#229|aring);/{\\aa}/g;
+ $result =~ s/&(\#230|aelig);/{\\ae}/g;
+ $result =~ s/&(\#231|ccedil);/\\c{c}/g;
+ $result =~ s/&(\#232|egrave);/\\\`{e}/g;
+ $result =~ s/&(\#233|eacute);/\\\'{e}/g;
+ $result =~ s/&(\#234|ecirc);/\\^{e}/g;
+ $result =~ s/&(\#235|euml);/\\\"{e}/g;
+ $result =~ s/&(\#236|igrave);/\\\`{i}/g;
+ $result =~ s/&(\#237|iacute);/\\\'{i}/g;
+ $result =~ s/&(\#238|icirc);/\\^{i}/g;
+ $result =~ s/&(\#239|iuml);/\\\"{i}/g;
+ $result =~ s/&(\#240|eth);/\$\\partial\$/g;
+ $result =~ s/&(\#241|ntilde);/\\~{n}/g;
+ $result =~ s/&(\#242|ograve);/\\\`{o}/g;
+ $result =~ s/&(\#243|oacute);/\\\'{o}/g;
+ $result =~ s/&(\#244|ocirc);/\\^{o}/g;
+ $result =~ s/&(\#245|otilde);/\\~{o}/g;
+ $result =~ s/&(\#246|ouml);/\\\"{o}/g;
+ $result =~ s/&(\#247|divide);/\$\\div\$/g;
+ $result =~ s/&(\#248|oslash);/{\\o}/g;
+ $result =~ s/&(\#249|ugrave);/\\\`{u}/g;
+ $result =~ s/&(\#250|uacute);/\\\'{u}/g;
+ $result =~ s/&(\#251|ucirc);/\\^{u}/g;
+ $result =~ s/&(\#252|uuml);/\\\"{u}/g;
+ $result =~ s/&(\#253|yacute);/\\\'{y}/g;
+ $result =~ s/&(\#255|yuml);/\\\"{y}/g;
+ $result =~ s/&\#952;/\$\\theta\$/g;
+#Greek Alphabet
+ $result =~ s/&(alpha|\#945);/\$\\alpha \$/g;
+ $result =~ s/&(beta|\#946);/\$\\beta \$/g;
+ $result =~ s/&(gamma|\#947);/\$\\gamma \$/g;
+ $result =~ s/&(delta|\#948);/\$\\delta \$/g;
+ $result =~ s/&(epsilon|\#949);/\$\\epsilon \$/g;
+ $result =~ s/&(zeta|\#950);/\$\\zeta \$/g;
+ $result =~ s/&(eta|\#951);/\$\\eta \$/g;
+ $result =~ s/&(theta|\#952);/\$\\theta \$/g;
+ $result =~ s/&(iota|\#953);/\$\\iota \$/g;
+ $result =~ s/&(kappa|\#954);/\$\\kappa \$/g;
+ $result =~ s/&(lambda|\#955);/\$\\lambda \$/g;
+ $result =~ s/&(mu|\#956);/\$\\mu \$/g;
+ $result =~ s/&(nu|\#957);/\$\\nu \$/g;
+ $result =~ s/&(xi|\#958);/\$\\xi \$/g;
+ $result =~ s/&(pi|\#960);/\$\\pi \$/g;
+ $result =~ s/&(rho|\#961);/\$\\rho \$/g;
+ $result =~ s/&(sigma|\#963);/\$\\sigma \$/g;
+ $result =~ s/&(tau|\#964);/\$\\tau \$/g;
+ $result =~ s/&(upsilon|\#965);/\$\\upsilon \$/g;
+ $result =~ s/&(phi|\#966);/\$\\phi \$/g;
+ $result =~ s/&(chi|\#967);/\$\\chi \$/g;
+ $result =~ s/&(psi|\#968);/\$\\psi \$/g;
+ $result =~ s/&(omega|\#969);/\$\\omega \$/g;
+ $result =~ s/&(Gamma|\#915);/\$\\Gamma \$/g;
+ $result =~ s/&(Delta|\#916);/\$\\Delta \$/g;
+ $result =~ s/&(Theta|\#920);/\$\\Theta \$/g;
+ $result =~ s/&(Lambda|\#923);/\$\\Lambda \$/g;
+ $result =~ s/&(Xi|\#926);/\$\\Xi \$/g;
+ $result =~ s/&(Pi|\#928);/\$\\Pi \$/g;
+ $result =~ s/&(Sigma|\#931);/\$\\Sigma \$/g;
+ $result =~ s/&(Upsilon|\#933);/\$\\Upsilon \$/g;
+ $result =~ s/&(Phi|\#934);/\$\\Phi \$/g;
+ $result =~ s/&(Psi|\#936);/\$\\Psi \$/g;
+ $result =~ s/&(Omega|\#937);/\$\\Omega \$/g;
+
return $result;
}
@@ -1174,26 +1106,157 @@ sub character_chart {
# } elsif($papersize=~/A6/) {
}
return $textwidth,$textheight,$oddoffset,$evenoffset;
+}
+
+
+sub page_format_new {
+#
+#Correspondence between $papersize variable and real paper format:
+# 0 - "Letter [8 1/2x11 in]"
+# 1 - "Legal [8 1/2x14 in]"
+# 2 - "Ledger/Tabloid [11x17 in]"
+# 3 - "Executive [7 1/2x10 in]"
+# 4 - "A2 [420x594 mm]"
+# 5 - "A3 [297x420 mm]"
+# 6 - "A4 [210x297 mm]"
+# 7 - "A5 [148x210 mm]"
+# 8 - "A6 [105x148 mm]"
+#
+ my ($papersize,$layout,$numberofcolumns) = @_;
+ my ($textwidth,$textheight,$oddoffset,$evenoffset) = (0,0,0,0);
+ if ($papersize eq '0') {
+ if ($layout eq 'book') {
+ if ($numberofcolumns == 1) {
+ $textwidth = '18 cm';
+ $textheight = '25.9 cm';
+ $oddoffset = '-0.57 in';
+ $evenoffset = '-0.57 in';
+ } elsif ($numberofcolumns == 2) {
+ $textwidth = '93 mm';
+ $textheight = '25.9 cm';
+ $oddoffset = '-0.57 in';
+ $evenoffset = '-0.57 in';
+ }
+ } elsif ($layout eq 'album') {
+ if ($numberofcolumns eq '1') {
+ $textwidth = '8.8 in';
+ $textheight = '6.8 in';
+ $oddoffset = '-40 pt';
+ $evenoffset = '-60 pt';
+ } elsif ($numberofcolumns == 2) {
+ $textwidth = '4.2 in';
+ $textheight = '6.8 in';
+ $oddoffset = '-40 pt';
+ $evenoffset = '-60 pt';
+ }
+ }
+# } elsif($papersize eq '1') {
+# } elsif($papersize eq '2') {
+# } elsif($papersize eq '3'/) {
+ } elsif($papersize eq '6') {
+ if ($layout eq 'book') {
+ if ($numberofcolumns == 1) {
+ $textwidth = '18 cm';
+ $textheight = '28 cm';
+ $oddoffset = '-0.57 in';
+ $evenoffset = '-0.57 in';
+ } elsif ($numberofcolumns == 2) {
+ $textwidth = '96 mm';
+ $textheight = '2 cm';
+ $oddoffset = '-0.57 in';
+ $evenoffset = '-0.57 in';
+ }
+ } elsif ($layout eq 'album') {
+ if ($numberofcolumns eq '1') {
+ $textwidth = '8.5 in';
+ $textheight = '7.7 in';
+ $oddoffset = '-40 pt';
+ $evenoffset = '-60 pt';
+ } elsif ($numberofcolumns == 2) {
+ $textwidth = '3.9 in';
+ $textheight = '7.7 in';
+ $oddoffset = '-40 pt';
+ $evenoffset = '-60 pt';
+ }
+ }
+# } elsif($papersize eq '5') {
+# } elsif($papersize eq '4') {
+# } elsif($papersize eq '7') {
+# } elsif($papersize eq '8') {
}
+ return $textwidth,$textheight,$oddoffset,$evenoffset;
+}
+
+sub get_name {
+ my ($uname,$udom)=@_;
+ if (!defined($uname)) { $uname=$ENV{'user.name'}; }
+ if (!defined($udom)) { $uname=$ENV{'user.domain'}; }
+ my $plainname=&Apache::loncommon::plainname($uname,$udom);
+ if ($plainname=~/^\s*$/) { $plainname=$uname; }
+ return &Apache::lonxml::latex_special_symbols($plainname,undef,undef,
+ 'header');
+}
sub page_format_transformation {
- my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_;
- my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
- my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- if ($layout eq 'CBI') {
- $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$ENV{'environment.firstname'} $ENV{'environment.lastname'}}} \\hfill $courseidinfo} \\vskip 5 mm /;
- } elsif ($layout eq 'CAPA') {
- if ($choice ne 'All class print') {
- $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\setlength{\\topmargin}{1cm}\\setlength{\\headheight}{1cm}\\setlength{\\headsep}{0.5cm}\\markboth{}{\\textbf{$ENV{'environment.firstname'} $ENV{'environment.lastname'}} $courseidinfo - $assignment}\\pagestyle{myheadings}\\begin{document}\\voffset=-1\.8cm\\setcounter{page}{1}/;
- } else {
- $text =~ s/\\begin{document}/\\setlength{\\textheight}{$textheight}\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\textwidth}{$textwidth}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\begin{document}\\voffset=-1\.8cm\\setcounter{page}{1} \\vskip 5 mm /;
- }
+ my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_;
+ my ($textwidth,$textheight,$oddoffset,$evenoffset);
+ $assignment=~s/_/ /g;
+ if ($numberofcolumns != 1) {
+ ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
+ } else {
+ ($textwidth,$textheight,$oddoffset,$evenoffset) = ($ENV{'form.width'},$ENV{'form.height'},$ENV{'form.leftmargin'},$ENV{'form.leftmargin'});
+ }
+ my $name = &get_name();
+ if ($name =~ /^\s*$/) {
+ $name=&Apache::lonxml::latex_special_symbols($ENV{'user.name'},undef,
+ undef,'header');
+ }
+ my $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'','','header');
+ if ($layout eq 'CBI') {
+ $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$name}} \\hfill $courseidinfo} \\vskip 5 mm /;
+ } elsif ($layout eq 'CAPA') {
+ if ($choice ne 'All class print') {
+ $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$name} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
+ } else {
+ $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1} \\vskip 5 mm /;
+
}
- return $text;
+ }
+ return $text;
+}
+
+
+sub page_format_transformation_new {
+ my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_;
+ my ($textwidth,$textheight,$oddoffset,$evenoffset);
+ $assignment=~s/_/ /g;
+ if ($numberofcolumns != 1) {
+ ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format_new($papersize,$layout,$numberofcolumns);
+ } else {
+ ($textwidth,$textheight,$oddoffset,$evenoffset) = ($ENV{'form.width'},$ENV{'form.height'},$ENV{'form.leftmargin'},$ENV{'form.leftmargin'});
+ }
+ my $name = &get_name();
+ if ($name =~ /^\s*$/) {
+ $name=&Apache::lonxml::latex_special_symbols($ENV{'user.name'},undef,
+ undef,'header');
+ }
+ my $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'','','header');
+ if ($layout eq 'album') {
+ $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$name}} \\hfill $courseidinfo} \\vskip 5 mm /;
+ } elsif ($layout eq 'book') {
+ if ($choice ne 'All class print') {
+ $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$name} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
+ } else {
+ $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1} \\vskip 5 mm /;
+
+ }
+ }
+ return $text;
}
+
sub page_cleanup {
my $result = shift;
@@ -1213,16 +1276,18 @@ sub details_for_menu {
my $name_of_resourse = $hash{'title_'.$hash{'ids_'.$ENV{'form.postdata'}}};
my $symbolic = &Apache::lonnet::symbread($ENV{'form.postdata'});
my ($map,$id,$resource)=split(/___/,$symbolic);
- my $name_of_sequence = $hash{'title_'.$hash{'ids_/res/'.$map}};
+ $map=&Apache::lonnet::clutter($map);
+ my $name_of_sequence;
+ $name_of_sequence = $hash{'title_'.$hash{'ids_'.$map}};
if ($name_of_sequence =~ /^\s*$/) {
- $map =~ m|([^/]+)$|;
- $name_of_sequence = $1;
+ $map =~ m|([^/]+)$|;
+ $name_of_sequence = $1;
}
- my $name_of_map = $hash{'title_'.$hash{'ids_/res/'.$ENV{'request.course.uri'}}};
+ my $name_of_map = $hash{'title_'.$hash{'ids_'.&Apache::lonnet::clutter($ENV{'request.course.uri'})}};
if ($name_of_map =~ /^\s*$/) {
- $ENV{'request.course.uri'} =~ m|([^/]+)$|;
- $name_of_map = $1;
- }
+ $ENV{'request.course.uri'} =~ m|([^/]+)$|;
+ $name_of_map = $1;
+ }
return ($name_of_resourse,$name_of_sequence,$name_of_map);
}
@@ -1262,16 +1327,296 @@ sub latex_corrections {
}
+sub output_data_new {
+ my ($r,$helper) = @_;
+ $r->print(<
+
+LON-CAPA output for printing
+
+
+
+ENDPART
+
+ my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
+ my ($result,$selectionmade) = ('','');
+ my $number_of_columns = 1; #used only for pages to determine the width of the cell
+ my @temporary_array=split /\|/,$format_from_helper;
+ my ($laystyle,$numberofcolumns,$papersize)=@temporary_array;
+ if ($laystyle eq 'L') {
+ $laystyle='album';
+ } else {
+ $laystyle='book';
+ }
+ my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format_new($papersize,$laystyle,$numberofcolumns);
+ my $assignment = $ENV{'form.assignment'};
+ my $LaTeXwidth;
+ if ($textwidth=~/(\d+)\s*cm/) {
+ $LaTeXwidth = $1*10;
+ } elsif ($textwidth=~/(\d+)\s*mm/) {
+ $LaTeXwidth = $1;
+ } elsif ($textwidth=~/(\d+)\s*in/) {
+ $LaTeXwidth = $1*25.4;
+ }
+ $LaTeXwidth.=' mm';
+
+ if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {
+ #-- single document - problem, page, html, xml, ...
+ my $currentURL;
+ if ($helper->{'VARS'}->{'construction'} ne '1') {
+ #prins published resource
+ $currentURL=$helper->{'VARS'}->{'postdata'};
+ } else {
+ #prins resource from the construction space
+ $currentURL=$helper->{'VARS'}->{'filename'};
+ $currentURL=~s/\/home\//\/~/;
+ $currentURL=~s/public_html\///;
+ }
+ $selectionmade = 1;
+ if ($currentURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+ my %moreenv;
+ $moreenv{'form.grade_target'}='tex';
+ $moreenv{'request.filename'}=$currentURL;
+ $moreenv{'form.textwidth'}=$LaTeXwidth;
+ &Apache::lonnet::appenv(%moreenv);
+ my $texversion=&Apache::lonnet::ssi($currentURL);
+ &Apache::lonnet::delenv('form.grade_target','form.textwidth','form.counter');
+ if($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
+ $moreenv{'form.grade_target'}='answer';
+ $moreenv{'form.print_answer'}='yes';
+ &Apache::lonnet::appenv(%moreenv);
+ my $answer=&Apache::lonnet::ssi($currentURL);
+ &Apache::lonnet::delenv('form.grade_target','form.print_answer');
+ my $start=index($answer,'\vskip 0 mm',0);
+ my $finish=rindex $answer,'\vskip 0 mm' ;
+ if ($start!=-1 && $finish!=-1) {$answer=substr($answer,$start,$finish-$start+12);}
+# $r->print(''.$answer.'
'); return OK;
+ $texversion=~s/(\\end{document})/$answer$1/;
+ }
+ $result .= $texversion;
+ if ($currentURL=~m/\.page\s*$/) {
+ ($result,$number_of_columns) = &page_cleanup($result);
+ }
+ } else {
+# $result='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
+# if ($ENV{'form.url'}=~/\/(aboutme|syllabus|bulletinboard|smppg)$/) {
+# $result.=$1;
+# } else {
+# $result.=$ENV{'form.url'};
+# }
+# $result.=' \end{document}'
+ }
+ } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')) {
+ #-- produce an output string
+ my $flag_latex_header_remove = 'NO';
+ my $flag_page_in_sequence = 'NO';
+ my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
+ for (my $i=0;$i<=$#master_seq;$i++) {
+ $master_seq[$i]=~/___\d+___(.*)$/;
+ my $urlp='/res/'.$1;
+ if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') {
+ $selectionmade = 2;
+ } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') {
+ $selectionmade = 3;
+ } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') {
+ $selectionmade = 4;
+ }
+ my %moreenv;
+ $moreenv{'form.grade_target'}='tex';
+ $moreenv{'form.textwidth'}=$LaTeXwidth;
+ &Apache::lonnet::appenv(%moreenv);
+ #&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]");
+ my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$master_seq[$i]));
+ &Apache::lonnet::delenv('form.grade_target','form.textwidth');
+ if ($urlp=~/\.page$/) {
+ ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
+ if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
+ $texversion =~ s/\\end{document}\d*/\\end{document}/;
+ $flag_page_in_sequence = 'YES';
+ }
+ if ($flag_latex_header_remove ne 'NO') {
+ $texversion = &latex_header_footer_remove($texversion);
+ } else {
+ $texversion =~ s/\\end{document}//;
+ }
+ $result .= $texversion;
+ $flag_latex_header_remove = 'YES';
+ }
+ &Apache::lonnet::delenv('form.counter');
+ if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}
+ $result .= '\end{document}';
+ } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') {
+ #-- prints assignments for whole class or for selected students
+ $selectionmade=5;
+ my @students=split /\|\|\|/, $helper->{'VARS'}->{'STUDENTS'};
+ my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
+ #loop over students
+ my $flag_latex_header_remove = 'NO';
+ my %moreenv;
+ $moreenv{'form.textwidth'}=$LaTeXwidth;
+ &Apache::lonnet::appenv(%moreenv);
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1);
+ foreach my $person (@students) {
+ my $current_output = '';
+# my ($usersection,$username,$userdomain) = split /:/,$person;
+ my ($username,$userdomain) = split /:/,$person;
+ my $fullname = &get_name($username,$userdomain);
+ #goes through all resources, checks if they are available for current student, and produces output
+ foreach my $curresline (@master_seq) {
+ if ($curresline=~ m/\.(problem|exam|quiz|assess|survey|form|library)$/) {
+ my ($map,$id,$res_url) = split(/___/,$curresline);
+ if (&Apache::lonnet::allowed('bre',$res_url)) {
+ my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,
+ $ENV{'request.course.id'},'tex');
+ if ($flag_latex_header_remove eq 'YES') {
+ $rendered = &latex_header_footer_remove($rendered);
+ } else {
+ $rendered =~ s/\\end{document}//;
+ }
+ $current_output .= $rendered;
+ }
+ $flag_latex_header_remove = 'YES';
+ }
+ }
+ my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
+ if ($current_output=~/\\documentclass/) {
+ $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\vskip 3 mm /;
+ } else {
+ my $blanspages = '';
+ for (my $j=0;$j<$helper->{'VARS'}->{'EMPTY_PAGES'};$j++) {$blanspages.='\clearpage\strut\clearpage';}
+ $current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
+ }
+ $result .= $current_output;
+ &Apache::lonnet::delenv('form.counter');
+ &Apache::lonxml::init_counter();
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+ 'last student '.$fullname);
+ }
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+ $result .= '\end{document}';
+ &Apache::lonnet::delenv('form.textwidth');
+ } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_from_directory') {
+ #prints selected problems from the subdirectory
+ $selectionmade = 6;
+ my @list_of_files=split /\|\|\|/, $helper->{'VARS'}->{'FILES'};
+ @list_of_files=sort @list_of_files;
+ my $flag_latex_header_remove = 'NO';
+ for (my $i=0;$i<=$#list_of_files;$i++) {
+ my $urlp = $list_of_files[$i];
+ if ($urlp=~/\//) {
+ my %moreenv;
+ $moreenv{'form.grade_target'}='tex';
+ $moreenv{'form.textwidth'}=$LaTeXwidth;
+ &Apache::lonnet::appenv(%moreenv);
+ if ($urlp =~ m|/home/([^/]+)/public_html|) {
+ $urlp =~ s|/home/([^/]*)/public_html|/~$1|;
+ } else {
+ $urlp =~ s|^/home/httpd/html||;
+ }
+ my $texversion=&Apache::lonnet::ssi($urlp);
+ &Apache::lonnet::delenv('form.grade_target','form.textwidth');
+ #this chunck is responsible for printing the path to problem
+ my $newurlp = '';
+ my $HowMany = length($urlp)*2;
+ if ($HowMany > $LaTeXwidth) {
+ my @temporrary = split '/',$urlp;
+ my $HowManyNew = 0;
+ for (my $ii=0;$ii<=$#temporrary;$ii++) {
+ if ($temporrary[$ii] ne '') {
+ $HowManyNew += length($temporrary[$ii])*2;
+ if ($HowManyNew < $LaTeXwidth ) {
+ $newurlp .= '/'.$temporrary[$ii];
+ } else {
+ $HowManyNew = 0;
+ $newurlp .= '|\vskip -1 mm \noindent \verb|';
+ $ii--;
+ }
+ }
+ }
+ }
+ $texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 {\\small\\noindent\\verb|$newurlp\|\\vskip 0 mm}/;
+ if ($flag_latex_header_remove ne 'NO') {
+ $texversion = &latex_header_footer_remove($texversion);
+ } else {
+ $texversion =~ s/\\end{document}//;
+ }
+ $result .= $texversion;
+ }
+ $flag_latex_header_remove = 'YES';
+ }
+ $result .= '\end{document}';
+ }
+#-------------------------------------------------------- corrections for the different page formats
+ $result = &page_format_transformation_new($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'});
+# if ($layout eq 'CBI') {
+# $laystyle = 'album';
+# }
+ $result = &latex_corrections($number_of_columns,$result);
+# #changes page's parameters for the one column output
+# if ($ENV{'form.numberofcolumns'} == 1) {
+# $result =~ s/\\textwidth= 9cm/\\textwidth= $ENV{'form.width'}/;
+# $result =~ s/\\textheight 25\.9cm/\\textheight $ENV{'form.height'}/;
+# $result =~ s/\\evensidemargin = -0\.57in/\\evensidemargin= $ENV{'form.leftmargin'}/;
+# $result =~ s/\\oddsidemargin = -0\.57in/\\oddsidemargin= $ENV{'form.leftmargin'}/;
+# }
+#-- writing .tex file in prtspool
+ my $temp_file;
+ my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout_".time."_".rand(10000000).".tex";
+ unless ($temp_file = Apache::File->new('>'.$filename)) {
+ $r->log_error("Couldn't open $filename for output $!");
+ return SERVER_ERROR;
+ }
+ print $temp_file $result;
+
+#
+$r->print(<
+
+
+FINALEND
+}
+
+
+
sub handler {
my $r = shift;
+ my $helper;
+
+ # A hook for me to work without disturbing Alex.
+ if (!$ENV{'form.jeremy'}) {
+ my $result = printHelper($r);
+ if (!ref($result)) {
+ return $result;
+ }
+ $helper = $result;
+
+
+
+ my $key;
+ foreach $key (keys %{$helper->{'VARS'}}) {
+ $r->print(' '.$key.'->'.$helper->{'VARS'}->{$key}.'<-
');
+ }
+# return OK;
+
+
+ &output_data_new($r,$helper);
+
- my $loaderror=&Apache::lonnet::overloaderror($r);
- if ($loaderror) { return $loaderror; }
- $loaderror=
- &Apache::lonnet::overloaderror($r,
- $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
- if ($loaderror) { return $loaderror; }
+
+
+
+
+ return OK;
+ }
+# my $loaderror=&Apache::lonnet::overloaderror($r);
+# if ($loaderror) { return $loaderror; }
+# $loaderror=
+# &Apache::lonnet::overloaderror($r,
+# $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+# if ($loaderror) { return $loaderror; }
$r->content_type('text/html');
$r->send_http_header;
@@ -1319,7 +1664,549 @@ sub handler {
}
+use Apache::lonhelper;
+
+sub printHelper {
+ my $r = shift;
+
+ if ($ENV{'request.course.id'}) {
+ my $fn=$ENV{'request.course.fn'};
+ tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640);
+ }
+
+ if ($r->header_only) {
+ if ($ENV{'browser.mathml'}) {
+ $r->content_type('text/xml');
+ } else {
+ $r->content_type('text/html');
+ }
+ $r->send_http_header;
+ return OK;
+ }
+
+ # Send header, nocache
+ if ($ENV{'browser.mathml'}) {
+ $r->content_type('text/xml');
+ } else {
+ $r->content_type('text/html');
+ }
+ &Apache::loncommon::no_cache($r);
+ $r->send_http_header;
+ $r->rflush();
+
+ # Unfortunately, this helper is so complicated we have to
+ # write it by hand
+
+ Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING});
+
+ my $helper = Apache::lonhelper::helper->new("Printing Wizard");
+ $helper->declareVar('symb');
+ $helper->declareVar('postdata');
+ $helper->declareVar('filename');
+ $helper->declareVar('construction');
+
+ # This will persistently load in the data we want from the
+ # very first screen.
+ # Detect whether we're coming from construction space
+ if ($ENV{'form.postdata'} =~ /http:\/\// ) {
+ $ENV{'form.postdata'} =~ /http:\/\/[a-zA-Z.]+\/~([a-zA-Z0-9]+)\/(.*)/;
+ $helper->{VARS}->{'filename'} = "/home/$1/public_html/$2";
+ $helper->{VARS}->{'construction'} = 1;
+ } else {
+ if ($ENV{'form.postdata'}) {
+ $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($ENV{'form.postdata'});
+ }
+ if ($ENV{'form.symb'}) {
+ $helper->{VARS}->{'symb'} = $ENV{'form.symb'};
+ }
+ if ($ENV{'form.url'}) {
+ $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
+ }
+ }
+
+ if ($ENV{'form.symb'}) {
+ $helper->{VARS}->{'symb'} = $ENV{'form.symb'};
+ }
+ if ($ENV{'form.url'}) {
+ $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
+
+ }
+
+ my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu;
+ $helper->{VARS}->{'assignment'} = $sequenceTitle;
+
+
+ # Extract map
+ my $symb = $helper->{VARS}->{'symb'};
+ my ($map, $id, $url);
+ my $subdir;
+
+ # Get the resource name from construction space
+ if ($helper->{VARS}->{'construction'}) {
+ $resourceTitle = substr($helper->{VARS}->{'filename'},
+ rindex($helper->{VARS}->{'filename'}, '/')+1);
+ $subdir = substr($helper->{VARS}->{'filename'},
+ 0, rindex($helper->{VARS}->{'filename'}, '/') + 1);
+ } else {
+ ($map, $id, $url) = split(/___/, $symb);
+ $helper->{VARS}->{'postdata'} = Apache::lonnet::clutter($url);
+
+ if (!$resourceTitle) { # if the resource doesn't have a title, use the filename
+ my $url = $helper->{VARS}->{'postdata'};
+ $resourceTitle = substr($url, rindex($url, '/') + 1);
+ }
+ $subdir = &Apache::lonnet::filelocation("", $url);
+ }
+
+ Apache::lonhelper::registerHelperTags();
+
+ # "Delete everything after the last slash."
+ $subdir =~ s|/[^/]+$||;
+ if (not $helper->{VARS}->{'construction'}) {
+ $subdir='/home/httpd/html/res/'.$subdir;
+ }
+
+
+ # What can be printed is a very dynamic decision based on
+ # lots of factors. So we need to dynamically build this list.
+ # To prevent security leaks, states are only added to the wizard
+ # if they can be reached, which ensures manipulating the form input
+ # won't allow anyone to reach states they shouldn't have permission
+ # to reach.
+
+ # printChoices is tracking the kind of printing the user can
+ # do, and will be used in a choices construction later.
+ # In the meantime we will be adding states and elements to
+ # the helper by hand.
+ my $printChoices = [];
+ my $paramHash;
+
+ if ($resourceTitle) {
+ push @{$printChoices}, ["$resourceTitle (prints what you just saw on the screen)", 'current_document', 'PAGESIZE'];
+ }
+
+ $r->print($helper->{VARS}->{'postdata'});
+
+ # If we're in a sequence...
+ if ($helper->{'VARS'}->{'construction'} ne '1') {
+ # Allow problems from sequence
+ push @{$printChoices}, ["Problem(s) from $sequenceTitle", 'map_problems', 'CHOOSE_PROBLEMS'];
+ # Allow all resources from sequence
+ push @{$printChoices}, ["Everything (problem(s), page(s), html/xml file(s)) from $sequenceTitle", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
+
+ my $isProblem = '$res->is_problem();';
+ my $isProblemOrMap = '$res->is_problem() || $res->is_map()';
+ my $isNotMap = '!$res->is_map();';
+ my $symb = '$res->symb();';
+ my $helperFragment = <
+ (mark them then click "next" button)
+
+ PAGESIZE
+ return $isProblem
+ $map
+ return $symb
+
+
+
+
+ (mark them then click "next" button)
+
+ PAGESIZE
+ return $isNotMap;
+ $map
+ return $symb
+
+
+HELPERFRAGMENT
+
+ &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
+ }
+
+ # If the user is priviledged, allow them to print all
+ # problems in the course, optionally for selected students
+ if (($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) and ($helper->{VARS}->{'postdata'}=~/\/res\//)) {
+ push @{$printChoices}, ['Problems in this course', 'all_problems', 'ALL_PROBLEMS'];
+ push @{$printChoices}, ["Problems from $sequenceTitle for selected students", 'problems_for_students', 'CHOOSE_STUDENTS'];
+
+ my $isProblem = '$res->is_problem();';
+ my $isProblemOrMap = '$res->is_problem() || $res->is_map()';
+ my $symb = '$res->symb();';
+ &Apache::lonxml::xmlparse($r, 'helper', <
+ (mark them then click "next" button)
+
+ PAGESIZE
+ return $isProblemOrMap
+ return $isProblem
+ return $symb
+
+
+
+
+ (do not forget to select assignment itself - make another selection below)
+
+
Select resources for the assignment
+
+ return $isProblem
+ $map
+ return $symb
+
+
How should the results be printed?
+
+ Print students assignments without separations (as uniform flow)
+ Start student assignment from new page (add pagefeed after each student)
+ Add one emty page after each student assignment
+ Add two emty page after each student assignment
+
+
+CHOOSE_STUDENTS
+ }
+
+ # FIXME: That RE should come from a library somewhere.
+ if (((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) {
+ push @{$printChoices}, ["Problems from current subdirectory $subdir", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];
+
+ my $f = '$filename';
+ my $xmlfrag = <
+ (mark them then click "next" button)
+
+ PAGESIZE
+ return '$subdir';
+CHOOSE_FROM_SUBDIR
+
+ $xmlfrag .= <<'CHOOSE_FROM_SUBDIR';
+ return $filename =~
+ m/^[^\.]+\.(problem|exam|quiz|assess|survey|form|library)$/;
+
+
+
+CHOOSE_FROM_SUBDIR
+ &Apache::lonxml::xmlparse($r, 'helper', $xmlfrag);
+ }
+
+ # Generate the first state, to select which resources get printed.
+ Apache::lonhelper::state->new("START", "What do you want to print? Make a choice.");
+ $paramHash = Apache::lonhelper::getParamHash();
+ $paramHash->{MESSAGE_TEXT} = "";
+ Apache::lonhelper::message->new();
+ $paramHash = Apache::lonhelper::getParamHash();
+ $paramHash->{'variable'} = 'PRINT_TYPE';
+ $helper->declareVar('PRINT_TYPE');
+ $paramHash->{CHOICES} = $printChoices;
+ Apache::lonhelper::choices->new();
+
+ if ($ENV{'request.role.adv'}) {
+ $paramHash = Apache::lonhelper::getParamHash();
+ $paramHash->{MESSAGE_TEXT} = "
Next option is available only for advanced users:
";
+ Apache::lonhelper::message->new();
+ $paramHash = Apache::lonhelper::getParamHash();
+ $paramHash->{'variable'} = 'ANSWER_TYPE';
+ $helper->declareVar('ANSWER_TYPE');
+ $paramHash->{CHOICES} = [
+ ['Print without answer', 'yes'],
+ ['Print with answers', 'no'] ];
+ Apache::lonhelper::choices->new();
+ }
+
+ Apache::lonprintout::page_format_state->new("FORMAT");
+
+ # Generate the PAGESIZE state which will offer the user the margin
+ # choices if they select one column
+ Apache::lonhelper::state->new("PAGESIZE", "Set Margins");
+ Apache::lonprintout::page_size_state->new('pagesize', 'FORMAT', 'FINAL');
+
+
+ $helper->process();
+
+ # MANUAL BAILOUT CONDITION:
+ # If we're in the "final" state, bailout and return to handler
+ if ($helper->{STATE} eq 'FINAL') {
+ return $helper;
+ }
+
+ $r->print($helper->display());
+
+ Apache::lonhelper::unregisterHelperTags();
+
+ untie %hash;
+
+ return OK;
+}
+
1;
+
+package Apache::lonprintout::page_format_state;
+
+=pod
+
+=head1 Helper element: page_format_state
+
+See lonhelper.pm documentation for discussion of the helper framework.
+
+Apache::lonprintout::page_format_state is an element that gives the
+user an opportunity to select the page layout they wish to print
+with: Number of columns, portrait/landscape, and paper size. If you
+want to change the paper size choices, change the @paperSize array
+contents in this package.
+
+page_format_state is always directly invoked in lonprintout.pm, so there
+is no tag interface. You actually pass parameters to the constructor.
+
+=over 4
+
+=item * B(varName): varName is where the print information will be stored in the format FIXME.
+
+=back
+
+=cut
+
+use Apache::lonhelper;
+
+no strict;
+@ISA = ("Apache::lonhelper::element");
+use strict;
+
+my $maxColumns = 2;
+my @paperSize = ("Letter [8 1/2x11 in]", "Legal [8 1/2x14 in]",
+ "Ledger/Tabloid [11x17 in]", "Executive [7 1/2x10 in]",
+ "A2 [420x594 mm]", "A3 [297x420 mm]", "A4 [210x297 mm]",
+ "A5 [148x210 mm]", "A6 [105x148 mm]" );
+
+# Tentative format: Orientation (L = Landscape, P = portrait) | Colnum |
+# Paper type
+
+sub new {
+ my $self = Apache::lonhelper::element->new();
+
+ shift;
+
+ $self->{'variable'} = shift;
+ my $helper = Apache::lonhelper::getHelper();
+ $helper->declareVar($self->{'variable'});
+ bless($self);
+ return $self;
+}
+
+sub render {
+ my $self = shift;
+ my $helper = Apache::lonhelper::getHelper();
+ my $result = '';
+ my $var = $self->{'variable'};
+
+ $result .= <What page format do you prefer?
+";
+ return $result;
+}
+
+sub postprocess {
+ my $self = shift;
+
+ my $var = $self->{'variable'};
+ my $helper = Apache::lonhelper->getHelper();
+ $helper->{VARS}->{$var} =
+ $ENV{"form.$var.layout"} . '|' . $ENV{"form.$var.cols"} . '|' .
+ $ENV{"form.$var.paper"};
+ return 1;
+}
+
+1;
+
+package Apache::lonprintout::page_size_state;
+
+=pod
+
+=head1 Helper element: page_size_state
+
+See lonhelper.pm documentation for discussion of the helper framework.
+
+Apache::lonprintout::page_size_state is an element that gives the
+user the opportunity to further refine the page settings if they
+select a single-column page.
+
+page_size_state is always directly invoked in lonprintout.pm, so there
+is no tag interface. You actually pass parameters to the constructor.
+
+=over 4
+
+=item * B(varName): varName is where the print information will be stored in the format FIXME.
+
+=back
+
+=cut
+
+use Apache::lonhelper;
+
+no strict;
+@ISA = ("Apache::lonhelper::element");
+use strict;
+
+
+
+sub new {
+ my $self = Apache::lonhelper::element->new();
+
+ shift; # disturbs me (probably prevents subclassing) but works (drops
+ # package descriptor)... - Jeremy
+
+ $self->{'variable'} = shift;
+ my $helper = Apache::lonhelper::getHelper();
+ $helper->declareVar($self->{'variable'});
+
+ # The variable name of the format element, so we can look into
+ # $helper->{VARS} to figure out whether the columns are one or two
+ $self->{'formatvar'} = shift;
+
+ # The state to transition to after selection, or after discovering
+ # the cols are not set to 1
+ $self->{NEXTSTATE} = shift;
+ bless($self);
+ return $self;
+}
+
+sub render {
+ my $self = shift;
+ my $helper = Apache::lonhelper::getHelper();
+ my $result = '';
+ my $var = $self->{'variable'};
+
+ if (defined $self->{ERROR_MSG}) {
+ $result .= '
' . $self->{ERROR_MSG} . '
';
+ }
+
+ $result .= <How should the column be formatted?
+
+
+
+Hint: Some instructors like to leave scratch space for the student by
+making the width much smaller then the width of the page.
+
+ELEMENTHTML
+
+ return $result;
+}
+
+# If the user didn't select 1 column, skip this state.
+sub preprocess {
+ my $self = shift;
+ my $helper = Apache::lonhelper::getHelper();
+
+ my $format = $helper->{VARS}->{$self->{'formatvar'}};
+ if (substr($format, 2, 1) ne '1') {
+ $helper->changeState($self->{NEXTSTATE});
+ }
+
+ return 1;
+}
+
+sub postprocess {
+ my $self = shift;
+
+ my $var = $self->{'variable'};
+ my $helper = Apache::lonhelper->getHelper();
+ my $width = $helper->{VARS}->{$var .'.width'} = $ENV{"form.${var}.width"};
+ my $height = $helper->{VARS}->{$var .'.height'} = $ENV{"form.${var}.height"};
+ my $lmargin = $helper->{VARS}->{$var .'.lmargin'} = $ENV{"form.${var}.lmargin"};
+ $helper->{VARS}->{$var .'.widthunit'} = $ENV{"form.${var}.widthunit"};
+ $helper->{VARS}->{$var .'.heightunit'} = $ENV{"form.${var}.heightunit"};
+ $helper->{VARS}->{$var .'.lmarginunit'} = $ENV{"form.${var}.lmarginunit"};
+
+ my $error = '';
+
+ # /^-?[0-9]+(\.[0-9]*)?$/ -> optional minus, at least on digit, followed
+ # by an optional period, followed by digits, ending the string
+
+ if ($width !~ /^-?[0-9]+(\.[0-9]*)?$/) {
+ $error .= "Invalid width; please type only a number.
\n";
+ }
+ if ($height !~ /^-?[0-9]+(\.[0-9]*)?$/) {
+ $error .= "Invalid height; please type only a number.
\n";
+ }
+ if ($lmargin !~ /^-?[0-9]+(\.[0-9]*)?$/) {
+ $error .= "Invalid left margin; please type only a number.
\n";
+ }
+
+ if (!$error) {
+ Apache::lonhelper::getHelper()->changeState($self->{NEXTSTATE});
+ return 1;
+ } else {
+ $self->{ERROR_MSG} = $error;
+ return 0;
+ }
+}
+
+
+
__END__