--- loncom/xml/lonxml.pm 2001/10/26 17:09:04 1.136 +++ loncom/xml/lonxml.pm 2001/11/29 21:38:17 1.140 @@ -1,6 +1,41 @@ # The LearningOnline Network with CAPA # XML Parser Module # +# $Id: lonxml.pm,v 1.140 2001/11/29 21:38:17 albertel Exp $ +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# +# Copyright for TtHfunc and TtMfunc by Ian Hutchinson. +# TtHfunc and TtMfunc (the "Code") may be compiled and linked into +# binary executable programs or libraries distributed by the +# Michigan State University (the "Licensee"), but any binaries so +# distributed are hereby licensed only for use in the context +# of a program or computational system for which the Licensee is the +# primary author or distributor, and which performs substantial +# additional tasks beyond the translation of (La)TeX into HTML. +# The C source of the Code may not be distributed by the Licensee +# to any other parties under any circumstances. +# # last modified 06/26/00 by Alexander Sakharuk # 11/6 Gerd Kortemeyer # 6/1/1 Gerd Kortemeyer @@ -95,8 +130,6 @@ sub xmlbegin { } else { $output=''; } - my $date=localtime; - $output .=&Apache::loncommon::cacheheader(); return $output; } @@ -430,11 +463,11 @@ sub htmlclean { my $tree = HTML::TreeBuilder->new; $tree->ignore_unknown(0); - + $tree->parse($raw); my $output= $tree->as_HTML(undef,' '); - + $output=~s/\<(br|hr|img|meta|allow)([^\>\/]*)\>/\<$1$2 \/\>/gis; $output=~s/\<\/(br|hr|img|meta|allow)\>//gis; unless ($full) { @@ -462,14 +495,14 @@ sub inner_xmlparse { $result=$token->[2]; } } elsif ($token->[0] eq 'S') { - # add tag to stack + # add tag to stack push (@$stack,$token->[1]); # add parameters list to another stack push (@$parstack,&parstring($token)); - &increasedepth($token); + &increasedepth($token); if (exists $$style_for_target{$token->[1]}) { if ($Apache::lonxml::redirection) { - $Apache::lonxml::outputstack['-1'] .= + $Apache::lonxml::outputstack['-1'] .= &recurse($$style_for_target{$token->[1]},$target,$safeeval, $style_for_target,@$parstack); } else { @@ -479,15 +512,15 @@ sub inner_xmlparse { } else { $result = &callsub("start_$token->[1]", $target, $token, $stack, $parstack, $pars, $safeeval, $style_for_target); - } + } } elsif ($token->[0] eq 'E') { #clear out any tags that didn't end while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) { - &Apache::lonxml::warning("Unbalanced tags in resource $$stack['-1']"); + &Apache::lonxml::warning('Missing tag </'.$$stack['-1'].'> in file'); &end_tag($stack,$parstack,$token); } - - if (exists $$style_for_target{'/'."$token->[1]"}) { + + if (exists($$style_for_target{'/'."$token->[1]"})) { if ($Apache::lonxml::redirection) { $Apache::lonxml::outputstack['-1'] .= &recurse($$style_for_target{'/'."$token->[1]"}, @@ -497,7 +530,6 @@ sub inner_xmlparse { $target,$safeeval,$style_for_target, @$parstack); } - } else { $result = &callsub("end_$token->[1]", $target, $token, $stack, $parstack, $pars,$safeeval, $style_for_target); @@ -548,6 +580,7 @@ sub recurse { my $partstring = ''; my $output=''; my $decls=''; + &Apache::lonxml::debug("Recursing"); while ( $#pat > -1 ) { while ($tokenpat = $pat[$#pat]->get_token) { if (($tokenpat->[0] eq 'T') || ($tokenpat->[0] eq 'C') || ($tokenpat->[0] eq 'D') ) { @@ -565,7 +598,7 @@ sub recurse { #clear out any tags that didn't end while ($tokenpat->[1] ne $innerstack[$#innerstack] && ($#innerstack > -1)) { - &Apache::lonxml::warning("Unbalanced tags in resource $innerstack['-1']"); + &Apache::lonxml::warning('Missing tag </'.$innerstack['-1'].'> in style'); &end_tag(\@innerstack,\@innerparstack,$tokenpat); } $partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat, @@ -599,6 +632,7 @@ sub recurse { pop @pat; pop @Apache::lonxml::pwd; } + &Apache::lonxml::debug("Exiting Recursing"); return $output; } @@ -810,7 +844,7 @@ sub decreasedepth { $Apache::lonxml::olddepth=$Apache::lonxml::depth+1; } if ( $Apache::lonxml::depth < -1) { - &Apache::lonxml::warning("Unbalanced tags in resource"); + &Apache::lonxml::warning("Missing tags, unable to properly run file."); $Apache::lonxml::depth='-1'; } my $curdepth=join('_',@Apache::lonxml::depthcounter); @@ -1010,7 +1044,7 @@ sub handler { } else { $request->content_type('text/html'); } - + &Apache::loncommon::no_cache($request); $request->send_http_header; return OK if $request->header_only; @@ -1163,7 +1197,15 @@ sub register_insert { sub description { my ($token)=@_; - return $insertlist{$insertlist{"$token->[1].num"}.'.description'}; + my $tagnum; + my $tag=$token->[1]; + foreach my $namespace (reverse @Apache::lonxml::namespace) { + my $testtag=$namespace.'::'.$tag; + $tagnum=$insertlist{"$testtag.num"}; + if (defined($tagnum)) { last; } + } + if (!defined ($tagnum)) { $tagnum=$Apache::lonxml::insertlist{"$tag.num"}; } + return $insertlist{$tagnum.'.description'}; } # ----------------------------------------------------------------- whichuser