version 1.442, 2007/04/07 00:04:40
|
version 1.449.2.1, 2007/09/05 01:03:21
|
Line 42 package Apache::lonxml;
|
Line 42 package Apache::lonxml;
|
use vars |
use vars |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $errorcount $warningcount); |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $errorcount $warningcount); |
use strict; |
use strict; |
|
use LONCAPA; |
use HTML::LCParser(); |
use HTML::LCParser(); |
use HTML::TreeBuilder(); |
use HTML::TreeBuilder(); |
use HTML::Entities(); |
use HTML::Entities(); |
Line 124 $evaluate = 1;
|
Line 125 $evaluate = 1;
|
# stores the list of active tag namespaces |
# stores the list of active tag namespaces |
@namespace=(); |
@namespace=(); |
|
|
|
# stores all Scrit Vars displays for later showing |
|
my @script_var_displays=(); |
|
|
# a pointer the the Apache request object |
# a pointer the the Apache request object |
$Apache::lonxml::request=''; |
$Apache::lonxml::request=''; |
|
|
Line 315 sub xmlparse {
|
Line 319 sub xmlparse {
|
} |
} |
} |
} |
} |
} |
} elsif ($env{'construct.style'} && ($env{'request.state'} eq 'construct')) { |
} elsif ($env{'construct.style'} |
|
&& ($env{'request.state'} eq 'construct')) { |
my $location=&Apache::lonnet::filelocation('',$env{'construct.style'}); |
my $location=&Apache::lonnet::filelocation('',$env{'construct.style'}); |
my $styletext=&Apache::lonnet::getfile($location); |
my $styletext=&Apache::lonnet::getfile($location); |
if ($styletext ne '-1') { |
if ($styletext ne '-1') { |
%style_for_target = (%style_for_target, |
%style_for_target = (%style_for_target, |
&Apache::style::styleparser($target,$styletext)); |
&Apache::style::styleparser($target,$styletext)); |
} |
} |
} |
} |
#&printalltags(); |
#&printalltags(); |
my @pars = (); |
my @pars = (); |
Line 356 sub xmlparse {
|
Line 361 sub xmlparse {
|
|
|
&clean_safespace($safeeval); |
&clean_safespace($safeeval); |
|
|
|
if (@script_var_displays) { |
|
$finaloutput .= join('',@script_var_displays); |
|
undef(@script_var_displays); |
|
} |
|
|
if ($env{'form.return_only_error_and_warning_counts'}) { |
if ($env{'form.return_only_error_and_warning_counts'}) { |
return "$errorcount:$warningcount"; |
return "$errorcount:$warningcount"; |
} |
} |
Line 598 sub callsub {
|
Line 608 sub callsub {
|
} |
} |
} |
} |
if ($token->[0] eq 'S') { |
if ($token->[0] eq 'S') { |
$currentstring.=&Apache::edit::handle_insert(); |
$currentstring.=&Apache::edit::handle_insert(); |
} elsif ($token->[0] eq 'E') { |
} elsif ($token->[0] eq 'E') { |
$currentstring.=&Apache::edit::handle_insertafter($token->[1]); |
$currentstring.=&Apache::edit::handle_insertafter($token->[1]); |
} |
} |
} |
} |
} |
} |
Line 619 sub setup_globals {
|
Line 629 sub setup_globals {
|
&init_counter(); |
&init_counter(); |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::extlinks=(); |
@Apache::lonxml::extlinks=(); |
|
@script_var_displays=(); |
@Apache::lonxml::ssi_info=(); |
@Apache::lonxml::ssi_info=(); |
$Apache::lonxml::post_evaluate=1; |
$Apache::lonxml::post_evaluate=1; |
$Apache::lonxml::warnings_error_header=''; |
$Apache::lonxml::warnings_error_header=''; |
Line 957 sub decreasedepth {
|
Line 968 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 =~ /(\.|_)/) { |
if ($env{'request.state'} eq 'construct' && $id =~ /([._]|[^\w\d\s[:punct:]])/) { |
&error(&mt("IDs are not allowed to contain "<tt>_</tt>" or "<tt>.</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; } |
return $id; |
return $id; |
Line 996 sub get_all_text_unbalanced {
|
Line 1007 sub get_all_text_unbalanced {
|
return $result |
return $result |
} |
} |
|
|
|
=pod |
|
|
|
For bubble grading mode and exam bubble printing mode, the tracking of |
|
the current 'bubble line number' is stored in the %env element |
|
'form.counter', and is modifed and handled by the following routines. |
|
|
|
The value of it is stored in $Apache:lonxml::counter when live and |
|
stored back to env after done. |
|
|
|
=item &increment_counter($increment); |
|
|
|
Increments the internal counter environment variable a specified amount |
|
|
|
Optional Arguments: |
|
$increment - amount to increment by (defaults to 1) |
|
|
|
=cut |
|
|
sub increment_counter { |
sub increment_counter { |
my ($increment) = @_; |
my ($increment) = @_; |
if (defined($increment) && $increment gt 0) { |
if (defined($increment) && $increment gt 0) { |
Line 1006 sub increment_counter {
|
Line 1035 sub increment_counter {
|
$Apache::lonxml::counter_changed=1; |
$Apache::lonxml::counter_changed=1; |
} |
} |
|
|
|
=pod |
|
|
|
=item &init_counter($increment); |
|
|
|
Initialize the internal counter environment variable |
|
|
|
=cut |
|
|
sub init_counter { |
sub init_counter { |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$Apache::lonxml::counter=1; |
$Apache::lonxml::counter=1; |
Line 1208 sub writeallows {
|
Line 1245 sub writeallows {
|
my %httpref=(); |
my %httpref=(); |
foreach (@extlinks) { |
foreach (@extlinks) { |
$httpref{'httpref.'. |
$httpref{'httpref.'. |
&Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl; |
&Apache::lonnet::hreflocation($thisdir,&unescape($_))}=$thisurl; |
} |
} |
@extlinks=(); |
@extlinks=(); |
&Apache::lonnet::appenv(%httpref); |
&Apache::lonnet::appenv(%httpref); |
Line 1227 sub do_registered_ssi {
|
Line 1264 sub do_registered_ssi {
|
&Apache::lonnet::ssi($url,%form); |
&Apache::lonnet::ssi($url,%form); |
} |
} |
} |
} |
|
|
|
sub add_script_result { |
|
my ($display) = @_; |
|
push(@script_var_displays, $display); |
|
} |
|
|
# |
# |
# Afterburner handles anchors, highlights and links |
# Afterburner handles anchors, highlights and links |
# |
# |
Line 1471 ENDNOTFOUND
|
Line 1514 ENDNOTFOUND
|
['editmode']); |
['editmode']); |
} |
} |
if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) { |
if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) { |
|
&Apache::structuretags::reset_problem_globals(); |
$result = &Apache::lonxml::xmlparse($request,$target,$filecontents, |
$result = &Apache::lonxml::xmlparse($request,$target,$filecontents, |
'',%mystyle); |
'',%mystyle); |
undef($Apache::lonhomework::parsing_a_task); |
# .html files may contain <problem> or <Task> need to clean |
|
# up if it did |
|
&Apache::structuretags::reset_problem_globals(); |
|
&Apache::lonhomework::finished_parsing(); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['rawmode']); |
['rawmode']); |
if ($env{'form.rawmode'}) { $result = $filecontents; } |
if ($env{'form.rawmode'}) { $result = $filecontents; } |
Line 1698 sub get_param_var {
|
Line 1745 sub get_param_var {
|
} |
} |
} |
} |
|
|
sub register_insert_tab { |
|
my @data = split /\n/, &Apache::lonnet::getfile('/home/httpd/lonTabs/insertlist.tab'); |
|
my $i; |
|
my $tagnum=0; |
|
my @order; |
|
for ($i=0;$i < $#data; $i++) { |
|
my $line = $data[$i]; |
|
if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; } |
|
if ( $line =~ /TABLE/ ) { last; } |
|
my ($tag,$descrip,$color,$function,$show,$helpfile,$helpdesc) = split(/,/, $line); |
|
if ($tag) { |
|
$insertlist{"$tagnum.tag"} = $tag; |
|
$insertlist{"$tag.description"} = $descrip; |
|
$insertlist{"$tag.color"} = $color; |
|
$insertlist{"$tag.function"} = $function; |
|
if (!defined($show)) { $show='yes'; } |
|
$insertlist{"$tag.show"}= $show; |
|
$insertlist{"$tag.helpfile"} = $helpfile; |
|
$insertlist{"$tag.helpdesc"} = $helpdesc; |
|
$insertlist{"$tag.num"}=$tagnum; |
|
$tagnum++; |
|
} |
|
} |
|
$i++; #skipping TABLE line |
|
$tagnum = 0; |
|
for (;$i < $#data;$i++) { |
|
my $line = $data[$i]; |
|
my ($mnemonic,@which) = split(/ +/,$line); |
|
my $tag = $insertlist{"$tagnum.tag"}; |
|
for (my $j=0;$j <=$#which;$j++) { |
|
if ( $which[$j] eq 'Y' ) { |
|
if ($insertlist{"$j.show"} ne 'no') { |
|
push(@{ $insertlist{"$tag.which"} },$insertlist{"$j.tag"}); |
|
} |
|
} |
|
} |
|
$tagnum++; |
|
} |
|
} |
|
|
|
sub register_insert_xml { |
sub register_insert_xml { |
my $parser = HTML::LCParser->new($Apache::lonnet::perlvar{'lonTabDir'} |
my $parser = HTML::LCParser->new($Apache::lonnet::perlvar{'lonTabDir'} |
.'/insertlist.xml'); |
.'/insertlist.xml'); |
Line 1783 sub register_insert_xml {
|
Line 1790 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"})); |
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 ($insertlist{"$element.show"} ne 'no') { |
if (!exists($insertlist{"$element.show"}) |
|
|| $insertlist{"$element.show"} ne 'no') { |
push(@{ $insertlist{$tag.'.which'} },$element); |
push(@{ $insertlist{$tag.'.which'} },$element); |
} |
} |
} |
} |
Line 1794 sub register_insert_xml {
|
Line 1803 sub register_insert_xml {
|
} |
} |
|
|
sub register_insert { |
sub register_insert { |
# ®ister_insert_tab(@_); |
|
# &dump_insertlist('1'); |
|
# undef(%insertlist); |
|
return ®ister_insert_xml(@_); |
return ®ister_insert_xml(@_); |
# &dump_insertlist('2'); |
# &dump_insertlist('2'); |
} |
} |