--- loncom/xml/lonxml.pm 2001/03/26 15:42:05 1.61
+++ loncom/xml/lonxml.pm 2001/08/30 21:19:45 1.128
@@ -5,16 +5,27 @@
# 11/6 Gerd Kortemeyer
# 6/1/1 Gerd Kortemeyer
# 2/21,3/13 Guy
+# 3/29,5/4 Gerd Kortemeyer
+# 5/10 Scott Harrison
+# 5/26 Gerd Kortemeyer
+# 5/27 H. K. Ng
+# 6/2,6/3,6/8,6/9 Gerd Kortemeyer
+# 6/12,6/13 H. K. Ng
+# 6/16 Gerd Kortemeyer
+# 7/27 H. K. Ng
+# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20,8/23,8/24 Gerd Kortemeyer
package Apache::lonxml;
use vars
-qw(@pwd @outputstack $redirection $import @extlinks $metamode);
+qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace);
use strict;
use HTML::TokeParser;
+use HTML::TreeBuilder;
use Safe;
use Safe::Hole;
+use Math::Cephes qw(:trigs :hypers :bessels erf erfc);
+use Math::Random qw(:all);
use Opcode;
-use Apache::Constants qw(:common);
sub register {
my $space;
@@ -26,66 +37,367 @@ sub register {
}
}
-sub printalltags {
- my $temp;
- foreach $temp (sort keys %Apache::lonxml::alltags) {
- &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}");
- }
-}
-use Apache::style;
+use Apache::Constants qw(:common);
use Apache::lontexconvert;
+use Apache::style;
use Apache::run;
use Apache::londefdef;
use Apache::scripttag;
use Apache::edit;
+use Apache::lonnet;
+use Apache::File;
+
#================================================== Main subroutine: xmlparse
+#debugging control, to turn on debugging modify the correct handler
+$Apache::lonxml::debug=0;
+
+#path to the directory containing the file currently being processed
@pwd=();
+
+#these two are used for capturing a subset of the output for later processing,
+#don't touch them directly use &startredirection and &endredirection
@outputstack = ();
$redirection = 0;
+
+#controls wheter the tag actually does
$import = 1;
@extlinks=();
+
+# meta mode is a bit weird only some output is to be turned off
+#
';
+ }
+ }
+ }
+ $discussion.='';
+ }
+ }
+ }
+ return $discussion.'';
+}
+
+sub tokeninputfield {
+ my $defhost=$Apache::lonnet::perlvar{'lonHostID'};
+ $defhost=~tr/a-z/A-Z/;
+ return (<
+ function updatetoken() {
+ var comp=new Array;
+ var barcode=unescape(document.tokeninput.barcode.value);
+ comp=barcode.split('*');
+ if (typeof(comp[0])!="undefined") {
+ document.tokeninput.codeone.value=comp[0];
+ }
+ if (typeof(comp[1])!="undefined") {
+ document.tokeninput.codetwo.value=comp[1];
+ }
+ if (typeof(comp[2])!="undefined") {
+ comp[2]=comp[2].toUpperCase();
+ document.tokeninput.codethree.value=comp[2];
+ }
+ document.tokeninput.barcode.value='';
+ }
+
+
+ENDINPUTFIELD
+}
+
+sub maketoken {
+ my ($symb,$tuname,$tudom,$tcrsid)=@_;
+ unless ($symb) {
+ $symb=&Apache::lonnet::symbread();
+ }
+ unless ($tuname) {
+ $tuname=$ENV{'user.name'};
+ $tudom=$ENV{'user.domain'};
+ $tcrsid=$ENV{'request.course.id'};
+ }
+
+ return &Apache::lonnet::checkout($symb,$tuname,$tudom,$tcrsid);
+}
+
+sub printtokenheader {
+ my ($target,$token,$symb,$tuname,$tudom,$tcrsid)=@_;
+ unless ($token) { return ''; }
+
+ unless ($symb) {
+ $symb=&Apache::lonnet::symbread();
+ }
+ unless ($tuname) {
+ $tuname=$ENV{'user.name'};
+ $tudom=$ENV{'user.domain'};
+ $tcrsid=$ENV{'request.course.id'};
+ }
+
+ my %reply=&Apache::lonnet::get('environment',
+ ['firstname','middlename','lastname','generation'],
+ $tudom,$tuname);
+ my $plainname=$reply{'firstname'}.' '.
+ $reply{'middlename'}.' '.
+ $reply{'lastname'}.' '.
+ $reply{'generation'};
+
+ if ($target eq 'web') {
+ return
+ ''.
+ 'Checked out for '.$plainname.
+ '
User: '.$tuname.' at '.$tudom.
+ '
CourseID: '.$tcrsid.
+ '
DocID: '.$token.
+ '
Time: '.localtime().'
';
+ } else {
+ return $token;
+ }
+}
+
+sub fontsettings() {
+ my $headerstring='';
+ if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) {
+ $headerstring.=
+ '';
+ }
+ return $headerstring;
+}
+
+sub registerurl {
+ my $forcereg=shift;
+ if ($Apache::lonxml::registered && !$forcereg) { return ''; }
+ $Apache::lonxml::registered=1;
+ if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
+ my $hwkadd='';
+ if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+ if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
+ $hwkadd.=(<
+// BEGIN LON-CAPA Internal
+
+ function LONCAPAreg() {
+ menu=window.open("","LONCAPAmenu");
+ menu.clearTimeout(menu.menucltim);
+ menu.currentURL=window.location.pathname;
+ menu.currentStale=0;
+ menu.clearbut(3,1);
+ menu.switchbutton
+ (6,3,'catalog.gif','catalog','info','catalog_info()');
+ menu.switchbutton
+ (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)');
+ menu.switchbutton
+ (8,2,'fdbk.gif','feedback','on this','gopost("/adm/feedback",currentURL)');
+ menu.switchbutton
+ (8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)');
+ menu.switchbutton
+ (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)');
+ menu.switchbutton
+ (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)');
+ menu.switchbutton
+ (9,1,'sbkm.gif','set','bookmark','set_bookmark()');
+ menu.switchbutton
+ (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()');
+ menu.switchbutton
+ (9,3,'anot.gif','anno-','tations','annotate()');
+ $hwkadd
+ }
+
+ function LONCAPAstale() {
+ menu=window.open("","LONCAPAmenu");
+ menu.currentStale=1;
+ menu.switchbutton
+ (3,1,'reload.gif','return','location','go(currentURL)');
+ menu.clearbut(7,1);
+ menu.clearbut(7,2);
+ menu.clearbut(7,3);
+ menu.menucltim=menu.setTimeout(
+ 'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
+ 'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3)',
+ 2000);
+
+ }
+
+// END LON-CAPA Internal
+
+ENDREGTHIS
+
+ } else {
+ return (<
+// BEGIN LON-CAPA Internal
+
+ function LONCAPAreg() {
+ menu=window.open("","LONCAPAmenu");
+ menu.currentStale=1;
+ menu.clearbut(2,1);
+ menu.clearbut(2,3);
+ menu.clearbut(8,1);
+ menu.clearbut(8,2);
+ menu.clearbut(8,3);
+ if (menu.currentURL) {
+ menu.switchbutton
+ (3,1,'reload.gif','return','location','go(currentURL)');
+ } else {
+ menu.clearbut(3,1);
+ }
+ }
+
+ function LONCAPAstale() {
+ }
+
+// END LON-CAPA Internal
+
+ENDDONOTREGTHIS
+
+ }
+}
+
+sub loadevents() {
+ return 'LONCAPAreg();';
+}
+
+sub unloadevents() {
+ return 'LONCAPAstale();';
+}
+
+sub printalltags {
+ my $temp;
+ foreach $temp (sort keys %Apache::lonxml::alltags) {
+ &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}");
+ }
+}
+sub xmlparse {
my ($target,$content_file_string,$safeinit,%style_for_target) = @_;
- if ($target eq 'meta') {
- # meta mode is a bit weird only some output is to be turned off
- #