--- loncom/xml/londefdef.pm 2005/08/07 16:53:07 1.284 +++ loncom/xml/londefdef.pm 2005/09/22 10:27:25 1.287 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.284 2005/08/07 16:53:07 albertel Exp $ +# $Id: londefdef.pm,v 1.287 2005/09/22 10:27:25 foxr Exp $ # # # Copyright Michigan State University Board of Trustees @@ -55,6 +55,7 @@ BEGIN { } + sub initialize_londefdef { $Apache::londefdef::TD_redirection=0; @Apache::londefdef::table = (); @@ -166,6 +167,7 @@ sub start_html { '\usepackage{textcomp}'. '\usepackage{makeidx}'. '\usepackage[dvips]{graphicx}'. + '\usepackage{wrapfig}'. '\usepackage{picins}'. '\usepackage{epsfig}'. '\usepackage{calc}'. @@ -1205,6 +1207,9 @@ sub start_br { } elsif ($target eq 'tex') { my @tempo=@$tagstack; my $signal=0; + # Not going to factor this to is_inside_of since that would require + # multiple stack traversals. + # for (my $i=$#tempo;$i>=0;$i--) { if (($tempo[$i] eq 'b') || ($tempo[$i] eq 'strong') || ($tempo[$i] eq 'ol') || ($tempo[$i] eq 'ul') || @@ -2559,7 +2564,11 @@ sub start_img { $safeeval, undef,1)); if(!$align) { - $align = "bottom"; # This is html's default so it's ours too. + if (&is_inside_of($tagstack, "table")) { + $align = "right"; # Force wraptext use. + } else { + $align = "bottom"; # This is html's default so it's ours too. + } } # &Apache::lonxml::debug("Alignemnt = $align"); @@ -2617,16 +2626,17 @@ sub start_img { } elsif ($align eq "left") { if ($latex_rendering eq "parpic") { $currentstring = '\parpic[l]{'.$currentstring.'}'; - } else { # parbox rendering - $currentstring = "\\strut\\newline\n". - '\parbox{'.$width_param.'mm}{'.$currentstring.'}'; + } else { # wrapfig render + $currentstring = '\begin{wrapfigure}{l}{'.$width_param.'mm}' + .'\scalebox{1.0}{'.$currentstring.'}\end{wrapfigure}'; } } elsif ($align eq "right") { if ($latex_rendering eq "parpic") { $currentstring = '\parpic[r]{'.$currentstring.'}'; - } else { # parbox rendering. - $currentstring = '\parbox{'.$width_param.'mm}{\begin{flushright}' - .$currentstring.'\end{flushright}} \newline'."\n"; + } else { # wrapfig rendering + $currentstring = '\begin{wrapfigure}{r}{'.$width_param.'mm}' + .'\scalebox{1.0}{'.$currentstring.'}\end{wrapfigure}'; + } } else { # Bottom is also default. # $currentstring = '\raisebox{'.$height_param.'mm}{'.$currentstring.'}'; @@ -3965,6 +3975,13 @@ sub image_height { sub get_eps_image { my ($src)=@_; my $orig_src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1], $src); + + # In order to prevent the substitution of the alt text, we need to + # be sure the orig_src file is on system now so: + + if (! -e $orig_src) { + &Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal. + } &Apache::lonxml::debug("get_eps_image: Original image: $orig_src"); my ($spath, $sname, $sext) = fileparse($src, qr/\.(gif|png|jpg|jpeg)/i); $src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i; @@ -4082,6 +4099,26 @@ sub LATEX_length { } +# is_inside_of $tagstack $tag +# This sub returns true if the current state of Xml processing +# is inside of the tag. +# Parameters: +# tagstack - The tagstack from the parser. +# tag - The tag (without the <>'s.). +# Sample usage: +# if (is_inside_of($tagstack "table")) { +# # I'm in a table.... +# } +sub is_inside_of { + my ($tagstack, $tag) = @_; + my @stack = @$tagstack; + for (my $i = ($#stack - 1); $i >= 0; $i--) { + if ($stack[$i] eq $tag) { + return 1; + } + } + return 0; +} 1;