Diff for /loncom/xml/lonxml.pm between versions 1.512 and 1.527

version 1.512, 2010/08/07 19:23:56 version 1.527, 2011/12/09 21:21:43
Line 112  use Apache::lonmaxima(); Line 112  use Apache::lonmaxima();
 use Apache::lonr();  use Apache::lonr();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
   use Apache::functionplotresponse();
   
 #====================================   Main subroutine: xmlparse    #====================================   Main subroutine: xmlparse  
   
Line 300  sub xmlparse { Line 301  sub xmlparse {
  &clean_safespace($safeeval);   &clean_safespace($safeeval);
   
  if (@script_var_displays) {   if (@script_var_displays) {
      $finaloutput .= join('',@script_var_displays);       my $scriptoutput = join('',@script_var_displays);
        $finaloutput=~s{(</body>\s*</html>)\s*$}{$scriptoutput$1}s;
      undef(@script_var_displays);       undef(@script_var_displays);
  }   }
  &init_state();   &init_state();
Line 787  sub init_safespace { Line 789  sub init_safespace {
   $safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS');    $safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS');
   $safehole->wrap(\&Apache::inputtags::finalizeawards,$safeeval,'&LONCAPA_INTERNAL_FINALIZEAWARDS');    $safehole->wrap(\&Apache::inputtags::finalizeawards,$safeeval,'&LONCAPA_INTERNAL_FINALIZEAWARDS');
   $safehole->wrap(\&Apache::caparesponse::get_sigrange,$safeeval,'&LONCAPA_INTERNAL_get_sigrange');    $safehole->wrap(\&Apache::caparesponse::get_sigrange,$safeeval,'&LONCAPA_INTERNAL_get_sigrange');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_val,$safeeval,'&fpr_val');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_f,$safeeval,'&fpr_f');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_dfdx,$safeeval,'&fpr_dfdx');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_d2fdx2,$safeeval,'&fpr_d2fdx2');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorcoords,$safeeval,'&fpr_vectorcoords');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle');
   
 #  use Data::Dumper;  #  use Data::Dumper;
 #  $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper');  #  $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper');
 #need to inspect this class of ops  #need to inspect this class of ops
Line 838  sub initialize_rndseed { Line 849  sub initialize_rndseed {
 sub default_homework_load {  sub default_homework_load {
     my ($safeeval)=@_;      my ($safeeval)=@_;
     &Apache::lonxml::debug('Loading default_homework');      &Apache::lonxml::debug('Loading default_homework');
     my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm');      my $default=&Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonIncludes'}.
                                            '/default_homework.lcpm');
     if ($default eq -1) {      if ($default eq -1) {
  &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");   &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");
     } else {      } else {
Line 1008  the current 'bubble line number' is stor Line 1020  the current 'bubble line number' is stor
 The value of it is stored in $Apache:lonxml::counter when live and  The value of it is stored in $Apache:lonxml::counter when live and
 stored back to env after done.  stored back to env after done.
   
 =item &increment_counter($increment);  =item &increment_counter($increment, $part_response);
   
 Increments the internal counter environment variable a specified amount  Increments the internal counter environment variable a specified amount
   
Line 1434  SIMPLECONTENT Line 1446  SIMPLECONTENT
   
 sub verify_html {  sub verify_html {
     my ($filecontents)=@_;      my ($filecontents)=@_;
     if ($filecontents!~/(?:\<|\&lt\;)(?:html|xml)[^\<]*(?:\>|\&gt\;)/is) {      my ($is_html,$is_xml);
        return &mt('File does not have [_1] or [_2] starting tag','&lt;html&gt;','&lt;xml&gt;');      if ($filecontents =~/(?:\<|\&lt\;)\?xml[^\<]*\?(?:\>|\&gt\;)/is) {
     }          $is_xml = 1;
     if ($filecontents!~/(?:\<|\&lt\;)\/(?:html|xml)(?:\>|\&gt\;)/is) {      } elsif ($filecontents =~/(?:\<|\&lt\;)html(?:\s+[^\<]+|\s*)(?:\>|\&gt\;)/is) {
        return &mt('File does not have [_1] or [_2] ending tag','&lt;html&gt;','&lt;xml&gt;');          $is_html = 1;
     }      }
     if ($filecontents!~/(?:\<|\&lt\;)(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {      unless ($is_xml || $is_html) {
        return &mt('File does not have [_1] or [_2] starting tag','&lt;body&gt;','&lt;frameset&gt;');          return &mt('File does not have [_1] or [_2] starting tag','&lt;html&gt;','&lt;?xml ?&gt;');
     }      }
     if ($filecontents!~/(?:\<|\&lt\;)\/(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {      if ($is_html) {
        return &mt('File does not have [_1] or [_2] ending tag','&lt;body&gt;','&lt;frameset&gt;');          if ($filecontents!~/(?:\<|\&lt\;)\/html(?:\>|\&gt\;)/is) {
               return &mt('File does not have [_1] ending tag','&lt;html&gt;');
           }
           if ($filecontents!~/(?:\<|\&lt\;)(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {
               return &mt('File does not have [_1] or [_2] starting tag','&lt;body&gt;','&lt;frameset&gt;');
           }
           if ($filecontents!~/(?:\<|\&lt\;)\/(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {
               return &mt('File does not have [_1] or [_2] ending tag','&lt;body&gt;','&lt;frameset&gt;');
           }
     }      }
     return '';      return '';
 }  }
Line 1477  sub renderingoptions { Line 1497  sub renderingoptions {
            {&Apache::lonlocal::texthash             {&Apache::lonlocal::texthash
                (''        => '',                 (''        => '',
                 'tth'     => 'tth (TeX to HTML)',                  'tth'     => 'tth (TeX to HTML)',
                 'jsMath'  => 'jsMath',                  'MathJax' => 'MathJax',
     'jsMath'  => 'jsMath',
                 'mimetex' => 'mimetex (Convert to Images)')}).                  'mimetex' => 'mimetex (Convert to Images)')}).
      '</span>';       '</span>';
     return $output;      return $output;
Line 1492  sub inserteditinfo { Line 1513  sub inserteditinfo {
       my $dragmath_button;        my $dragmath_button;
       my ($add_to_onload, $add_to_onresize);        my ($add_to_onload, $add_to_onresize);
       $initialize=&Apache::lonhtmlcommon::spellheader();        $initialize=&Apache::lonhtmlcommon::spellheader();
       if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) {         if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) {
   my $lang = &Apache::lonhtmlcommon::htmlarea_lang();    my $lang = &Apache::lonhtmlcommon::htmlarea_lang();
           my %textarea_args = (            my %textarea_args = (
                                 fullpage => 'true',                                  fullpage => 'true',
                                 dragmath => 'math',                                  dragmath => 'math',
                               );                                );
           $initialize .=             $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); 
               &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args).        }
       (<<FULLPAGE);        $initialize .= (<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
     function initDocument() {      function initDocument() {
  resize_textarea('$textarea_id','LC_aftertextarea');   resize_textarea('$textarea_id','LC_aftertextarea');
     }      }
   // ]]>
 </script>  </script>
 FULLPAGE  FULLPAGE
         if ($filetype eq 'html') {
             $dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>';
             $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
       }        }
       if ($filetype eq 'html' || $filetype eq 'tex') {  
               $dragmath_button = '<div id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</div>';  
               $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');  
       }  
   
       $add_to_onload = 'initDocument();';        $add_to_onload = 'initDocument();';
       $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";        $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";
   
Line 1537  FULLPAGE Line 1558  FULLPAGE
               $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';                $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
           }            }
           if (&Apache::lonhtmlcommon::htmlareabrowser()) {            if (&Apache::lonhtmlcommon::htmlareabrowser()) {
               $textareaclass = 'class="LC_richDetectHtml"';                $textareaclass = 'class="LC_richDefaultOff"';
           }            }
       }        }
       my $editfooter=(<<ENDFOOTER);        my $editfooter=(<<ENDFOOTER);
Line 1554  $initialize Line 1575  $initialize
     <div class="LC_edit_problem_discards">      <div class="LC_edit_problem_discards">
       <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />        <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />
       <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />        <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />
       $spelllink $htmlerror        $htmlerror $dragmath_button
     </div>      </div>
     <div class="LC_edit_problem_saves">      <div class="LC_edit_problem_saves">
       <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'}" />
     </div>      </div>
   </div>    </div>
 $dragmath_button    <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont" $textareaclass>$filecontents</textarea><br />$spelllink
   <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont" $textareaclass>$filecontents</textarea>  
   <div id="LC_aftertextarea">    <div id="LC_aftertextarea">
     <br />      <br />
     $titledisplay      $titledisplay
Line 1714  ENDNOTFOUND Line 1734  ENDNOTFOUND
                 $result = &Apache::lontexconvert::converted(\$filecontents,                  $result = &Apache::lontexconvert::converted(\$filecontents,
                               $env{'form.texengine'});                                $env{'form.texengine'});
                 if ($env{'form.return_only_error_and_warning_counts'}) {                  if ($env{'form.return_only_error_and_warning_counts'}) {
                     if (&verify_html('<html><body>'.$result.'</body></html>')) {  
                         $errorcount++;  
                     }  
                     $result = "$errorcount:$warningcount";                      $result = "$errorcount:$warningcount";
                 }                  }
             } else {              } else {
Line 1743  ENDNOTFOUND Line 1760  ENDNOTFOUND
                 }                  }
                 my $brcrum;                  my $brcrum;
                 if ($env{'request.state'} eq 'construct') {                  if ($env{'request.state'} eq 'construct') {
                     $brcrum = [{'href' => &Apache::loncommon::authorspace(),                      $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
                                 'text' => 'Construction Space'},                                  'text' => 'Construction Space'},
                                {'href' => '',                                 {'href' => '',
                                 'text' => $breadcrumbtext}];                                  'text' => $breadcrumbtext}];
Line 1780  ENDNOTFOUND Line 1797  ENDNOTFOUND
             my $header;              my $header;
             if ($env{'request.state'} eq 'construct') {              if ($env{'request.state'} eq 'construct') {
                 $options{'bread_crumbs'} = [{                  $options{'bread_crumbs'} = [{
                             'href' => &Apache::loncommon::authorspace(),                              'href' => &Apache::loncommon::authorspace($request->uri),
                             'text' => 'Construction Space'},                              'text' => 'Construction Space'},
                            {'href' => '',                             {'href' => '',
                             'text' => $breadcrumbtext}];                              'text' => $breadcrumbtext}];
Line 1837  sub debug { Line 1854  sub debug {
 }  }
   
 sub show_error_warn_msg {  sub show_error_warn_msg {
     if ($env{'request.filename'} eq '/home/httpd/html/res/lib/templates/simpleproblem.problem' &&      if (($env{'request.filename'} eq 
  &Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {           $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/lib/templates/simpleproblem.problem') &&
           (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
  return 1;   return 1;
     }      }
     return (($Apache::lonxml::debug eq 1) ||      return (($Apache::lonxml::debug eq 1) ||
Line 2033  sub register_insert_xml { Line 2051  sub register_insert_xml {
     while (my $token = $parser->get_token()) {      while (my $token = $parser->get_token()) {
  if ($token->[0] eq 'S') {   if ($token->[0] eq 'S') {
     my $key;      my $key;
     if      ($token->[1] eq 'tag') {      if ($token->[1] eq 'tag') {
  $tag = $token->[2]{'name'};   $tag = $token->[2]{'name'};
  $insertlist{"$tagnum.tag"} = $tag;                  if (defined($tag)) {
  $insertlist{"$tag.num"}   = $tagnum;      $insertlist{$tagnum.'.tag'} = $tag;
  push(@alltags,$tag);      $insertlist{$tag.'.num'}   = $tagnum;
       push(@alltags,$tag);
                   }
     } elsif ($in_help && $token->[1] eq 'file') {      } elsif ($in_help && $token->[1] eq 'file') {
  $key = $tag.'.helpfile';   $key = $tag.'.helpfile';
     } elsif ($in_help && $token->[1] eq 'description') {      } elsif ($in_help && $token->[1] eq 'description') {
Line 2069  sub register_insert_xml { Line 2089  sub register_insert_xml {
           
     # parse the allows and ignore tags set to <show>no</show>      # parse the allows and ignore tags set to <show>no</show>
     foreach my $tag (@alltags) {      foreach my $tag (@alltags) {
         next if (!exists($insertlist{"$tag.allow"}));          next if (!exists($insertlist{$tag.'.allow'}));
  my $allow =  $insertlist{"$tag.allow"};   my $allow =  $insertlist{$tag.'.allow'};
         foreach my $element (split(',',$allow)) {          foreach my $element (split(',',$allow)) {
     $element =~ s/(^\s*|\s*$ )//gx;      $element =~ s/(^\s*|\s*$ )//gx;
     if (!exists($insertlist{"$element.show"})      if (!exists($insertlist{$element.'.show'})
                 || $insertlist{"$element.show"} ne 'no') {                  || $insertlist{$element.'.show'} ne 'no') {
  push(@{ $insertlist{$tag.'.which'} },$element);   push(@{ $insertlist{$tag.'.which'} },$element);
     }      }
  }   }

Removed from v.1.512  
changed lines
  Added in v.1.527


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