Diff for /loncom/xml/lonxml.pm between versions 1.136 and 1.140

version 1.136, 2001/10/26 17:09:04 version 1.140, 2001/11/29 21:38:17
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # XML Parser Module   # XML Parser Module 
 #  #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
   # Copyright for TtHfunc and TtMfunc by Ian Hutchinson. 
   # TtHfunc and TtMfunc (the "Code") may be compiled and linked into 
   # binary executable programs or libraries distributed by the 
   # Michigan State University (the "Licensee"), but any binaries so 
   # distributed are hereby licensed only for use in the context
   # of a program or computational system for which the Licensee is the 
   # primary author or distributor, and which performs substantial 
   # additional tasks beyond the translation of (La)TeX into HTML.
   # The C source of the Code may not be distributed by the Licensee
   # to any other parties under any circumstances.
   #
 # last modified 06/26/00 by Alexander Sakharuk  # last modified 06/26/00 by Alexander Sakharuk
 # 11/6 Gerd Kortemeyer  # 11/6 Gerd Kortemeyer
 # 6/1/1 Gerd Kortemeyer  # 6/1/1 Gerd Kortemeyer
Line 95  sub xmlbegin { Line 130  sub xmlbegin {
   } else {    } else {
       $output='<html>';        $output='<html>';
   }    }
   my $date=localtime;  
   $output .=&Apache::loncommon::cacheheader();  
   return $output;    return $output;
 }  }
   
Line 430  sub htmlclean { Line 463  sub htmlclean {
   
     my $tree = HTML::TreeBuilder->new;      my $tree = HTML::TreeBuilder->new;
     $tree->ignore_unknown(0);      $tree->ignore_unknown(0);
       
     $tree->parse($raw);      $tree->parse($raw);
   
     my $output= $tree->as_HTML(undef,' ');      my $output= $tree->as_HTML(undef,' ');
        
     $output=~s/\<(br|hr|img|meta|allow)([^\>\/]*)\>/\<$1$2 \/\>/gis;      $output=~s/\<(br|hr|img|meta|allow)([^\>\/]*)\>/\<$1$2 \/\>/gis;
     $output=~s/\<\/(br|hr|img|meta|allow)\>//gis;      $output=~s/\<\/(br|hr|img|meta|allow)\>//gis;
     unless ($full) {      unless ($full) {
Line 462  sub inner_xmlparse { Line 495  sub inner_xmlparse {
   $result=$token->[2];    $result=$token->[2];
  }   }
       } elsif ($token->[0] eq 'S') {        } elsif ($token->[0] eq 'S') {
  # add tag to stack       # add tag to stack
  push (@$stack,$token->[1]);   push (@$stack,$token->[1]);
  # add parameters list to another stack   # add parameters list to another stack
  push (@$parstack,&parstring($token));   push (@$parstack,&parstring($token));
  &increasedepth($token);          &increasedepth($token);
  if (exists $$style_for_target{$token->[1]}) {   if (exists $$style_for_target{$token->[1]}) {
   if ($Apache::lonxml::redirection) {    if ($Apache::lonxml::redirection) {
     $Apache::lonxml::outputstack['-1'] .=        $Apache::lonxml::outputstack['-1'] .=
       &recurse($$style_for_target{$token->[1]},$target,$safeeval,        &recurse($$style_for_target{$token->[1]},$target,$safeeval,
        $style_for_target,@$parstack);         $style_for_target,@$parstack);
   } else {    } else {
Line 479  sub inner_xmlparse { Line 512  sub inner_xmlparse {
  } else {   } else {
   $result = &callsub("start_$token->[1]", $target, $token, $stack,    $result = &callsub("start_$token->[1]", $target, $token, $stack,
      $parstack, $pars, $safeeval, $style_for_target);       $parstack, $pars, $safeeval, $style_for_target);
  }                 }
       } elsif ($token->[0] eq 'E') {        } elsif ($token->[0] eq 'E') {
  #clear out any tags that didn't end   #clear out any tags that didn't end
  while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) {   while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) {
   &Apache::lonxml::warning("Unbalanced tags in resource $$stack['-1']");    &Apache::lonxml::warning('Missing tag &lt;/'.$$stack['-1'].'&gt; in file');
   &end_tag($stack,$parstack,$token);    &end_tag($stack,$parstack,$token);
  }   }
   
  if (exists $$style_for_target{'/'."$token->[1]"}) {   if (exists($$style_for_target{'/'."$token->[1]"})) {
   if ($Apache::lonxml::redirection) {    if ($Apache::lonxml::redirection) {
     $Apache::lonxml::outputstack['-1'] .=        $Apache::lonxml::outputstack['-1'] .=  
       &recurse($$style_for_target{'/'."$token->[1]"},        &recurse($$style_for_target{'/'."$token->[1]"},
Line 497  sub inner_xmlparse { Line 530  sub inner_xmlparse {
      $target,$safeeval,$style_for_target,       $target,$safeeval,$style_for_target,
      @$parstack);       @$parstack);
   }    }
       
  } else {   } else {
   $result = &callsub("end_$token->[1]", $target, $token, $stack,    $result = &callsub("end_$token->[1]", $target, $token, $stack,
      $parstack, $pars,$safeeval, $style_for_target);       $parstack, $pars,$safeeval, $style_for_target);
Line 548  sub recurse { Line 580  sub recurse {
   my $partstring = '';    my $partstring = '';
   my $output='';    my $output='';
   my $decls='';    my $decls='';
     &Apache::lonxml::debug("Recursing");
   while ( $#pat > -1 ) {    while ( $#pat > -1 ) {
     while  ($tokenpat = $pat[$#pat]->get_token) {      while  ($tokenpat = $pat[$#pat]->get_token) {
       if (($tokenpat->[0] eq 'T') || ($tokenpat->[0] eq 'C') || ($tokenpat->[0] eq 'D') ) {        if (($tokenpat->[0] eq 'T') || ($tokenpat->[0] eq 'C') || ($tokenpat->[0] eq 'D') ) {
Line 565  sub recurse { Line 598  sub recurse {
  #clear out any tags that didn't end   #clear out any tags that didn't end
  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('Missing tag &lt;/'.$innerstack['-1'].'&gt; in style');
   &end_tag(\@innerstack,\@innerparstack,$tokenpat);    &end_tag(\@innerstack,\@innerparstack,$tokenpat);
  }   }
  $partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat,   $partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat,
Line 599  sub recurse { Line 632  sub recurse {
     pop @pat;      pop @pat;
     pop @Apache::lonxml::pwd;      pop @Apache::lonxml::pwd;
   }    }
     &Apache::lonxml::debug("Exiting Recursing");
   return $output;    return $output;
 }  }
   
Line 810  sub decreasedepth { Line 844  sub decreasedepth {
     $Apache::lonxml::olddepth=$Apache::lonxml::depth+1;      $Apache::lonxml::olddepth=$Apache::lonxml::depth+1;
   }    }
   if (  $Apache::lonxml::depth < -1) {    if (  $Apache::lonxml::depth < -1) {
     &Apache::lonxml::warning("Unbalanced tags in resource");         &Apache::lonxml::warning("Missing tags, unable to properly run file.");
     $Apache::lonxml::depth='-1';      $Apache::lonxml::depth='-1';
   }    }
   my $curdepth=join('_',@Apache::lonxml::depthcounter);    my $curdepth=join('_',@Apache::lonxml::depthcounter);
Line 1010  sub handler { Line 1044  sub handler {
   } else {    } else {
     $request->content_type('text/html');      $request->content_type('text/html');
   }    }
       &Apache::loncommon::no_cache($request); 
   $request->send_http_header;    $request->send_http_header;
       
   return OK if $request->header_only;    return OK if $request->header_only;
Line 1163  sub register_insert { Line 1197  sub register_insert {
   
 sub description {  sub description {
   my ($token)=@_;    my ($token)=@_;
   return $insertlist{$insertlist{"$token->[1].num"}.'.description'};    my $tagnum;
     my $tag=$token->[1];
     foreach my $namespace (reverse @Apache::lonxml::namespace) {
       my $testtag=$namespace.'::'.$tag;
       $tagnum=$insertlist{"$testtag.num"};
       if (defined($tagnum)) { last; }
     }
     if (!defined ($tagnum)) { $tagnum=$Apache::lonxml::insertlist{"$tag.num"}; }
     return $insertlist{$tagnum.'.description'};
 }  }
   
 # ----------------------------------------------------------------- whichuser  # ----------------------------------------------------------------- whichuser

Removed from v.1.136  
changed lines
  Added in v.1.140


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