--- loncom/xml/lonxml.pm	2010/08/08 02:00:44	1.513
+++ loncom/xml/lonxml.pm	2011/10/13 01:54:21	1.520
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.513 2010/08/08 02:00:44 raeburn Exp $
+# $Id: lonxml.pm,v 1.520 2011/10/13 01:54:21 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -112,6 +112,7 @@ use Apache::lonmaxima();
 use Apache::lonr();
 use Apache::lonlocal;
 use Apache::lonhtmlcommon();
+use Apache::functionplotresponse();
 
 #====================================   Main subroutine: xmlparse  
 
@@ -787,6 +788,10 @@ sub init_safespace {
   $safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS');
   $safehole->wrap(\&Apache::inputtags::finalizeawards,$safeeval,'&LONCAPA_INTERNAL_FINALIZEAWARDS');
   $safehole->wrap(\&Apache::caparesponse::get_sigrange,$safeeval,'&LONCAPA_INTERNAL_get_sigrange');
+  $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');
+
 #  use Data::Dumper;
 #  $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper');
 #need to inspect this class of ops
@@ -1434,17 +1439,25 @@ SIMPLECONTENT
 
 sub verify_html {
     my ($filecontents)=@_;
-    if ($filecontents!~/(?:\<|\&lt\;)(?:html|xml)[^\<]*(?:\>|\&gt\;)/is) {
-       return &mt('File does not have [_1] or [_2] starting tag','&lt;html&gt;','&lt;xml&gt;');
-    }
-    if ($filecontents!~/(?:\<|\&lt\;)\/(?:html|xml)(?:\>|\&gt\;)/is) {
-       return &mt('File does not have [_1] or [_2] ending tag','&lt;html&gt;','&lt;xml&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;');
+    my ($is_html,$is_xml);
+    if ($filecontents =~/(?:\<|\&lt\;)\?xml[^\<]*\?(?:\>|\&gt\;)/is) {
+        $is_xml = 1;
+    } elsif ($filecontents =~/(?:\<|\&lt\;)html(?:\s+[^\<]+|\s*)(?:\>|\&gt\;)/is) {
+        $is_html = 1;
+    }
+    unless ($is_xml || $is_html) {
+        return &mt('File does not have [_1] or [_2] starting tag','&lt;html&gt;','&lt;?xml ?&gt;');
+    }
+    if ($is_html) {
+        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 '';
 }
@@ -1492,27 +1505,27 @@ sub inserteditinfo {
       my $dragmath_button;
       my ($add_to_onload, $add_to_onresize);
       $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 %textarea_args = (
                                 fullpage => 'true',
                                 dragmath => 'math',
                               );
-          $initialize .= 
-              &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args).
-	      (<<FULLPAGE);
+          $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); 
+      }
+      $initialize .= (<<FULLPAGE);
 <script type="text/javascript">
+// <![CDATA[
     function initDocument() {
 	resize_textarea('$textarea_id','LC_aftertextarea');
     }
+// ]]>
 </script>
 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 = '<span id="math_filecont" style="display: block;">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>';
-              $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
-      }
-
       $add_to_onload = 'initDocument();';
       $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";
 
@@ -1537,7 +1550,7 @@ FULLPAGE
               $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
           }
           if (&Apache::lonhtmlcommon::htmlareabrowser()) {
-              $textareaclass = 'class="LC_richDetectHtml"';
+              $textareaclass = 'class="LC_richDefaultOff"';
           }
       }
       my $editfooter=(<<ENDFOOTER);
@@ -1713,9 +1726,6 @@ ENDNOTFOUND
                 $result = &Apache::lontexconvert::converted(\$filecontents,
                               $env{'form.texengine'});
                 if ($env{'form.return_only_error_and_warning_counts'}) {
-                    if (&verify_html('<html><body>'.$result.'</body></html>')) {
-                        $errorcount++;
-                    }
                     $result = "$errorcount:$warningcount";
                 }
             } else {
@@ -2034,8 +2044,8 @@ sub register_insert_xml {
 	    my $key;
 	    if      ($token->[1] eq 'tag') {
 		$tag = $token->[2]{'name'};
-		$insertlist{"$tagnum.tag"} = $tag;
-		$insertlist{"$tag.num"}   = $tagnum;
+		$insertlist{$tagnum.'.tag'} = $tag;
+		$insertlist{$tag.'.num'}   = $tagnum;
 		push(@alltags,$tag);
 	    } elsif ($in_help && $token->[1] eq 'file') {
 		$key = $tag.'.helpfile';
@@ -2068,12 +2078,12 @@ sub register_insert_xml {
     
     # parse the allows and ignore tags set to <show>no</show>
     foreach my $tag (@alltags) {	
-        next if (!exists($insertlist{"$tag.allow"}));
-	my $allow =  $insertlist{"$tag.allow"};
+        next if (!exists($insertlist{$tag.'.allow'}));
+	my $allow =  $insertlist{$tag.'.allow'};
        	foreach my $element (split(',',$allow)) {
 	    $element =~ s/(^\s*|\s*$ )//gx;
-	    if (!exists($insertlist{"$element.show"})
-                || $insertlist{"$element.show"} ne 'no') {
+	    if (!exists($insertlist{$element.'.show'})
+                || $insertlist{$element.'.show'} ne 'no') {
 		push(@{ $insertlist{$tag.'.which'} },$element);
 	    }
 	}