version 1.550, 2014/08/25 00:20:55
|
version 1.562, 2023/07/22 22:41:45
|
Line 69 use Safe();
|
Line 69 use Safe();
|
use Safe::Hole(); |
use Safe::Hole(); |
use Math::Cephes(); |
use Math::Cephes(); |
use Math::Random(); |
use Math::Random(); |
|
use Math::Calculus::Expression(); |
|
use Number::FormatEng(); |
use Opcode(); |
use Opcode(); |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
Line 229 sub xmlend {
|
Line 231 sub xmlend {
|
} |
} |
|
|
sub printalltags { |
sub printalltags { |
my $temp; |
foreach my $temp (sort(keys(%Apache::lonxml::alltags))) { |
foreach $temp (sort keys %Apache::lonxml::alltags) { |
&Apache::lonxml::debug("$temp -- ". |
&Apache::lonxml::debug("$temp -- ". |
join(',',@{ $Apache::lonxml::alltags{$temp} })); |
join(',',@{ $Apache::lonxml::alltags{$temp} })); |
} |
} |
|
} |
} |
|
|
sub xmlparse { |
sub xmlparse { |
Line 346 sub latex_special_symbols {
|
Line 347 sub latex_special_symbols {
|
} else { |
} else { |
$string=~s/\\/\\ensuremath{\\backslash}/g; |
$string=~s/\\/\\ensuremath{\\backslash}/g; |
$string=~s/\\\%|\%/\\\%/g; |
$string=~s/\\\%|\%/\\\%/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/\\\_|\_/\\\_/g; |
$string=~s/\\\_|\_/\\\_/g; |
$string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g; |
$string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g; |
Line 369 sub inner_xmlparse {
|
Line 370 sub inner_xmlparse {
|
my $result; |
my $result; |
my $token; |
my $token; |
my $dontpop=0; |
my $dontpop=0; |
|
my $lastdontpop; |
|
my $lastendtag; |
my $startredirection = $Apache::lonxml::redirection; |
my $startredirection = $Apache::lonxml::redirection; |
while ( $#$pars > -1 ) { |
while ( $#$pars > -1 ) { |
while ($token = $$pars['-1']->get_token) { |
while ($token = $$pars['-1']->get_token) { |
Line 464 sub inner_xmlparse {
|
Line 467 sub inner_xmlparse {
|
} |
} |
$result = ''; |
$result = ''; |
|
|
if ($token->[0] eq 'E' && !$dontpop) { |
if ($token->[0] eq 'E') { |
&end_tag($stack,$parstack,$token); |
if ($dontpop) { |
|
$lastdontpop = $token; |
|
} else { |
|
$lastendtag = $token->[1]; |
|
&end_tag($stack,$parstack,$token); |
|
} |
} |
} |
$dontpop=0; |
$dontpop=0; |
} |
} |
if ($#$pars > -1) { |
if ($#$pars > -1) { |
pop @$pars; |
pop @$pars; |
pop @Apache::lonxml::pwd; |
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') { |
# if ($target eq 'meta') { |
# $finaloutput.=&endredirection; |
# $finaloutput.=&endredirection; |
# } |
# } |
Line 806 sub init_safespace {
|
Line 821 sub init_safespace {
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle'); |
|
$safehole->wrap(\&Math::Calculus::Expression::math_calculus_expression,$safeeval,'&math_calculus_expression'); |
|
$safehole->wrap(\&Number::FormatEng::format_eng,$safeeval,'&number_format_eng'); |
|
$safehole->wrap(\&Number::FormatEng::format_pref,$safeeval,'&number_format_pref'); |
|
|
# use Data::Dumper; |
# use Data::Dumper; |
# $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper'); |
# $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper'); |
Line 814 sub init_safespace {
|
Line 832 sub init_safespace {
|
$safeeval->permit("require"); |
$safeeval->permit("require"); |
$safeinit .= ';$external::target="'.$target.'";'; |
$safeinit .= ';$external::target="'.$target.'";'; |
&Apache::run::run($safeinit,$safeeval); |
&Apache::run::run($safeinit,$safeeval); |
&initialize_rndseed($safeeval); |
my $rawrndseed = &initialize_rndseed($safeeval); |
|
if ($target eq 'grade') { |
|
$Apache::lonhomework::rawrndseed = $rawrndseed; |
|
} |
} |
} |
|
|
sub clean_safespace { |
sub clean_safespace { |
Line 853 sub initialize_rndseed {
|
Line 874 sub initialize_rndseed {
|
my $safeinit = '$external::randomseed="'.$rndseed.'";'; |
my $safeinit = '$external::randomseed="'.$rndseed.'";'; |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
&Apache::run::run($safeinit,$safeeval); |
&Apache::run::run($safeinit,$safeeval); |
|
return $rndseed; |
} |
} |
|
|
sub default_homework_load { |
sub default_homework_load { |
Line 974 sub decreasedepth {
|
Line 996 sub decreasedepth {
|
sub get_id { |
sub get_id { |
my ($parstack,$safeeval)=@_; |
my ($parstack,$safeeval)=@_; |
my $id= &Apache::lonxml::get_param('id',$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 -','"<tt>'.$id.'</tt>"')); |
&error(&mt('ID [_1] contains invalid characters. IDs are only allowed to contain letters, numbers, spaces and -','"<tt>'.$id.'</tt>"')); |
} |
} |
if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; } |
if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; } |
Line 1457 SIMPLECONTENT
|
Line 1479 SIMPLECONTENT
|
|
|
sub verify_html { |
sub verify_html { |
my ($filecontents)=@_; |
my ($filecontents)=@_; |
my ($is_html,$is_xml); |
my ($is_html,$is_xml,$is_physnet); |
if ($filecontents =~/(?:\<|\<\;)\?xml[^\<]*\?(?:\>|\>\;)/is) { |
if ($filecontents =~/(?:\<|\<\;)\?xml[^\<]*\?(?:\>|\>\;)/is) { |
$is_xml = 1; |
$is_xml = 1; |
} elsif ($filecontents =~/(?:\<|\<\;)html(?:\s+[^\<]+|\s*)(?:\>|\>\;)/is) { |
} elsif ($filecontents =~/(?:\<|\<\;)html(?:\s+[^\<]+|\s*)(?:\>|\>\;)/is) { |
$is_html = 1; |
$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 ?>'); |
return &mt('File does not have [_1] or [_2] starting tag','<html>','<?xml ?>'); |
} |
} |
if ($is_html) { |
if ($is_html) { |
Line 1509 sub renderingoptions {
|
Line 1533 sub renderingoptions {
|
('' => '', |
('' => '', |
'tth' => 'tth (TeX to HTML)', |
'tth' => 'tth (TeX to HTML)', |
'MathJax' => 'MathJax', |
'MathJax' => 'MathJax', |
'jsMath' => 'jsMath', |
|
'mimetex' => 'mimetex (Convert to Images)')}). |
'mimetex' => 'mimetex (Convert to Images)')}). |
'</span>'; |
'</span>'; |
return $output; |
return $output; |
Line 1622 $initialize
|
Line 1645 $initialize
|
$xml_help |
$xml_help |
</td></tr> |
</td></tr> |
</table> |
</table> |
<div class="LC_edit_problem_discards"> |
<div> |
<input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" /> |
<input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" /> |
$undo $htmlerror $deps_button $dragmath_button |
$undo $htmlerror $deps_button $dragmath_button |
</div> |
</div> |
<div class="LC_edit_problem_saves"> |
<div style="float:right"> |
<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> |
Line 1834 ENDNOTFOUND
|
Line 1857 ENDNOTFOUND
|
} |
} |
my $brcrum; |
my $brcrum; |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), |
my $text = 'Authoring Space'; |
'text' => 'Authoring Space'}, |
my $href = &Apache::loncommon::authorspace($request->uri); |
|
if ($env{'request.course.id'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($href eq "/priv/$cdom/$cnum/") { |
|
$text = 'Course Authoring Space'; |
|
} |
|
} |
|
$brcrum = [{'href' => $href, |
|
'text' => $text,}, |
{'href' => '', |
{'href' => '', |
'text' => $breadcrumbtext}]; |
'text' => $breadcrumbtext}]; |
} else { |
} else { |
Line 1896 ENDNOTFOUND
|
Line 1928 ENDNOTFOUND
|
'onload' => $add_to_onload, }); |
'onload' => $add_to_onload, }); |
my $header; |
my $header; |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
|
my $text = 'Authoring Space'; |
|
my $href = &Apache::loncommon::authorspace($request->uri); |
|
if ($env{'request.course.id'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($href eq "/priv/$cdom/$cnum/") { |
|
$text = 'Course Authoring Space'; |
|
} |
|
} |
$options{'bread_crumbs'} = [{ |
$options{'bread_crumbs'} = [{ |
'href' => &Apache::loncommon::authorspace($request->uri), |
'href' => $href, |
'text' => 'Authoring Space'}, |
'text' => $text}, |
{'href' => '', |
{'href' => '', |
'text' => $breadcrumbtext}]; |
'text' => $breadcrumbtext}]; |
$header = &Apache::loncommon::head_subbox( |
$header = &Apache::loncommon::head_subbox( |
Line 2054 sub error {
|
Line 2095 sub error {
|
my $declutter=&Apache::lonnet::declutter($env{'request.filename'}); |
my $declutter=&Apache::lonnet::declutter($env{'request.filename'}); |
my $baseurl = &Apache::lonnet::clutter($declutter); |
my $baseurl = &Apache::lonnet::clutter($declutter); |
my @userlist; |
my @userlist; |
foreach (keys %users) { |
foreach (keys(%users)) { |
my ($user,$domain) = split(/:/, $_); |
my ($user,$domain) = split(/:/, $_); |
push(@userlist,"$user:$domain"); |
push(@userlist,"$user:$domain"); |
my $key=$declutter.'_'.$user.'_'.$domain; |
my $key=$declutter.'_'.$user.'_'.$domain; |
Line 2254 sub register_insert {
|
Line 2295 sub register_insert {
|
|
|
sub dump_insertlist { |
sub dump_insertlist { |
my ($ext) = @_; |
my ($ext) = @_; |
open(XML,">/tmp/insertlist.xml.$ext"); |
open(XML,">","/tmp/insertlist.xml.$ext"); |
print XML ("<insertlist>"); |
print XML ("<insertlist>"); |
my $i=0; |
my $i=0; |
|
|