Diff for /loncom/xml/lonxml.pm between versions 1.325 and 1.333

version 1.325, 2004/06/12 01:09:31 version 1.333, 2004/07/27 23:35:34
Line 389  sub latex_special_symbols { Line 389  sub latex_special_symbols {
     } else {      } else {
  $string=~s/\\/\\ensuremath{\\backslash}/g;   $string=~s/\\/\\ensuremath{\\backslash}/g;
  $string=~s/([^\\]|^)\%/$1\\\%/g;   $string=~s/([^\\]|^)\%/$1\\\%/g;
  $string=~s/([^\\]|^)(\$|_)/$1\\$2/g;   $string=~s/([^\\]|^)\$/$1\\\$/g;
    $string=~s/([^\\])\_/$1\\_/g;
  $string=~s/\$\$/\$\\\$/g;   $string=~s/\$\$/\$\\\$/g;
    $string=~s/\_\_/\_\\\_/g;
  $string=~s/\#\#/\#\\\#/g;   $string=~s/\#\#/\#\\\#/g;
         $string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g;          $string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g;
  $string=~s/(>|<)/\\ensuremath\{$1\}/g; #more or less   $string=~s/(>|<)/\\ensuremath\{$1\}/g; #more or less
Line 398  sub latex_special_symbols { Line 400  sub latex_special_symbols {
  # any & or # leftover should be safe to just escape   # any & or # leftover should be safe to just escape
         $string=~s/([^\\]|^)\&/$1\\\&/g;          $string=~s/([^\\]|^)\&/$1\\\&/g;
         $string=~s/([^\\]|^)\#/$1\\\#/g;          $string=~s/([^\\]|^)\#/$1\\\#/g;
           $string=~s/\|/\$\\mid\$/g;
 #single { or } How to escape?  #single { or } How to escape?
     }      }
     return $string;      return $string;
Line 744  sub init_safespace { Line 747  sub init_safespace {
   
 #need to inspect this class of ops  #need to inspect this class of ops
 # $safeeval->deny(":base_orig");  # $safeeval->deny(":base_orig");
     $safeeval->permit("require");
   $safeinit .= ';$external::target="'.$target.'";';    $safeinit .= ';$external::target="'.$target.'";';
   my $rndseed;    my $rndseed;
   my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();    my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
Line 752  sub init_safespace { Line 756  sub init_safespace {
   &Apache::lonxml::debug("Setting rndseed to $rndseed");    &Apache::lonxml::debug("Setting rndseed to $rndseed");
   &Apache::run::run($safeinit,$safeeval);    &Apache::run::run($safeinit,$safeeval);
   
   my $subroutine=<<'EVALUATESUB';  
 sub __LC_INTERNAL_EVALUATE__ {  
     my ($__LC__a,$__LC__b,$__LC__c)=@_;  
     my $__LC__prefix;  
     while(1){  
  {   
     use strict;  
     no strict "vars";  
     if (eval(defined(eval($__LC__a.$__LC__b)))) {  
  return $__LC__prefix.eval($__LC__a.$__LC__b.$__LC__c);  
     }  
  }  
  $__LC__prefix.=substr($__LC__a,0,1,"");  
  if ($__LC__a!~/^(\$|&|\#)/) { last; }  
     }  
     return $__LC__prefix.$__LC__a.$__LC__b.$__LC__c;  
 }  
 EVALUATESUB  
     $safeeval->permit("require");  
     $safeeval->reval($subroutine);  
     $safeeval->deny("require");  
 }  }
   
 sub default_homework_load {  sub default_homework_load {
Line 787  sub default_homework_load { Line 770  sub default_homework_load {
     }      }
 }  }
   
   my $metamode_was;
 sub startredirection {  sub startredirection {
   $Apache::lonxml::redirection++;      if (!$Apache::lonxml::redirection) {
   push (@Apache::lonxml::outputstack, '');   $metamode_was=$Apache::lonxml::metamode;
       }
       $Apache::lonxml::metamode=0;
       $Apache::lonxml::redirection++;
       push (@Apache::lonxml::outputstack, '');
 }  }
   
 sub endredirection {  sub endredirection {
   if (!$Apache::lonxml::redirection) {      if (!$Apache::lonxml::redirection) {
     &Apache::lonxml::error("Endredirection was called, before a startredirection, perhaps you have unbalanced tags. Some debuging information:".join ":",caller);   &Apache::lonxml::error("Endredirection was called, before a startredirection, perhaps you have unbalanced tags. Some debuging information:".join ":",caller);
     return '';   return '';
   }      }
   $Apache::lonxml::redirection--;      $Apache::lonxml::redirection--;
   pop @Apache::lonxml::outputstack;      if (!$Apache::lonxml::redirection) {
    $Apache::lonxml::metamode=$metamode_was;
       }
       pop @Apache::lonxml::outputstack;
 }  }
   
 sub end_tag {  sub end_tag {
Line 844  sub decreasedepth { Line 835  sub decreasedepth {
   
 sub get_all_text_unbalanced {  sub get_all_text_unbalanced {
 #there is a copy of this in lonpublisher.pm  #there is a copy of this in lonpublisher.pm
  my($tag,$pars)= @_;      my($tag,$pars)= @_;
  my $token;      my $token;
  my $result='';      my $result='';
  $tag='<'.$tag.'>';      $tag='<'.$tag.'>';
  while ($token = $$pars[-1]->get_token) {      while ($token = $$pars[-1]->get_token) {
    if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) {   if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) {
      $result.=$token->[1];      $result.=$token->[1];
    } elsif ($token->[0] eq 'PI') {   } elsif ($token->[0] eq 'PI') {
      $result.=$token->[2];      $result.=$token->[2];
    } elsif ($token->[0] eq 'S') {   } elsif ($token->[0] eq 'S') {
      $result.=$token->[4];      $result.=$token->[4];
    } elsif ($token->[0] eq 'E')  {   } elsif ($token->[0] eq 'E')  {
      $result.=$token->[2];      $result.=$token->[2];
    }   }
    if ($result =~ /(.*)\Q$tag\E(.*)/is) {   if ($result =~ /\Q$tag\E/is) {
      &Apache::lonxml::debug('Got a winner with leftovers ::'.$2);      ($result,my $redo)=$result =~ /(.*)\Q$tag\E(.*)/is;
      &Apache::lonxml::debug('Result is :'.$1);      #&Apache::lonxml::debug('Got a winner with leftovers ::'.$2);
      $result=$1;      #&Apache::lonxml::debug('Result is :'.$1);
      my $redo=$tag.$2;      $redo=$tag.$redo;
      &Apache::lonxml::newparser($pars,\$redo);      &Apache::lonxml::newparser($pars,\$redo);
      last;      last;
    }   }
  }      }
  return $result      return $result
 }  }
   
 sub increment_counter {  sub increment_counter {
Line 1136  sub inserteditinfo { Line 1127  sub inserteditinfo {
       my $initialize='';        my $initialize='';
       if ($filetype eq 'html') {        if ($filetype eq 'html') {
   my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();    my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();
   $initialize=&Apache::lonhtmlcommon::htmlareaheaders().(<<FULLPAGE);    $initialize=&Apache::lonhtmlcommon::htmlareaheaders().
         &Apache::lonhtmlcommon::spellheader().(<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
 $addbuttons  $addbuttons
   
Line 1166  $cleanbut Line 1158  $cleanbut
 <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />  <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />
 <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />  <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
 BUTTONS  BUTTONS
         $buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');
       my $editfooter=(<<ENDFOOTER);        my $editfooter=(<<ENDFOOTER);
 $initialize  $initialize
 <hr />  <hr />
 <a name="editsection" />  <a name="editsection" />
 <form method="post">  <form method="post" name="xmledit">
 $xml_help  $xml_help
 <input type="hidden" name="editmode" value="$lt{'ed'}" />  <input type="hidden" name="editmode" value="$lt{'ed'}" />
 $buttons<br />  $buttons<br />
Line 1334  sub debug { Line 1327  sub debug {
  my $request=$Apache::lonxml::request;   my $request=$Apache::lonxml::request;
  if (!$request) { $request=Apache->request; }   if (!$request) { $request=Apache->request; }
  $request->print('<font size="-2"><pre>DEBUG:'.&HTML::Entities::encode($_[0],'<>&"')."</pre></font>\n");   $request->print('<font size="-2"><pre>DEBUG:'.&HTML::Entities::encode($_[0],'<>&"')."</pre></font>\n");
   # &Apache::lonnet::logthis($_[0]);
     }      }
 }  }
   

Removed from v.1.325  
changed lines
  Added in v.1.333


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>