version 1.91, 2001/06/12 21:10:22
|
version 1.99, 2001/07/03 20:58:27
|
Line 10
|
Line 10
|
# 5/26 Gerd Kortemeyer |
# 5/26 Gerd Kortemeyer |
# 5/27 H. K. Ng |
# 5/27 H. K. Ng |
# 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/16 Gerd Kortemeyer |
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
Line 68 $evaluate = 1;
|
Line 70 $evaluate = 1;
|
# data structure for eidt mode, determines what tags can go into what other tags |
# data structure for eidt mode, determines what tags can go into what other tags |
%insertlist=(); |
%insertlist=(); |
|
|
#stores the list of active tag namespaces |
# stores the list of active tag namespaces |
@namespace=(); |
@namespace=(); |
|
|
|
# has the dynamic menu been updated to know about this resource |
|
$Apache::lonxml::registered=0; |
|
|
sub xmlbegin { |
sub xmlbegin { |
my $output=''; |
my $output=''; |
if ($ENV{'browser.mathml'}) { |
if ($ENV{'browser.mathml'}) { |
Line 100 sub fontsettings() {
|
Line 105 sub fontsettings() {
|
} |
} |
|
|
sub registerurl { |
sub registerurl { |
|
if ($Apache::lonxml::registered) { return ''; } |
if ($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) { |
if ($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) { |
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 146 ENDPARM
|
Line 152 ENDPARM
|
(2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)'); |
(2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)'); |
menu.switchbutton |
menu.switchbutton |
(2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)'); |
(2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)'); |
|
menu.switchbutton |
|
(9,1,'sbkm.gif','set','bookmark','set_bookmark()'); |
|
menu.switchbutton |
|
(9,2,'vbkm.gif','view','bookmark','edit_bookmarks()'); |
|
menu.switchbutton |
|
(9,3,'anot.gif','anno-','tations','annotate()'); |
$hwkadd |
$hwkadd |
} |
} |
|
|
Line 158 ENDPARM
|
Line 170 ENDPARM
|
menu.clearbut(7,2); |
menu.clearbut(7,2); |
menu.clearbut(7,3); |
menu.clearbut(7,3); |
menu.menucltim=menu.setTimeout( |
menu.menucltim=menu.setTimeout( |
'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);', |
'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+ |
|
'clearbut(9,1);clearbut(9,2);clearbut(9,3);', |
2000); |
2000); |
|
|
} |
} |
Line 215 sub printalltags {
|
Line 228 sub printalltags {
|
} |
} |
|
|
sub xmlparse { |
sub xmlparse { |
# $Apache::lonxml::debug=1; |
|
my ($target,$content_file_string,$safeinit,%style_for_target) = @_; |
my ($target,$content_file_string,$safeinit,%style_for_target) = @_; |
if ($target eq 'meta') { |
|
$Apache::lonxml::redirection = 0; |
&setup_globals($target); |
$Apache::lonxml::metamode = 1; |
|
$Apache::lonxml::evaluate = 1; |
|
$Apache::lonxml::import = 0; |
|
} elsif ($target eq 'grade') { |
|
&startredirection; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 1; |
|
$Apache::lonxml::import = 1; |
|
} elsif ($target eq 'modified') { |
|
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 0; |
|
$Apache::lonxml::import = 0; |
|
} else { |
|
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 1; |
|
$Apache::lonxml::import = 1; |
|
} |
|
#&printalltags(); |
#&printalltags(); |
my @pars = (); |
my @pars = (); |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::pwd=(); |
Line 289 sub xmlparse {
|
Line 282 sub xmlparse {
|
#clear out any tags that didn't end |
#clear out any tags that didn't end |
while ($token->[1] ne $stack[$#stack] && ($#stack > -1)) { |
while ($token->[1] ne $stack[$#stack] && ($#stack > -1)) { |
&Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']"); |
&Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']"); |
pop @stack;pop @parstack;&decreasedepth($token); |
&end_tag(\@stack,\@parstack,$token); |
} |
} |
|
|
if (exists $style_for_target{'/'."$token->[1]"}) { |
if (exists $style_for_target{'/'."$token->[1]"}) { |
Line 326 sub xmlparse {
|
Line 319 sub xmlparse {
|
$result = ''; |
$result = ''; |
} |
} |
if ($token->[0] eq 'E') { |
if ($token->[0] eq 'E') { |
pop @stack;pop @parstack;&decreasedepth($token); |
&end_tag(\@stack,\@parstack,$token); |
} |
} |
} |
} |
pop @pars; |
pop @pars; |
Line 374 sub recurse {
|
Line 367 sub recurse {
|
while ($tokenpat->[1] ne $innerstack[$#innerstack] |
while ($tokenpat->[1] ne $innerstack[$#innerstack] |
&& ($#innerstack > -1)) { |
&& ($#innerstack > -1)) { |
&Apache::lonxml::warning("Unbalanced tags in resource $innerstack['-1']"); |
&Apache::lonxml::warning("Unbalanced tags in resource $innerstack['-1']"); |
pop @innerstack;pop @innerparstack;&decreasedepth($tokenpat); |
&end_tag(\@innerstack,\@innerparstack,$tokenpat); |
} |
} |
$partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat, |
$partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat, |
\@innerstack, \@innerparstack, \@pat, |
\@innerstack, \@innerparstack, \@pat, |
Line 417 sub callsub {
|
Line 410 sub callsub {
|
{ |
{ |
my $sub1; |
my $sub1; |
no strict 'refs'; |
no strict 'refs'; |
if ($target eq 'edit' && $token->[0] eq 'S') { |
|
$currentstring = &Apache::edit::tag_start($target,$token,$tagstack, |
|
$parstack,$parser, |
|
$safeeval,$style); |
|
} |
|
my $tag=$token->[1]; |
my $tag=$token->[1]; |
my $space=$Apache::lonxml::alltags{$tag}; |
my $space=$Apache::lonxml::alltags{$tag}; |
if (!$space) { |
if (!$space) { |
Line 429 sub callsub {
|
Line 417 sub callsub {
|
$sub=~tr/A-Z/a-z/; |
$sub=~tr/A-Z/a-z/; |
$space=$Apache::lonxml::alltags{$tag} |
$space=$Apache::lonxml::alltags{$tag} |
} |
} |
if ($space) { |
|
#&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n"); |
my $deleted=0; |
$sub1="$space\:\:$sub"; |
$Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter); |
$Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter); |
if (($token->[0] eq 'S') && ($target eq 'modified')) { |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
$deleted=&Apache::edit::handle_delete($space,$target,$token,$tagstack, |
$parstack,$parser,$safeeval, |
$parstack,$parser,$safeeval, |
$style); |
$style); |
} else { |
} |
#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n"); |
if (!$deleted) { |
if ($metamode <1) { |
if ($space) { |
if (defined($token->[4]) && ($metamode < 1)) { |
#&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n"); |
$currentstring = $token->[4]; |
$sub1="$space\:\:$sub"; |
} else { |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
$currentstring = $token->[2]; |
$parstack,$parser,$safeeval, |
|
$style); |
|
} else { |
|
#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n"); |
|
if ($metamode <1) { |
|
if (defined($token->[4]) && ($metamode < 1)) { |
|
$currentstring = $token->[4]; |
|
} else { |
|
$currentstring = $token->[2]; |
|
} |
} |
} |
} |
} |
} |
# &Apache::lonxml::debug("nodefalt:$nodefault:"); |
# &Apache::lonxml::debug("nodefalt:$nodefault:"); |
if ($currentstring eq '' && $nodefault eq '') { |
if ($currentstring eq '' && $nodefault eq '') { |
if ($target eq 'edit') { |
if ($target eq 'edit') { |
&Apache::lonxml::debug("doing default edit for $token->[1]"); |
&Apache::lonxml::debug("doing default edit for $token->[1]"); |
if ($token->[0] eq 'S') { |
if ($token->[0] eq 'S') { |
$currentstring = &Apache::edit::tag_start($target,$token); |
$currentstring = &Apache::edit::tag_start($target,$token); |
} elsif ($token->[0] eq 'E') { |
} elsif ($token->[0] eq 'E') { |
$currentstring = &Apache::edit::tag_end($target,$token); |
$currentstring = &Apache::edit::tag_end($target,$token); |
} |
} |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
if ($token->[0] eq 'S') { |
if ($token->[0] eq 'S') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
$currentstring.=&Apache::edit::handle_insert(); |
$currentstring.=&Apache::edit::handle_insert(); |
} else { |
} else { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
} |
} |
} |
} |
} |
Line 469 sub callsub {
|
Line 466 sub callsub {
|
return $currentstring; |
return $currentstring; |
} |
} |
|
|
|
sub setup_globals { |
|
my ($target)=@_; |
|
$Apache::lonxml::registered = 0; |
|
if ($target eq 'meta') { |
|
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 1; |
|
$Apache::lonxml::evaluate = 1; |
|
$Apache::lonxml::import = 0; |
|
} elsif ($target eq 'grade') { |
|
&startredirection; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 1; |
|
$Apache::lonxml::import = 1; |
|
} elsif ($target eq 'modified') { |
|
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 0; |
|
$Apache::lonxml::import = 0; |
|
} elsif ($target eq 'edit') { |
|
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 0; |
|
$Apache::lonxml::import = 0; |
|
} else { |
|
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 1; |
|
$Apache::lonxml::import = 1; |
|
} |
|
} |
|
|
sub init_safespace { |
sub init_safespace { |
my ($target,$safeeval,$safehole,$safeinit) = @_; |
my ($target,$safeeval,$safehole,$safeinit) = @_; |
$safeeval->permit("entereval"); |
$safeeval->permit("entereval"); |
Line 507 sub init_safespace {
|
Line 535 sub init_safespace {
|
$safehole->wrap(\&Math::Random::random_noncentral_f,$safeeval,'&math_random_noncentral_f'); |
$safehole->wrap(\&Math::Random::random_noncentral_f,$safeeval,'&math_random_noncentral_f'); |
$safehole->wrap(\&Math::Random::random_normal,$safeeval,'&math_random_normal'); |
$safehole->wrap(\&Math::Random::random_normal,$safeeval,'&math_random_normal'); |
$safehole->wrap(\&Math::Random::random_permutation,$safeeval,'&math_random_permutation'); |
$safehole->wrap(\&Math::Random::random_permutation,$safeeval,'&math_random_permutation'); |
# $safehole->wrap(\&Math::Random::random_permuted_index,$safeeval,'&math_random_permuted_index'); |
$safehole->wrap(\&Math::Random::random_permuted_index,$safeeval,'&math_random_permuted_index'); |
$safehole->wrap(\&Math::Random::random_uniform,$safeeval,'&math_random_uniform'); |
$safehole->wrap(\&Math::Random::random_uniform,$safeeval,'&math_random_uniform'); |
$safehole->wrap(\&Math::Random::random_poisson,$safeeval,'&math_random_poisson'); |
$safehole->wrap(\&Math::Random::random_poisson,$safeeval,'&math_random_poisson'); |
$safehole->wrap(\&Math::Random::random_uniform_integer,$safeeval,'&math_random_uniform_integer'); |
$safehole->wrap(\&Math::Random::random_uniform_integer,$safeeval,'&math_random_uniform_integer'); |
Line 539 sub endredirection {
|
Line 567 sub endredirection {
|
pop @Apache::lonxml::outputstack; |
pop @Apache::lonxml::outputstack; |
} |
} |
|
|
|
sub end_tag { |
|
my ($tagstack,$parstack,$token)=@_; |
|
pop(@$tagstack); |
|
pop(@$parstack); |
|
&decreasedepth($token); |
|
} |
|
|
sub initdepth { |
sub initdepth { |
@Apache::lonxml::depthcounter=(); |
@Apache::lonxml::depthcounter=(); |
$Apache::lonxml::depth=-1; |
$Apache::lonxml::depth=-1; |
Line 806 ENDNOTFOUND
|
Line 841 ENDNOTFOUND
|
|
|
sub debug { |
sub debug { |
if ($Apache::lonxml::debug eq 1) { |
if ($Apache::lonxml::debug eq 1) { |
print "DEBUG:".$_[0]."<br />\n"; |
print("DEBUG:".$_[0]."<br />\n"); |
} |
} |
} |
} |
|
|
Line 855 sub register_insert {
|
Line 890 sub register_insert {
|
my $line = $data[$i]; |
my $line = $data[$i]; |
if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; } |
if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; } |
if ( $line =~ /TABLE/ ) { last; } |
if ( $line =~ /TABLE/ ) { last; } |
my ($tag,$descrip,$function,$show) = split(/,/, $line); |
my ($tag,$descrip,$color,$function,$show) = split(/,/, $line); |
$insertlist{"$tagnum.tag"} = $tag; |
$insertlist{"$tagnum.tag"} = $tag; |
$insertlist{"$tagnum.description"} = $descrip; |
$insertlist{"$tagnum.description"} = $descrip; |
|
$insertlist{"$tagnum.color"} = $color; |
$insertlist{"$tagnum.function"} = $function; |
$insertlist{"$tagnum.function"} = $function; |
$insertlist{"$tagnum.show"}= $show; |
$insertlist{"$tagnum.show"}= $show; |
|
$insertlist{"$tag.num"}=$tagnum; |
$tagnum++; |
$tagnum++; |
} |
} |
$i++; #skipping TABLE line |
$i++; #skipping TABLE line |
Line 878 sub register_insert {
|
Line 915 sub register_insert {
|
$tagnum++; |
$tagnum++; |
} |
} |
} |
} |
|
|
|
sub description { |
|
my ($token)=@_; |
|
return $insertlist{$insertlist{"$token->[1].num"}.'.description'}; |
|
} |
1; |
1; |
__END__ |
__END__ |
|
|