--- loncom/xml/lonxml.pm 2003/04/03 22:25:49 1.245 +++ loncom/xml/lonxml.pm 2003/05/21 20:41:55 1.255 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.245 2003/04/03 22:25:49 albertel Exp $ +# $Id: lonxml.pm,v 1.255 2003/05/21 20:41:55 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -380,8 +380,11 @@ sub printtokenheader { sub fontsettings() { my $headerstring=''; if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) { - $headerstring.= - ''; + $headerstring.= + ''; + } elsif (!$ENV{'browser.mathml'}) { + $headerstring.= + ''; } return $headerstring; } @@ -418,8 +421,7 @@ sub xmlparse { } } } - - #&printalltags(); +#&printalltags(); my @pars = (); my $pwd=$ENV{'request.filename'}; $pwd =~ s:/[^/]*$::; @@ -438,6 +440,7 @@ sub xmlparse { my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars, $safeeval,\%style_for_target); + if ($ENV{'request.uri'}) { &writeallows($ENV{'request.uri'}); } @@ -475,7 +478,7 @@ sub latex_special_symbols { $current_token=~s/\\ /\\char92 /g; $current_token=~s/\^/\\char94 /g; $current_token=~s/\~/\\char126 /g; - $current_token=~s/(&[^a-z\#])/\\$1/g; + $current_token=~s/(&[^A-Za-z\#])/\\$1/g; $current_token=~s/([^&])\#/$1\\#/g; $current_token=~s/(\$|_|{|})/\\$1/g; $current_token=~s/\\char92 /\\texttt{\\char92}/g; @@ -517,6 +520,12 @@ sub inner_xmlparse { $Apache::lonxml::usestyle=0; my $string=$$style_for_target{$token->[1]}. ''; +##### LETS TRY VARIABLE INTERPOLATION (it may be stupid but at least it works) + my %localhash=%{$token->[2]}; + foreach my $localkey (keys %localhash) { + $string=~s/\$$localkey/$localhash{$localkey}/g; + } +##### &Apache::lonxml::newparser($pars,\$string); } else { $result = &callsub("start_$token->[1]", $target, $token, $stack, @@ -540,6 +549,14 @@ sub inner_xmlparse { $Apache::lonxml::usestyle=0; my $string=$$style_for_target{'/'.$token->[1]}. ''; +##### LETS TRY VARIABLE INTERPOLATION (it may be stupid but at least it works) + my @localarray = split /;/, $$parstack[-1]; + foreach my $localelement (@localarray) { + $localelement=~/my\s+\$([^=]+)=\"(.*)\"$/; + my ($whatchange,$tochange) = ($1,$2); + $string=~s/\$$whatchange/$tochange/g; + } +##### &Apache::lonxml::newparser($pars,\$string); } else { $result = &callsub("end_$token->[1]", $target, $token, $stack, @@ -557,9 +574,10 @@ sub inner_xmlparse { } } if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) { - if ($target eq 'tex') { - $result=&latex_special_symbols($result,$stack,$parstack); - } + #Style file definitions should be correct + if ($target eq 'tex' && ($Apache::lonxml::usestyle)) { + $result=&latex_special_symbols($result,$stack,$parstack); + } } # Encode any high ASCII characters @@ -718,6 +736,7 @@ sub init_safespace { $safeeval->permit("sort"); $safeeval->deny(":base_io"); $safehole->wrap(\&Apache::scripttag::xmlparse,$safeeval,'&xmlparse'); + $safehole->wrap(\&Apache::outputtags::multipart,$safeeval,'&multipart'); $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin'); @@ -799,6 +818,7 @@ sub init_safespace { my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); $rndseed=&Apache::lonnet::rndseed($symb,$courseid,$domain,$name); $safeinit .= ';$external::randomseed='.$rndseed.';'; + &Apache::lonxml::debug("Setting rndseed to $rndseed"); &Apache::run::run($safeinit,$safeeval); } @@ -898,18 +918,23 @@ sub get_all_text_unbalanced { } sub increment_counter { - $Apache::lonxml::counter++; + my ($increment) = @_; + if (defined($increment) && $increment gt 0) { + $Apache::lonxml::counter+=$increment; + } else { + $Apache::lonxml::counter++; + } $Apache::lonxml::counter_changed=1; } sub init_counter { if (defined($ENV{'form.counter'})) { $Apache::lonxml::counter=$ENV{'form.counter'}; + $Apache::lonxml::counter_changed=0; } else { $Apache::lonxml::counter=1; - &store_counter(); + $Apache::lonxml::counter_changed=1; } - $Apache::lonxml::counter_changed=0; } sub store_counter { @@ -1118,6 +1143,7 @@ sub inserteditinfo { &Apache::loncommon::help_open_topic("Other_Symbols",'Other Symbols', undef,undef,600) .''; + my $titledisplay=&display_title(); my $buttons=(< @@ -1135,6 +1161,7 @@ $buttons

$buttons
+$titledisplay ENDFOOTER # $result=~s/(\]*\>)/$1$editheader/is; $result=~s/(\<\/body\>)/$editfooter/is; @@ -1169,37 +1196,37 @@ sub get_target { } sub handler { - my $request=shift; - - my $target=&get_target(); - - $Apache::lonxml::debug=0; - - if ($ENV{'browser.mathml'}) { - $request->content_type('text/xml'); - } else { - $request->content_type('text/html'); - } - &Apache::loncommon::no_cache($request); - $request->send_http_header; - - return OK if $request->header_only; + my $request=shift; + + my $target=&get_target(); + + $Apache::lonxml::debug=0; + + if ($ENV{'browser.mathml'}) { + $request->content_type('text/xml'); + } else { + $request->content_type('text/html'); + } + &Apache::loncommon::no_cache($request); + $request->send_http_header; + + return OK if $request->header_only; - my $file=&Apache::lonnet::filelocation("",$request->uri); + my $file=&Apache::lonnet::filelocation("",$request->uri); # # Edit action? Save file. # - unless ($ENV{'request.state'} eq 'published') { - if (($ENV{'form.savethisfile'}) || ($ENV{'form.attemptclean'})) { - &storefile($file,$ENV{'form.filecont'}); - } - } - my %mystyle; - my $result = ''; - my $filecontents=&Apache::lonnet::getfile($file); - if ($filecontents eq -1) { - $result=(< File not found @@ -1210,40 +1237,54 @@ sub handler { ENDNOTFOUND $filecontents=''; - if ($ENV{'request.state'} ne 'published') { - $filecontents=&createnewhtml(); - $ENV{'form.editmode'}='Edit'; #force edit mode - } - } else { - unless ($ENV{'request.state'} eq 'published') { - if ($ENV{'form.attemptclean'}) { - $filecontents=&htmlclean($filecontents,1); - } - } - if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) { - $result = &Apache::lonxml::xmlparse($request,$target,$filecontents, - '',%mystyle); + if ($ENV{'request.state'} ne 'published') { + $filecontents=&createnewhtml(); + $ENV{'form.editmode'}='Edit'; #force edit mode + } + } else { + unless ($ENV{'request.state'} eq 'published') { + if ($ENV{'form.attemptclean'}) { + $filecontents=&htmlclean($filecontents,1); + } + } + if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) { + $result = &Apache::lonxml::xmlparse($request,$target,$filecontents, + '',%mystyle); + } } - } - + # # Edit action? Insert editing commands # - unless ($ENV{'request.state'} eq 'published') { - if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) { - my $displayfile=$request->uri; - $displayfile=~s/^\/[^\/]*//; - $result='

'.$displayfile. - '

'; - $result=&inserteditinfo($result,$filecontents); + unless ($ENV{'request.state'} eq 'published') { + if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) { + my $displayfile=$request->uri; + $displayfile=~s/^\/[^\/]*//; + $result='

'.$displayfile. + '

'; + $result=&inserteditinfo($result,$filecontents); + } } - } - - writeallows($request->uri); - - $request->print($result); - - return OK; + + writeallows($request->uri); + + + $request->print($result); + + return OK; +} + +sub display_title { + my $result; + if ($ENV{'request.state'} eq 'construct') { + my $title=&Apache::lonnet::gettitle(); + if (!defined($title) || $title eq '') { + $title = $ENV{'request.filename'}; + $title = substr($title, rindex($title, '/') + 1); + } + $result = ""; + } + return $result; } sub debug {