--- loncom/interface/lonprintout.pm 2002/11/20 17:26:52 1.93 +++ loncom/interface/lonprintout.pm 2004/04/06 15:47:52 1.289 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.93 2002/11/20 17:26:52 sakharuk Exp $ +# $Id: lonprintout.pm,v 1.289 2004/04/06 15:47:52 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,17 +25,6 @@ # # http://www.lon-capa.org/ # -# (Internal Server Error Handler -# -# (Login Screen -# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, -# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) -# -# 3/1/1 Gerd Kortemeyer) -# -# 3/1 Gerd Kortemeyer -# -# 9/17 Alex Sakharuk # package Apache::lonprintout; @@ -49,1271 +38,2048 @@ use Apache::grades; use Apache::edit; use Apache::File(); use Apache::lonnavmaps; +use Apache::lonratedt; use POSIX qw(strftime); +use Apache::lonlocal; use GDBM_File; my %hash; my $LaTeXwidth = 0; -sub headerform { - my $r = shift; - $r->print(< - -LON-CAPA output for printing - - -
-ENDHEADER - if ($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) { - $r->print(<Path to current document: $ENV{'form.postdata'}

-ENDHEADER1 -} + +sub latex_header_footer_remove { + my $text = shift; + $text =~ s/\\end{document}//; + $text =~ s/\\documentclass([^&]*)\\begin{document}//; + return $text; } -sub menu_for_output { - my $r = shift; - my ($title_for_single_resource,$title_for_sequence,$title_for_main_map) = &details_for_menu; - my $assignment = $title_for_sequence; - 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.'"';} - my $subdir_to_print = $ENV{'form.postdata'}; - $subdir_to_print =~ m/\/([^\/]+)$/; - $subdir_to_print =~ s/$1//; - $r->print(<What do you want to print? Make a choice.
- - - - Current document $title_for_single_resource -(prints what you just saw on the screen)
-ENDMENUOUT1 - if ($ENV{'form.postdata'}=~/\/res\//) { - $r->print(< Problem(s) from $title_for_sequence
- Problem(s) plus page(s) or html/xml file(s) from $title_for_sequence
-ENDMENUOUT2 - } - if (($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) and ($ENV{'form.postdata'}=~/\/res\//)) { - $r->print(< All problems in this course (warning: this may be time consuming)
-
- All problems from $title_for_sequence for selected students

-ENDMENUOUT6 - } - my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); - $subdirtoprint =~ s/\/[^\/]+$//; - if ((&Apache::lonnet::allowed('bre',$subdirtoprint) eq 'F') and ($ENV{'form.postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) { - $r->print(< Problems from current subdirectory $subdir_to_print
-ENDMENUOUT4 - } - $r->print(<



-

And what page format do you prefer?

- - - - - - - -
- Landscape
- Portrait
-
  - Number of columns: - - Paper size (format [width x height]): -
-
- -ENDMENUOUT5 +sub character_chart { + my $result = shift; + $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;/\\ensuremath\{=\}/g; + $result =~ s/&(\#0?62|gt|\#155);/\\ensuremath\{>\}/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;/\\ensuremath\{\\setminus\}/g; + $result =~ s/&\#0?93;/]/g; + $result =~ s/&\#(0?94|136);/\\ensuremath\{\\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;/\\ensuremath\{\\ldots\}/g; + $result =~ s/&\#134;/\\ensuremath\{\\dagger\}/g; + $result =~ s/&\#135;/\\ensuremath\{\\ddagger\}/g; + $result =~ s/&\#137;/\\textperthousand /g; + $result =~ s/&\#140;/{\\OE}/g; + $result =~ s/&\#147;/\`\`/g; + $result =~ s/&\#148;/\'\'/g; + $result =~ s/&\#149;/\\ensuremath\{\\bullet\}/g; + $result =~ s/&\#150;/--/g; + $result =~ s/&\#151;/---/g; + $result =~ s/&\#152;/\\ensuremath\{\\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);/\\ensuremath\{\\neg\}/g; + $result =~ s/&(\#173|shy);/ - /g; + $result =~ s/&(\#174|reg);/\\textregistered /g; + $result =~ s/&(\#175|macr);/\\ensuremath\{^{-}\}/g; + $result =~ s/&(\#176|deg);/\\ensuremath\{^{\\circ}\}/g; + $result =~ s/&(\#177|plusmn);/\\ensuremath\{\\pm\}/g; + $result =~ s/&(\#178|sup2);/\\ensuremath\{^2\}/g; + $result =~ s/&(\#179|sup3);/\\ensuremath\{^3\}/g; + $result =~ s/&(\#180|acute);/\\textacute /g; + $result =~ s/&(\#181|micro);/\\ensuremath\{\\mu\}/g; + $result =~ s/&(\#182|para);/\\P/g; + $result =~ s/&(\#183|middot);/\\ensuremath\{\\cdot\}/g; + $result =~ s/&(\#184|cedil);/\\c{\\strut}/g; + $result =~ s/&(\#185|sup1);/\\ensuremath\{^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);/\\ensuremath\{\\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);/\\ensuremath\{\\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);/\\ensuremath\{\\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;/\\ensuremath\{\\theta\}/g; +#Greek Alphabet + $result =~ s/&(alpha|\#945);/\\ensuremath\{\\alpha\}/g; + $result =~ s/&(beta|\#946);/\\ensuremath\{\\beta\}/g; + $result =~ s/&(gamma|\#947);/\\ensuremath\{\\gamma\}/g; + $result =~ s/&(delta|\#948);/\\ensuremath\{\\delta\}/g; + $result =~ s/&(epsilon|\#949);/\\ensuremath\{\\epsilon\}/g; + $result =~ s/&(zeta|\#950);/\\ensuremath\{\\zeta\}/g; + $result =~ s/&(eta|\#951);/\\ensuremath\{\\eta\}/g; + $result =~ s/&(theta|\#952);/\\ensuremath\{\\theta\}/g; + $result =~ s/&(iota|\#953);/\\ensuremath\{\\iota\}/g; + $result =~ s/&(kappa|\#954);/\\ensuremath\{\\kappa\}/g; + $result =~ s/&(lambda|\#955);/\\ensuremath\{\\lambda\}/g; + $result =~ s/&(mu|\#956);/\\ensuremath\{\\mu\}/g; + $result =~ s/&(nu|\#957);/\\ensuremath\{\\nu\}/g; + $result =~ s/&(xi|\#958);/\\ensuremath\{\\xi\}/g; + $result =~ s/&(omicron|\#959);/o/g; + $result =~ s/&(pi|\#960);/\\ensuremath\{\\pi\}/g; + $result =~ s/&(rho|\#961);/\\ensuremath\{\\rho\}/g; + $result =~ s/&(sigma|\#963);/\\ensuremath\{\\sigma\}/g; + $result =~ s/&(tau|\#964);/\\ensuremath\{\\tau\}/g; + $result =~ s/&(upsilon|\#965);/\\ensuremath\{\\upsilon\}/g; + $result =~ s/&(phi|\#966);/\\ensuremath\{\\phi\}/g; + $result =~ s/&(chi|\#967);/\\ensuremath\{\\chi\}/g; + $result =~ s/&(psi|\#968);/\\ensuremath\{\\psi\}/g; + $result =~ s/&(omega|\#969);/\\ensuremath\{\\omega\}/g; + $result =~ s/&(thetasym|\#977);/\\ensuremath\{\\vartheta\}/g; + $result =~ s/&(piv|\#982);/\\ensuremath\{\\varpi\}/g; + $result =~ s/&(Alpha|\#913);/A/g; + $result =~ s/&(Beta|\#914);/B/g; + $result =~ s/&(Gamma|\#915);/\\ensuremath\{\\Gamma\}/g; + $result =~ s/&(Delta|\#916);/\\ensuremath\{\\Delta\}/g; + $result =~ s/&(Epsilon|\#917);/E/g; + $result =~ s/&(Zeta|\#918);/Z/g; + $result =~ s/&(Eta|\#919);/H/g; + $result =~ s/&(Theta|\#920);/\\ensuremath\{\\Theta\}/g; + $result =~ s/&(Iota|\#921);/I/g; + $result =~ s/&(Kappa|\#922);/K/g; + $result =~ s/&(Lambda|\#923);/\\ensuremath\{\\Lambda\}/g; + $result =~ s/&(Mu|\#924);/M/g; + $result =~ s/&(Nu|\#925);/N/g; + $result =~ s/&(Xi|\#926);/\\ensuremath\{\\Xi\}/g; + $result =~ s/&(Omicron|\#927);/O/g; + $result =~ s/&(Pi|\#928);/\\ensuremath\{\\Pi\}/g; + $result =~ s/&(Rho|\#929);/P/g; + $result =~ s/&(Sigma|\#931);/\\ensuremath\{\\Sigma\}/g; + $result =~ s/&(Tau|\#932);/T/g; + $result =~ s/&(Upsilon|\#933);/\\ensuremath\{\\Upsilon\}/g; + $result =~ s/&(Phi|\#934);/\\ensuremath\{\\Phi\}/g; + $result =~ s/&(Chi|\#935);/X/g; + $result =~ s/&(Psi|\#936);/\\ensuremath\{\\Psi\}/g; + $result =~ s/&(Omega|\#937);/\\ensuremath\{\\Omega\}/g; +#Arrows (extended HTML 4.01) + $result =~ s/&(larr|\#8592);/\\ensuremath\{\\leftarrow\}/g; + $result =~ s/&(uarr|\#8593);/\\ensuremath\{\\uparrow\}/g; + $result =~ s/&(rarr|\#8594);/\\ensuremath\{\\rightarrow\}/g; + $result =~ s/&(darr|\#8595);/\\ensuremath\{\\downarrow\}/g; + $result =~ s/&(harr|\#8596);/\\ensuremath\{\\leftrightarrow\}/g; + $result =~ s/&(lArr|\#8656);/\\ensuremath\{\\Leftarrow\}/g; + $result =~ s/&(uArr|\#8657);/\\ensuremath\{\\Uparrow\}/g; + $result =~ s/&(rArr|\#8658);/\\ensuremath\{\\Rightarrow\}/g; + $result =~ s/&(dArr|\#8659);/\\ensuremath\{\\Downarrow\}/g; + $result =~ s/&(hArr|\#8660);/\\ensuremath\{\\Leftrightarrow\}/g; +#Mathematical Operators (extended HTML 4.01) + $result =~ s/&(forall|\#8704);/\\ensuremath\{\\forall\}/g; + $result =~ s/&(part|\#8706);/\\ensuremath\{\\partial\}/g; + $result =~ s/&(exist|\#8707);/\\ensuremath\{\\exists\}/g; + $result =~ s/&(empty|\#8709);/\\ensuremath\{\\emptyset\}/g; + $result =~ s/&(nabla|\#8711);/\\ensuremath\{\\nabla\}/g; + $result =~ s/&(isin|\#8712);/\\ensuremath\{\\in\}/g; + $result =~ s/&(notin|\#8713);/\\ensuremath\{\\notin\}/g; + $result =~ s/&(ni|\#8715);/\\ensuremath\{\\ni\}/g; + $result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g; + $result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g; + $result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g; + $result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g; + $result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g; + $result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g; + $result =~ s/&(infin|\#8734);/\\ensuremath\{\\infty\}/g; + $result =~ s/&(ang|\#8736);/\\ensuremath\{\\angle\}/g; + $result =~ s/&(and|\#8743);/\\ensuremath\{\\wedge\}/g; + $result =~ s/&(or|\#8744);/\\ensuremath\{\\vee\}/g; + $result =~ s/&(cap|\#8745);/\\ensuremath\{\\cap\}/g; + $result =~ s/&(cup|\#8746);/\\ensuremath\{\\cup\}/g; + $result =~ s/&(int|\#8747);/\\ensuremath\{\\int\}/g; + $result =~ s/&(sim|\#8764);/\\ensuremath\{\\sim\}/g; + $result =~ s/&(cong|\#8773);/\\ensuremath\{\\cong\}/g; + $result =~ s/&(asymp|\#8776);/\\ensuremath\{\\approx\}/g; + $result =~ s/&(ne|\#8800);/\\ensuremath\{\\not=\}/g; + $result =~ s/&(equiv|\#8801);/\\ensuremath\{\\equiv\}/g; + $result =~ s/&(le|\#8804);/\\ensuremath\{\\leq\}/g; + $result =~ s/&(ge|\#8805);/\\ensuremath\{\\geq\}/g; + $result =~ s/&(sub|\#8834);/\\ensuremath\{\\subset\}/g; + $result =~ s/&(sup|\#8835);/\\ensuremath\{\\supset\}/g; + $result =~ s/&(nsub|\#8836);/\\ensuremath\{\\not\\subset\}/g; + $result =~ s/&(sube|\#8838);/\\ensuremath\{\\subseteq\}/g; + $result =~ s/&(supe|\#8839);/\\ensuremath\{\\supseteq\}/g; + $result =~ s/&(oplus|\#8853);/\\ensuremath\{\\oplus\}/g; + $result =~ s/&(otimes|\#8855);/\\ensuremath\{\\otimes\}/g; + $result =~ s/&(perp|\#8869);/\\ensuremath\{\\perp\}/g; + $result =~ s/&(sdot|\#8901);/\\ensuremath\{\\cdot\}/g; +#Geometric Shapes (extended HTML 4.01) + $result =~ s/&(loz|\#9674);/\\ensuremath\{\\Diamond\}/g; +#Miscellaneous Symbols (extended HTML 4.01) + $result =~ s/&(spades|\#9824);/\\ensuremath\{\\spadesuit\}/g; + $result =~ s/&(clubs|\#9827);/\\ensuremath\{\\clubsuit\}/g; + $result =~ s/&(hearts|\#9829);/\\ensuremath\{\\heartsuit\}/g; + $result =~ s/&(diams|\#9830);/\\ensuremath\{\\diamondsuit\}/g; + return $result; } -sub sequence_content_menu { - my ($key_to,$r) = @_; - 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 @master_seq_view = @master_seq; - for (my $i=0;$i<=$#master_seq_view;$i++) { - $master_seq_view[$i]=~/\/([^\/]+)$/; - $master_seq_view[$i]=$1; - } - $r->print(< - - - - - -

Mark item(s) which you want to print

- -  - -

-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]); - $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]); - $inc++; - } - } - $r->print(< - - - -ENDMENUOUT2 - + return $textwidth,$textheight,$oddoffset,$evenoffset,$topmargin; } -sub problem_choice_menu { - my $r = shift; - 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/; +sub get_name { + my ($uname,$udom)=@_; + if (!defined($uname)) { $uname=$ENV{'user.name'}; } + if (!defined($udom)) { $udom=$ENV{'user.domain'}; } + my $plainname=&Apache::loncommon::plainname($uname,$udom); + if ($plainname=~/^\s*$/) { $plainname=$uname.'@'.$udom; } + $plainname=&Apache::lonxml::latex_special_symbols($plainname,'header'); + return $plainname; +} + +sub get_course { + my $courseidinfo; + if (defined($ENV{'request.course.id'})) { + $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'header'); } - 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'},''); - } else { - @content_directory = &Apache::lonnet::dirlist($subdirtoprint); + return $courseidinfo; +} + +sub page_format_transformation { + my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents,$indexlist) = @_; + my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin); + $assignment=&Apache::lonxml::latex_special_symbols($assignment,'header'); + ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin); + my $name = &get_name(); + my $courseidinfo = &get_course(); + if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } + if ($layout eq 'album') { + my $topmargintoinsert = ''; + if ($topmargin ne '0') {$topmargintoinsert='\setlength{\topmargin}{'.$topmargin.'}';} + $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}} \\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1} /; + } 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 /; + } } - for (my $iy=0;$iy<=$#content_directory;$iy++) { - my @tempo_array = split(/&/,$content_directory[$iy]); - if ($tempo_array[0] =~ m/^[^\.]+\.(problem|exam|quiz|assess|survey|form|library)$/) { - push(@list_of_files,$tempo_array[0]); - } - } - $subdirtoprint =~ s/\/$//; - for (my $i=0;$i<=$#list_of_files;$i++) { - $list_of_files[$i] = $subdirtoprint.'/'.$list_of_files[$i]; - } - $r->print(< - - - -

Mark problems which you want to print

- -  - -

-ENDMENUOUT1 - my $i=0; - foreach my $file (@list_of_files) { - $r->print('
'. - $file); - $i++; - } - $r->print(< - - - - -ENDMENUOUT2 +sub page_cleanup { + my $result = shift; + + $result =~ m/\\end{document}(\d*)$/; + my $number_of_columns = $1; + my $insert = '{'; + for (my $id=1;$id<=$number_of_columns;$id++) { $insert .='l'; } + $insert .= '}'; + $result =~ s/(\\begin{longtable})INSERTTHEHEADOFLONGTABLE\\endfirsthead\\endhead/$1$insert/g; + $result =~ s/&\s*REMOVETHEHEADOFLONGTABLE\\\\/\\\\/g; + return $result,$number_of_columns; } -sub additional_class_menu { - my $r = shift; - $r->print(< - - - - -

Select student(s) whose assignment you want to print

-ENDMENUOUT1 - my %courselist=&Apache::lonnet::dump( - 'classlist', - $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, - $ENV{'course.'.$ENV{'request.course.id'}.'.num'}); - my $now=time; - $r->print(< - function checkall() { - for (i=0; i',$first_comment); + substr($result,$first_comment,$end_comment-$first_comment+3) = ''; + $first_comment = index($result,'',$first_comment); - substr($result,$first_comment,$end_comment-$first_comment+3) = ''; - $first_comment = index($result,'