Diff for /loncom/xml/lonxml.pm between versions 1.91 and 1.100

version 1.91, 2001/06/12 21:10:22 version 1.100, 2001/07/05 15:53:09
Line 10 Line 10
 # 5/26 Gerd Kortemeyer  # 5/26 Gerd Kortemeyer
 # 5/27 H. K. Ng  # 5/27 H. K. Ng
 # 6/2,6/3,6/8,6/9 Gerd Kortemeyer  # 6/2,6/3,6/8,6/9 Gerd Kortemeyer
   # 6/12,6/13 H. K. Ng
   # 6/16 Gerd Kortemeyer
   
 package Apache::lonxml;   package Apache::lonxml; 
 use vars   use vars 
Line 68  $evaluate = 1; Line 70  $evaluate = 1;
 # data structure for eidt mode, determines what tags can go into what other tags  # data structure for eidt mode, determines what tags can go into what other tags
 %insertlist=();  %insertlist=();
   
 #stores the list of active tag namespaces  # stores the list of active tag namespaces
 @namespace=();  @namespace=();
   
   # has the dynamic menu been updated to know about this resource
   $Apache::lonxml::registered=0;
   
 sub xmlbegin {  sub xmlbegin {
   my $output='';    my $output='';
   if ($ENV{'browser.mathml'}) {    if ($ENV{'browser.mathml'}) {
Line 100  sub fontsettings() { Line 105  sub fontsettings() {
 }  }
   
 sub registerurl {  sub registerurl {
     if ($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) {      my $forcereg=shift;
       if ($Apache::lonxml::registered) { return ''; }
       if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
         my $hwkadd='';          my $hwkadd='';
         if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {          if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
     if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {      if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
Line 146  ENDPARM Line 153  ENDPARM
        (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)');         (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)');
           menu.switchbutton            menu.switchbutton
      (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)');       (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            $hwkadd
     }      }
   
Line 158  ENDPARM Line 171  ENDPARM
           menu.clearbut(7,2);            menu.clearbut(7,2);
           menu.clearbut(7,3);            menu.clearbut(7,3);
           menu.menucltim=menu.setTimeout(            menu.menucltim=menu.setTimeout(
  'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);',   'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
    'clearbut(9,1);clearbut(9,2);clearbut(9,3);',
   2000);    2000);
   
       }        }
Line 215  sub printalltags { Line 229  sub printalltags {
 }  }
   
 sub xmlparse {  sub xmlparse {
 #    $Apache::lonxml::debug=1;  
  my ($target,$content_file_string,$safeinit,%style_for_target) = @_;   my ($target,$content_file_string,$safeinit,%style_for_target) = @_;
  if ($target eq 'meta') {  
    $Apache::lonxml::redirection = 0;   &setup_globals($target);
    $Apache::lonxml::metamode = 1;  
    $Apache::lonxml::evaluate = 1;  
    $Apache::lonxml::import = 0;  
  } elsif ($target eq 'grade') {  
    &startredirection;  
    $Apache::lonxml::metamode = 0;  
    $Apache::lonxml::evaluate = 1;  
    $Apache::lonxml::import = 1;  
  } elsif ($target eq 'modified') {  
    $Apache::lonxml::redirection = 0;  
    $Apache::lonxml::metamode = 0;  
    $Apache::lonxml::evaluate = 0;  
    $Apache::lonxml::import = 0;  
  } else {  
    $Apache::lonxml::redirection = 0;  
    $Apache::lonxml::metamode = 0;  
    $Apache::lonxml::evaluate = 1;  
    $Apache::lonxml::import = 1;  
  }  
  #&printalltags();   #&printalltags();
  my @pars = ();   my @pars = ();
  @Apache::lonxml::pwd=();   @Apache::lonxml::pwd=();
Line 289  sub xmlparse { Line 283  sub xmlparse {
        #clear out any tags that didn't end         #clear out any tags that didn't end
        while ($token->[1] ne $stack[$#stack] && ($#stack > -1)) {         while ($token->[1] ne $stack[$#stack] && ($#stack > -1)) {
  &Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']");   &Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']");
  pop @stack;pop @parstack;&decreasedepth($token);   &end_tag(\@stack,\@parstack,$token);
        }         }
                 
        if (exists $style_for_target{'/'."$token->[1]"}) {         if (exists $style_for_target{'/'."$token->[1]"}) {
Line 326  sub xmlparse { Line 320  sub xmlparse {
        $result = '';         $result = '';
      }        } 
      if ($token->[0] eq 'E') {        if ($token->[0] eq 'E') { 
        pop @stack;pop @parstack;&decreasedepth($token);         &end_tag(\@stack,\@parstack,$token);
      }       }
    }     }
    pop @pars;     pop @pars;
Line 374  sub recurse { Line 368  sub recurse {
  while ($tokenpat->[1] ne $innerstack[$#innerstack]    while ($tokenpat->[1] ne $innerstack[$#innerstack] 
        && ($#innerstack > -1)) {         && ($#innerstack > -1)) {
   &Apache::lonxml::warning("Unbalanced tags in resource $innerstack['-1']");    &Apache::lonxml::warning("Unbalanced tags in resource $innerstack['-1']");
   pop @innerstack;pop @innerparstack;&decreasedepth($tokenpat);    &end_tag(\@innerstack,\@innerparstack,$tokenpat);
  }   }
  $partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat,   $partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat,
        \@innerstack, \@innerparstack, \@pat,         \@innerstack, \@innerparstack, \@pat,
Line 417  sub callsub { Line 411  sub callsub {
   {    {
     my $sub1;      my $sub1;
     no strict 'refs';      no strict 'refs';
     if ($target eq 'edit' && $token->[0] eq 'S') {  
       $currentstring = &Apache::edit::tag_start($target,$token,$tagstack,  
  $parstack,$parser,  
  $safeeval,$style);  
     }  
     my $tag=$token->[1];      my $tag=$token->[1];
     my $space=$Apache::lonxml::alltags{$tag};      my $space=$Apache::lonxml::alltags{$tag};
     if (!$space) {      if (!$space) {
Line 429  sub callsub { Line 418  sub callsub {
  $sub=~tr/A-Z/a-z/;   $sub=~tr/A-Z/a-z/;
  $space=$Apache::lonxml::alltags{$tag}   $space=$Apache::lonxml::alltags{$tag}
     }      }
     if ($space) {  
       #&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n");      my $deleted=0;
       $sub1="$space\:\:$sub";      $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
       $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);      if (($token->[0] eq 'S') && ($target eq 'modified')) {
       ($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,        $deleted=&Apache::edit::handle_delete($space,$target,$token,$tagstack,
    $parstack,$parser,$safeeval,       $parstack,$parser,$safeeval,
    $style);       $style);
     } else {      }
       #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n");      if (!$deleted) {
       if ($metamode <1) {        if ($space) {
  if (defined($token->[4]) && ($metamode < 1)) {   #&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n");
   $currentstring = $token->[4];   $sub1="$space\:\:$sub";
  } else {   ($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
   $currentstring = $token->[2];       $parstack,$parser,$safeeval,
        $style);
         } else {
    #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n");
    if ($metamode <1) {
     if (defined($token->[4]) && ($metamode < 1)) {
       $currentstring = $token->[4];
     } else {
       $currentstring = $token->[2];
     }
  }   }
       }        }
     }        #    &Apache::lonxml::debug("nodefalt:$nodefault:");
 #    &Apache::lonxml::debug("nodefalt:$nodefault:");        if ($currentstring eq '' && $nodefault eq '') {
     if ($currentstring eq '' && $nodefault eq '') {   if ($target eq 'edit') {
       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') {
  if ($token->[0] eq 'S') {      $currentstring = &Apache::edit::tag_start($target,$token);
   $currentstring = &Apache::edit::tag_start($target,$token);    } elsif ($token->[0] eq 'E') {
  } elsif ($token->[0] eq 'E') {      $currentstring = &Apache::edit::tag_end($target,$token);
   $currentstring = &Apache::edit::tag_end($target,$token);    }
  }   } elsif ($target eq 'modified') {
       } elsif ($target eq 'modified') {    if ($token->[0] eq 'S') {
  if ($token->[0] eq 'S') {      $currentstring = $token->[4];
   $currentstring = $token->[4];      $currentstring.=&Apache::edit::handle_insert();
   $currentstring.=&Apache::edit::handle_insert();    } else {
  } else {      $currentstring = $token->[2];
   $currentstring = $token->[2];    }
  }   }
       }        }
     }      }
Line 469  sub callsub { Line 467  sub callsub {
   return $currentstring;    return $currentstring;
 }  }
   
   sub setup_globals {
     my ($target)=@_;
     $Apache::lonxml::registered = 0;
     if ($target eq 'meta') {
       $Apache::lonxml::redirection = 0;
       $Apache::lonxml::metamode = 1;
       $Apache::lonxml::evaluate = 1;
       $Apache::lonxml::import = 0;
     } elsif ($target eq 'grade') {
       &startredirection;
       $Apache::lonxml::metamode = 0;
       $Apache::lonxml::evaluate = 1;
       $Apache::lonxml::import = 1;
     } elsif ($target eq 'modified') {
       $Apache::lonxml::redirection = 0;
       $Apache::lonxml::metamode = 0;
       $Apache::lonxml::evaluate = 0;
       $Apache::lonxml::import = 0;
     } elsif ($target eq 'edit') {
       $Apache::lonxml::redirection = 0;
       $Apache::lonxml::metamode = 0;
       $Apache::lonxml::evaluate = 0;
       $Apache::lonxml::import = 0;
     } else {
       $Apache::lonxml::redirection = 0;
       $Apache::lonxml::metamode = 0;
       $Apache::lonxml::evaluate = 1;
       $Apache::lonxml::import = 1;
     }
   }
   
 sub init_safespace {  sub init_safespace {
   my ($target,$safeeval,$safehole,$safeinit) = @_;    my ($target,$safeeval,$safehole,$safeinit) = @_;
   $safeeval->permit("entereval");    $safeeval->permit("entereval");
Line 507  sub init_safespace { Line 536  sub init_safespace {
   $safehole->wrap(\&Math::Random::random_noncentral_f,$safeeval,'&math_random_noncentral_f');    $safehole->wrap(\&Math::Random::random_noncentral_f,$safeeval,'&math_random_noncentral_f');
   $safehole->wrap(\&Math::Random::random_normal,$safeeval,'&math_random_normal');    $safehole->wrap(\&Math::Random::random_normal,$safeeval,'&math_random_normal');
   $safehole->wrap(\&Math::Random::random_permutation,$safeeval,'&math_random_permutation');    $safehole->wrap(\&Math::Random::random_permutation,$safeeval,'&math_random_permutation');
 #  $safehole->wrap(\&Math::Random::random_permuted_index,$safeeval,'&math_random_permuted_index');    $safehole->wrap(\&Math::Random::random_permuted_index,$safeeval,'&math_random_permuted_index');
   $safehole->wrap(\&Math::Random::random_uniform,$safeeval,'&math_random_uniform');    $safehole->wrap(\&Math::Random::random_uniform,$safeeval,'&math_random_uniform');
   $safehole->wrap(\&Math::Random::random_poisson,$safeeval,'&math_random_poisson');    $safehole->wrap(\&Math::Random::random_poisson,$safeeval,'&math_random_poisson');
   $safehole->wrap(\&Math::Random::random_uniform_integer,$safeeval,'&math_random_uniform_integer');    $safehole->wrap(\&Math::Random::random_uniform_integer,$safeeval,'&math_random_uniform_integer');
Line 539  sub endredirection { Line 568  sub endredirection {
   pop @Apache::lonxml::outputstack;    pop @Apache::lonxml::outputstack;
 }  }
   
   sub end_tag {
     my ($tagstack,$parstack,$token)=@_;
     pop(@$tagstack);
     pop(@$parstack);
     &decreasedepth($token);
   }
   
 sub initdepth {  sub initdepth {
   @Apache::lonxml::depthcounter=();    @Apache::lonxml::depthcounter=();
   $Apache::lonxml::depth=-1;    $Apache::lonxml::depth=-1;
Line 806  ENDNOTFOUND Line 842  ENDNOTFOUND
     
 sub debug {  sub debug {
   if ($Apache::lonxml::debug eq 1) {    if ($Apache::lonxml::debug eq 1) {
     print "DEBUG:".$_[0]."<br />\n";      print("DEBUG:".$_[0]."<br />\n");
   }    }
 }  }
   
Line 855  sub register_insert { Line 891  sub register_insert {
     my $line = $data[$i];      my $line = $data[$i];
     if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; }      if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; }
     if ( $line =~ /TABLE/ ) { last; }      if ( $line =~ /TABLE/ ) { last; }
     my ($tag,$descrip,$function,$show) = split(/,/, $line);      my ($tag,$descrip,$color,$function,$show) = split(/,/, $line);
     $insertlist{"$tagnum.tag"} = $tag;      $insertlist{"$tagnum.tag"} = $tag;
     $insertlist{"$tagnum.description"} = $descrip;      $insertlist{"$tagnum.description"} = $descrip;
       $insertlist{"$tagnum.color"} = $color;
     $insertlist{"$tagnum.function"} = $function;      $insertlist{"$tagnum.function"} = $function;
     $insertlist{"$tagnum.show"}= $show;      $insertlist{"$tagnum.show"}= $show;
       $insertlist{"$tag.num"}=$tagnum;
     $tagnum++;      $tagnum++;
   }    }
   $i++; #skipping TABLE line    $i++; #skipping TABLE line
Line 878  sub register_insert { Line 916  sub register_insert {
     $tagnum++;      $tagnum++;
   }    }
 }  }
   
   sub description {
     my ($token)=@_;
     return $insertlist{$insertlist{"$token->[1].num"}.'.description'};
   }
 1;  1;
 __END__  __END__
   

Removed from v.1.91  
changed lines
  Added in v.1.100


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