--- loncom/xml/lonxml.pm 2001/03/27 16:57:20 1.63 +++ loncom/xml/lonxml.pm 2001/03/29 20:47:06 1.66 @@ -5,6 +5,7 @@ # 11/6 Gerd Kortemeyer # 6/1/1 Gerd Kortemeyer # 2/21,3/13 Guy +# 3/29 Gerd Kortemeyer package Apache::lonxml; use vars @@ -29,7 +30,7 @@ sub register { sub printalltags { my $temp; foreach $temp (sort keys %Apache::lonxml::alltags) { -# &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}"); + &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}"); } } use Apache::style; @@ -106,9 +107,7 @@ sub xmlparse { # add parameters list to another stack push (@parstack,&parstring($token)); &increasedepth($token); -# &Apache::lonxml::debug("Checking for $token->[1] style"); if (exists $style_for_target{$token->[1]}) { -# &Apache::lonxml::debug("Found $token->[1] style"); if ($Apache::lonxml::redirection) { $Apache::lonxml::outputstack['-1'] .= &recurse($style_for_target{$token->[1]},$target,$safeeval, @@ -118,7 +117,6 @@ sub xmlparse { $safeeval,\%style_for_target,@parstack); } } else { -# &Apache::lonxml::debug("No style for for $token->[1]"); $result = &callsub("start_$token->[1]", $target, $token,\@parstack, \@pars, $safeeval, \%style_for_target); } @@ -304,7 +302,7 @@ sub increasedepth { $Apache::lonxml::olddepth=$Apache::lonxml::depth; } my $curdepth=join('_',@Apache::lonxml::depthcounter); -# &Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n"); + &Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n"); #print "
s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n"; } @@ -320,7 +318,7 @@ sub decreasedepth { $Apache::lonxml::depth='-1'; } my $curdepth=join('_',@Apache::lonxml::depthcounter); -# &Apache::lonxml::debug("e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"); + &Apache::lonxml::debug("e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"); #print "
e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"; } @@ -410,17 +408,63 @@ sub writeallows { &Apache::lonnet::appenv(%httpref); } +# +# Afterburner handles anchors, highlights and links +# + +sub afterburn { + my $result=shift; + map { + my ($name, $value) = split(/=/,$_); + $value =~ tr/+/ /; + $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; + if (($name eq 'highlight')||($name eq 'anchor')||($name eq 'link')) { + unless ($ENV{'form.'.$name}) { + $ENV{'form.'.$name}=$value; + } + } + } (split(/&/,$ENV{'QUERY_STRING'})); + if ($ENV{'form.highlight'}) { + map { + my $anchorname=$_; + my $matchthis=$anchorname; + $matchthis=~s/\_+/\\s\+/g; + $result=~s/($matchthis)/\$1\<\/font\>/gs; + } split(/\,/,$ENV{'form.highlight'}); + } + if ($ENV{'form.link'}) { + map { + my ($anchorname,$linkurl)=split(/\>/,$_); + my $matchthis=$anchorname; + $matchthis=~s/\_+/\\s\+/g; + $result=~s/($matchthis)/\$1\<\/a\>/gs; + } split(/\,/,$ENV{'form.link'}); + } + if ($ENV{'form.anchor'}) { + my $anchorname=$ENV{'form.anchor'}; + my $matchthis=$anchorname; + $matchthis=~s/\_+/\\s\+/g; + $result=~s/($matchthis)/\$1\<\/a\>/s; + $result.=(<<"ENDSCRIPT"); + +ENDSCRIPT + } + return $result; +} + sub handler { my $request=shift; - my $target='tex'; - $Apache::lonxml::debug=1; + my $target='web'; + $Apache::lonxml::debug=0; if ($ENV{'browser.mathml'}) { $request->content_type('text/xml'); } else { $request->content_type('text/html'); } - + # $request->print(< # @@ -430,20 +474,12 @@ sub handler { #ENDHEADER # &Apache::lonhomework::send_header($request); $request->send_http_header; - + return OK if $request->header_only; -## $request->print(&Apache::lontexconvert::header()); - -## $request->print(''."\n"); - - if ($target eq 'tex') { - - - - } else { - $request->print(&Apache::lontexconvert::header()); - $request->print(''."\n"); + if ($target eq 'web') { + $request->print(&Apache::lontexconvert::header()); + $request->print(''."\n"); } my $file=&Apache::lonnet::filelocation("",$request->uri); @@ -456,17 +492,22 @@ sub handler { } else { $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle); } +# +# Afterburner +# + if ($ENV{'QUERY_STRING'}) { + $result=&afterburn($result); + } $request->print($result); -## $request->print(''); if ($target eq 'tex') { # $request->print('\end{document}'."\n"); - } else { + } elsif ($target eq 'web') { $request->print(''); $request->print(&Apache::lontexconvert::footer()); } -## $request->print(&Apache::lontexconvert::footer()); + writeallows($request->uri); return OK; }