--- loncom/xml/lonxml.pm 2015/02/22 18:40:18 1.552 +++ loncom/xml/lonxml.pm 2017/11/12 23:10:33 1.559 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.552 2015/02/22 18:40:18 raeburn Exp $ +# $Id: lonxml.pm,v 1.559 2017/11/12 23:10:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -69,6 +69,7 @@ use Safe(); use Safe::Hole(); use Math::Cephes(); use Math::Random(); +use Math::Calculus::Expression(); use Opcode(); use POSIX qw(strftime); use Time::HiRes qw( gettimeofday tv_interval ); @@ -345,9 +346,9 @@ sub latex_special_symbols { } else { $string=~s/\\/\\ensuremath{\\backslash}/g; $string=~s/\\\%|\%/\\\%/g; - $string=~s/\\{|{/\\{/g; + $string=~s/\\\{|\{/\\{/g; $string=~s/\\}|}/\\}/g; - $string=~s/\\ensuremath\\{\\backslash\\}/\\ensuremath{\\backslash}/g; + $string=~s/\\ensuremath\\\{\\backslash\\}/\\ensuremath{\\backslash}/g; $string=~s/\\\$|\$/\\\$/g; $string=~s/\\\_|\_/\\\_/g; $string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g; @@ -368,6 +369,8 @@ sub inner_xmlparse { my $result; my $token; my $dontpop=0; + my $lastdontpop; + my $lastendtag; my $startredirection = $Apache::lonxml::redirection; while ( $#$pars > -1 ) { while ($token = $$pars['-1']->get_token) { @@ -463,17 +466,29 @@ sub inner_xmlparse { } $result = ''; - if ($token->[0] eq 'E' && !$dontpop) { - &end_tag($stack,$parstack,$token); + if ($token->[0] eq 'E') { + if ($dontpop) { + $lastdontpop = $token; + } else { + $lastendtag = $token->[1]; + &end_tag($stack,$parstack,$token); + } } $dontpop=0; - } + } if ($#$pars > -1) { pop @$pars; pop @Apache::lonxml::pwd; } } + if (($#$stack == 0) && ($stack->[0] eq 'physnet') && ($target eq 'web') && + ($lastendtag eq 'LONCAPA_INTERNAL_TURN_STYLE_ON')) { + if ((ref($lastdontpop) eq 'ARRAY') && ($lastdontpop->[1] eq 'physnet')) { + &end_tag($stack,$parstack,$lastdontpop); + } + } + # if ($target eq 'meta') { # $finaloutput.=&endredirection; # } @@ -805,6 +820,7 @@ sub init_safespace { $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'); + $safehole->wrap(\&Math::Calculus::Expression::math_calculus_expression,$safeeval,'&math_calculus_expression'); # use Data::Dumper; # $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper'); @@ -977,7 +993,7 @@ sub decreasedepth { sub get_id { my ($parstack,$safeeval)=@_; my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); - if ($env{'request.state'} eq 'construct' && $id =~ /([._]|[^\w\d\s[:punct:]])/) { + if ($env{'request.state'} eq 'construct' && $id =~ /([._]|[^\w\s\-])/) { &error(&mt('ID [_1] contains invalid characters. IDs are only allowed to contain letters, numbers, spaces and -','"'.$id.'"')); } if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; } @@ -1460,13 +1476,15 @@ SIMPLECONTENT sub verify_html { my ($filecontents)=@_; - my ($is_html,$is_xml); + my ($is_html,$is_xml,$is_physnet); if ($filecontents =~/(?:\<|\<\;)\?xml[^\<]*\?(?:\>|\>\;)/is) { $is_xml = 1; } elsif ($filecontents =~/(?:\<|\<\;)html(?:\s+[^\<]+|\s*)(?:\>|\>\;)/is) { $is_html = 1; + } elsif ($filecontents =~/(?:\<|\<\;)physnet[^\<]*(?:\>|\>\;)/is) { + $is_physnet = 1; } - unless ($is_xml || $is_html) { + unless ($is_xml || $is_html || $is_physnet) { return &mt('File does not have [_1] or [_2] starting tag','<html>','<?xml ?>'); } if ($is_html) { @@ -1512,7 +1530,6 @@ sub renderingoptions { ('' => '', 'tth' => 'tth (TeX to HTML)', 'MathJax' => 'MathJax', - 'jsMath' => 'jsMath', 'mimetex' => 'mimetex (Convert to Images)')}). ''; return $output; @@ -1625,11 +1642,11 @@ $initialize $xml_help -
+
$undo $htmlerror $deps_button $dragmath_button
-
+
@@ -2257,7 +2274,7 @@ sub register_insert { sub dump_insertlist { my ($ext) = @_; - open(XML,">/tmp/insertlist.xml.$ext"); + open(XML,">","/tmp/insertlist.xml.$ext"); print XML (""); my $i=0;