--- loncom/xml/lonxml.pm 2002/11/07 19:33:52 1.213
+++ loncom/xml/lonxml.pm 2003/01/15 23:59:27 1.225
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.213 2002/11/07 19:33:52 albertel Exp $
+# $Id: lonxml.pm,v 1.225 2003/01/15 23:59:27 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -101,6 +101,7 @@ use Apache::File();
use Apache::loncommon();
use Apache::lonfeedback();
use Apache::lonmsg();
+use Apache::loncacc();
#================================================== Main subroutine: xmlparse
#debugging control, to turn on debugging modify the correct handler
@@ -144,8 +145,8 @@ $Apache::lonxml::registered=0;
# a pointer the the Apache request object
$Apache::lonxml::request='';
-# a problem number counter, and check on hether it is used
-$Apache::lonxml::counter=0;
+# a problem number counter, and check on ether it is used
+$Apache::lonxml::counter=1;
$Apache::lonxml::counter_changed=0;
#internal check on whether to look at style defs
@@ -191,7 +192,8 @@ sub xmlend {
my $idx;
for ($idx=1;$idx<=$contrib{'version'};$idx++) {
my $hidden=($contrib{'hidden'}=~/\.$idx\./);
- unless (($hidden) && (!$seeid)) {
+ my $deleted=($contrib{'deleted'}=~/\.$idx\./);
+ unless ((($hidden) && (!$seeid)) || ($deleted)) {
my $message=$contrib{$idx.':message'};
$message=~s/\n/\
/g;
$message=&Apache::lontexconvert::msgtexconverted($message);
@@ -225,8 +227,10 @@ sub xmlend {
} else {
$sender.=' Hide';
- }
- }
+ }
+ $sender.=' Delete';
+ }
} else {
if ($screenname) {
$sender=''.$screenname.'';
@@ -351,7 +355,7 @@ sub printtokenheader {
if ($target eq 'web') {
my %idhash=&Apache::lonnet::idrget($tudom,($tuname));
return
- ''.
+ ''.
'Checked out for '.$plainname.
'
User: '.$tuname.' at '.$tudom.
'
ID: '.$idhash{$tuname}.
@@ -373,6 +377,18 @@ sub fontsettings() {
return $headerstring;
}
+
+##
+## switchmenu - modeled on lonmenu::switchmenu, but better.
+## Helper function for registerurl
+##
+sub switchmenu {
+ my ($row,$col,$imgsrc,$texttop,$textbot,$action,$description)=@_;
+ return(<
// BEGIN LON-CAPA Internal
function LONCAPAreg() {
- menu=window.open("$nothing","LONCAPAmenu","",false);
+ menu=$reopen;
menu.clearTimeout(menu.menucltim);
$timesync
$newmail
menu.currentURL=window.location.pathname;
menu.reloadURL=window.location.pathname;
+ menu.currentSymb="$ENV{'request.symb'}";
+ menu.reloadSymb="$ENV{'request.symb'}";
menu.currentStale=0;
menu.clearbut(3,1);
menu.switchbutton
- (6,3,'catalog.gif','catalog','info','catalog_info()');
+ (6,3,'catalog.gif','catalog','info','catalog_info()','Show catalog information');
menu.switchbutton
- (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)');
+ (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)','Provide my evaluation of this resource');
menu.switchbutton
- (8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)');
+ (8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)','Provide feedback messages or contribute to the course discussion about this resource');
menu.switchbutton
- (8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)');
+ (8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)','Prepare a printable document');
menu.switchbutton
- (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)');
+ (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)','Go to the previous resource in the course sequence');
menu.switchbutton
- (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)');
+ (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)','Go to the next resource in the course sequence');
menu.switchbutton
- (9,1,'sbkm.gif','set','bookmark','set_bookmark()');
+ (9,1,'sbkm.gif','set','bookmark','set_bookmark()','Set a bookmark for this resource');
menu.switchbutton
- (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()');
+ (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()','Use or edit my bookmark collection');
menu.switchbutton
- (9,3,'anot.gif','anno-','tations','annotate()');
+ (9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource');
$hwkadd
+ $editbutton
}
function LONCAPAstale() {
- menu=window.open("$nothing","LONCAPAmenu","",false);
+ menu=$reopen
menu.currentStale=1;
if (menu.reloadURL!='' && menu.reloadURL!= null) {
menu.switchbutton
- (3,1,'reload.gif','return','location','go(reloadURL)');
+ (3,1,'reload.gif','return','location','go(reloadURL)','Return to the last known location in the course sequence');
}
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)',
+ 'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3);clearbut(6,1)',
2000);
}
@@ -481,7 +558,7 @@ ENDREGTHIS
// BEGIN LON-CAPA Internal
function LONCAPAreg() {
- menu=window.open("$nothing","LONCAPAmenu","",false);
+ menu=$reopen
$timesync
menu.currentStale=1;
menu.clearbut(2,1);
@@ -593,7 +670,7 @@ sub htmlclean {
sub latex_special_symbols {
my ($current_token,$stack,$parstack)=@_;
- $current_token=~s/\\/\\char92 /g;
+ $current_token=~s/\\ /\\char92 /g;
$current_token=~s/\^/\\char94 /g;
$current_token=~s/\~/\\char126 /g;
$current_token=~s/(&[^a-z\#])/\\$1/g;
@@ -618,8 +695,7 @@ sub inner_xmlparse {
if ($metamode<1) {
my $text=$token->[1];
if ($token->[0] eq 'C' && $target eq 'tex') {
- $text = '%'.$text;
- $text =~ s/[\n\r]//g;
+ $text = '%'.$text."\n";
}
$result.=$text;
}
@@ -697,7 +773,7 @@ sub inner_xmlparse {
if ($token->[0] eq 'E') {
&end_tag($stack,$parstack,$token);
}
- }
+ }
if ($#$pars > -1) {
pop @$pars;
pop @Apache::lonxml::pwd;
@@ -711,7 +787,7 @@ sub inner_xmlparse {
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) {
$finaloutput=&afterburn($finaloutput);
- }
+ }
return $finaloutput;
}
@@ -739,13 +815,13 @@ sub callsub {
}
if (!$deleted) {
if ($space) {
- &Apache::lonxml::debug("Calling sub $sub in $space $metamode");
+ #&Apache::lonxml::debug("Calling sub $sub in $space $metamode");
$sub1="$space\:\:$sub";
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
$parstack,$parser,$safeeval,
$style);
} else {
- &Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
+ #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
if ($metamode <1) {
if (defined($token->[4]) && ($metamode < 1)) {
$currentstring = $token->[4];
@@ -757,7 +833,7 @@ sub callsub {
# &Apache::lonxml::debug("nodefalt:$nodefault:");
if ($currentstring eq '' && $nodefault eq '') {
if ($target eq 'edit') {
- &Apache::lonxml::debug("doing default edit for $token->[1]");
+ #&Apache::lonxml::debug("doing default edit for $token->[1]");
if ($token->[0] eq 'S') {
$currentstring = &Apache::edit::tag_start($target,$token);
} elsif ($token->[0] eq 'E') {
@@ -858,6 +934,37 @@ sub init_safespace {
$safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1');
$safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn');
$safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv');
+
+ $safehole->wrap(\&Math::Cephes::bdtr ,$safeeval,'&bdtr' );
+ $safehole->wrap(\&Math::Cephes::bdtrc ,$safeeval,'&bdtrc' );
+ $safehole->wrap(\&Math::Cephes::bdtri ,$safeeval,'&bdtri' );
+ $safehole->wrap(\&Math::Cephes::btdtr ,$safeeval,'&btdtr' );
+ $safehole->wrap(\&Math::Cephes::chdtr ,$safeeval,'&chdtr' );
+ $safehole->wrap(\&Math::Cephes::chdtrc,$safeeval,'&chdtrc');
+ $safehole->wrap(\&Math::Cephes::chdtri,$safeeval,'&chdtri');
+ $safehole->wrap(\&Math::Cephes::fdtr ,$safeeval,'&fdtr' );
+ $safehole->wrap(\&Math::Cephes::fdtrc ,$safeeval,'&fdtrc' );
+ $safehole->wrap(\&Math::Cephes::fdtri ,$safeeval,'&fdtri' );
+ $safehole->wrap(\&Math::Cephes::gdtr ,$safeeval,'&gdtr' );
+ $safehole->wrap(\&Math::Cephes::gdtrc ,$safeeval,'&gdtrc' );
+ $safehole->wrap(\&Math::Cephes::nbdtr ,$safeeval,'&nbdtr' );
+ $safehole->wrap(\&Math::Cephes::nbdtrc,$safeeval,'&nbdtrc');
+ $safehole->wrap(\&Math::Cephes::nbdtri,$safeeval,'&nbdtri');
+ $safehole->wrap(\&Math::Cephes::ndtr ,$safeeval,'&ndtr' );
+ $safehole->wrap(\&Math::Cephes::ndtri ,$safeeval,'&ndtri' );
+ $safehole->wrap(\&Math::Cephes::pdtr ,$safeeval,'&pdtr' );
+ $safehole->wrap(\&Math::Cephes::pdtrc ,$safeeval,'&pdtrc' );
+ $safehole->wrap(\&Math::Cephes::pdtri ,$safeeval,'&pdtri' );
+ $safehole->wrap(\&Math::Cephes::stdtr ,$safeeval,'&stdtr' );
+ $safehole->wrap(\&Math::Cephes::stdtri,$safeeval,'&stdtri');
+
+# $safehole->wrap(\&Math::Cephes::new_fract,$safeeval,'&new_fract');
+# $safehole->wrap(\&Math::Cephes::radd,$safeeval,'&radd');
+# $safehole->wrap(\&Math::Cephes::rsub,$safeeval,'&rsub');
+# $safehole->wrap(\&Math::Cephes::rmul,$safeeval,'&rmul');
+# $safehole->wrap(\&Math::Cephes::rdiv,$safeeval,'&rdiv');
+# $safehole->wrap(\&Math::Cephes::euclid,$safeeval,'&euclid');
+
$safehole->wrap(\&Math::Random::random_beta,$safeeval,'&math_random_beta');
$safehole->wrap(\&Math::Random::random_chi_square,$safeeval,'&math_random_chi_square');
$safehole->wrap(\&Math::Random::random_exponential,$safeeval,'&math_random_exponential');
@@ -1008,7 +1115,9 @@ sub store_counter {
sub get_all_text {
my($tag,$pars)= @_;
&Apache::lonxml::debug("Got a ".ref($pars));
+ my $gotfullstack=1;
if (ref($pars) ne 'ARRAY') {
+ $gotfullstack=0;
$pars=[$pars];
}
my $depth=0;
@@ -1017,7 +1126,8 @@ sub get_all_text {
if ( $tag =~ m:^/: ) {
my $tag=substr($tag,1);
#&Apache::lonxml::debug("have:$tag:");
- while (($depth >=0) && ($#$pars > -1)) {
+ my $top_empty=0;
+ while (($depth >=0) && ($#$pars > -1) && (!$top_empty)) {
while (($depth >=0) && ($token = $$pars[-1]->get_token)) {
#&Apache::lonxml::debug("e token:$token->[0]:$depth:$token->[1]:".$#$pars.":".$#Apache::lonxml::pwd);
if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) {
@@ -1039,6 +1149,16 @@ sub get_all_text {
pop(@$pars);
pop(@Apache::lonxml::pwd);
}
+ if (($depth >=0) && ($#$pars == 0) ) { &debug("here4");$top_empty=1; }
+ }
+ if ($top_empty && $depth >= 0) {
+ #never found the end tag ran out of text, throw error send back blank
+ &error('Never found end tag for <'.$tag.'>');
+ if ($gotfullstack) {
+ my $newstring=''.$tag.'>'.$result;
+ &Apache::lonxml::newparser($pars,\$newstring);
+ }
+ $result='';
}
} else {
while ($#$pars > -1) {