--- rat/lonpage.pm 2000/09/15 20:03:48 1.5 +++ rat/lonpage.pm 2000/09/16 17:42:01 1.6 @@ -4,26 +4,32 @@ # (TeX Content Handler # # 05/29/00,05/30 Gerd Kortemeyer) -# 08/30,08/31,09/06,09/14,09/15 Gerd Kortemeyer +# 08/30,08/31,09/06,09/14,09/15,09/16 Gerd Kortemeyer package Apache::lonpage; use strict; use Apache::Constants qw(:common :http); use Apache::lonnet(); +use HTML::TokeParser; use GDBM_File; # -------------------------------------------------------------- Module Globals my %hash; my @rows; - -my %ssibody=(); -my %ssibgcolor=(); -my %ssitext=(); -my %ssilink=(); -my %ssivlink=(); -my %ssialink=(); -my %cellemb=(); + +# ------------------------------------------------------------------ Euclid gcd + +sub euclid { + my ($e,$f)=@_; + my $a; my $b; my $r; + if ($e>$f) { $b=$e; $r=$f; } else { $r=$e; $b=$f; } + while ($r!=0) { + $a=$b; $b=$r; + $r=$a%$b; + } + return $b; +} # ------------------------------------------------------------ Build page table @@ -76,17 +82,6 @@ sub tracetable { return $further; } -sub cell { - my ($r,$colspan,$rid)=@_; - $r->print('print('>'.$ssibody{$rid}); - } elsif ($cellemb{$rid} eq 'img') { - $r->print('>'); - } - $r->print(''); -} - # ================================================================ Main Handler sub handler { @@ -129,14 +124,24 @@ sub handler { my $i; my $j; - my $maxcols=-1; + my $lcm=1; + my $contents=0; + + my %ssibody=(); + my %ssibgcolor=(); + my %ssitext=(); + my %ssilink=(); + my %ssivlink=(); + my %ssialink=(); + my %cellemb=(); # --------------------------------------------- Get SSI output, post parameters for ($i=0;$i<=$#rows;$i++) { if ($rows[$i]) { + $contents++; my @colcont=split(/\&/,$rows[$i]); - $maxcols=$#colcont>$maxcols?$#colcont:$maxcols; + $lcm*=($#colcont+1)/euclid($lcm,($#colcont+1)); map { my $src=$hash{'src_'.$_}; $src=~/\.(\w+)$/; @@ -153,7 +158,25 @@ sub handler { } } keys %ENV; my $output=Apache::lonnet::ssi($src,%posthash); - + my $parser=HTML::TokeParser->new(\$output); + my $token; + my $bodydef=0; + while (($bodydef==0) && + ($token=$parser->get_token)) { + if ($token->[1] eq 'body') { + $bodydef=1 + } + if ($token->[1] eq 'meta') { + } + if ($token->[1] eq 'script') { + } + if ($token->[1] eq 'basefont') { + } + } + if ($output=~/\]*\>(.*)/si) { + $output=$1; + } + $output=~s/\<\/body\>.*//si; $ssibody{$_}=$output; # ---------------------------------------------------------------- End SSI cell @@ -161,29 +184,33 @@ sub handler { } @colcont; } } - if ($maxcols<0) { + unless ($contents) { $r->content_type('text/html'); $r->send_http_header; $r->print('Empty page.'); } else { # ------------------------------------------------------------------ Build page - $maxcols++; $r->content_type('text/html'); $r->send_http_header; $r->print(''); - $r->print(''); + $r->print('
'); for ($i=0;$i<=$#rows;$i++) { if ($rows[$i]) { $r->print("\n"); my @colcont=split(/\&/,$rows[$i]); - my $avespan=int($maxcols/($#colcont+1)); - my $lastspan=$maxcols-$avespan*$#colcont; - for ($j=0;$j<$#colcont;$j++) { - &cell($r,$avespan,$colcont[$j]); + my $avespan=$lcm/($#colcont+1); + for ($j=0;$j<=$#colcont;$j++) { + my $rid=$colcont[$j]; + $r->print(''); } - &cell($r,$lastspan,$colcont[$#colcont]); $r->print(''); } }
print('>'.$ssibody{$rid}); + } elsif ($cellemb{$rid} eq 'img') { + $r->print('>'); + } + $r->print('