Diff for /loncom/xml/lonxml.pm between versions 1.103 and 1.107

version 1.103, 2001/07/27 00:18:59 version 1.107, 2001/08/07 22:57:50
Line 12 Line 12
 # 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/12,6/13 H. K. Ng
 # 6/16 Gerd Kortemeyer  # 6/16 Gerd Kortemeyer
   # 7/27 H. K. Ng
   # 8/7 Gerd Kortemeyer
   
 package Apache::lonxml;   package Apache::lonxml; 
 use vars   use vars 
 qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace);  qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace);
 use strict;  use strict;
 use HTML::TokeParser;  use HTML::TokeParser;
   use HTML::TreeBuilder;
 use Safe;  use Safe;
 use Safe::Hole;  use Safe::Hole;
 use Math::Cephes qw(:trigs :hypers :bessels erf erfc);  use Math::Cephes qw(:trigs :hypers :bessels erf erfc);
Line 131  sub fontsettings() { Line 134  sub fontsettings() {
 sub registerurl {  sub registerurl {
     my $forcereg=shift;      my $forcereg=shift;
     if ($Apache::lonxml::registered) { return ''; }      if ($Apache::lonxml::registered) { return ''; }
       $Apache::lonxml::registered=1;
     if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {      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)$/) {
Line 279  sub xmlparse { Line 283  sub xmlparse {
  return $finaloutput;   return $finaloutput;
 }  }
   
   sub htmlclean {
       my ($raw,$full)=@_;
   
       my $tree = HTML::TreeBuilder->new;
       $tree->ignore_unknown(0);
       
       $tree->parse($raw);
   
       my $output= $tree->as_HTML(undef,' ');
        
       $output=~s/\<(br|hr|img)([^\>\/]*)\>/\<$1$2 \/\>/gis;
       $output=~s/\<\/(br|hr|img)\>//gis;
       unless ($full) {
          $output=~s/\<[\/]*(body|head|html)\>//gis;
       }
   
       $tree = $tree->delete;
   
       return $output;
   }
   
 sub inner_xmlparse {  sub inner_xmlparse {
   my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_;    my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_;
   &Apache::lonxml::debug('Reentrant parser starting, again?');    &Apache::lonxml::debug('Reentrant parser starting, again?');
Line 807  SIMPLECONTENT Line 832  SIMPLECONTENT
 <form method="post">  <form method="post">
 <textarea cols="80" rows="40" name="filecont">$filecontents</textarea>  <textarea cols="80" rows="40" name="filecont">$filecontents</textarea>
 <br />  <br />
 <input type="submit" name="savethisfile" value="Save this file" />  <input type="submit" name="attemptclean" 
          value="Save and then attempt to clean HTML" />
   <input type="submit" name="savethisfile" value="Save this" />
 </form>  </form>
 ENDFOOTER  ENDFOOTER
       $result=~s/(\<body[^\>]*\>)/$1$editheader/is;        $result=~s/(\<body[^\>]*\>)/$1$editheader/is;
Line 838  sub handler { Line 865  sub handler {
 # Edit action? Save file.  # Edit action? Save file.
 #  #
   unless ($ENV{'request.state'} eq 'published') {    unless ($ENV{'request.state'} eq 'published') {
       if ($ENV{'form.savethisfile'}) {        if (($ENV{'form.savethisfile'}) || ($ENV{'form.attemptclean'})) {
   &storefile($file,$ENV{'form.filecont'});    &storefile($file,$ENV{'form.filecont'});
       }        }
   }    }
Line 858  sub handler { Line 885  sub handler {
 ENDNOTFOUND  ENDNOTFOUND
     $filecontents='';      $filecontents='';
   } else {    } else {
         unless ($ENV{'request.state'} eq 'published') {
            if ($ENV{'form.attemptclean'}) {
       $filecontents=&htmlclean($filecontents,1);
            }
         }
     $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);      $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);
   }    }
   

Removed from v.1.103  
changed lines
  Added in v.1.107


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