--- loncom/xml/londefdef.pm 2002/07/11 14:40:14 1.69 +++ loncom/xml/londefdef.pm 2002/07/24 20:23:21 1.77 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.69 2002/07/11 14:40:14 sakharuk Exp $ +# $Id: londefdef.pm,v 1.77 2002/07/24 20:23:21 sakharuk Exp $ # # # Copyright Michigan State University Board of Trustees @@ -48,6 +48,7 @@ use Apache::lonnet; use strict; use Apache::lonxml; use Apache::File(); +use Image::Magick; BEGIN { @@ -73,7 +74,7 @@ sub start_m { my $currentstring = ''; if ($target eq 'web') { $Apache::lonxml::prevent_entity_encode++; - my $inside = &Apache::lonxml::get_all_text("/m",$$parser[-1]); + my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); $inside ='\\documentstyle{article}'.$inside; &Apache::lonxml::debug("M is starting with:$inside:"); my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); @@ -89,7 +90,10 @@ sub start_m { } #&Apache::lonxml::debug("M is ends with:$currentstring:"); } elsif ($target eq 'tex') { - $currentstring = ""; + $currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); + if ($currentstring=~/\s*\\\\\s*/) {$currentstring = ' \vskip 0 mm ';} + } else { + my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); } return $currentstring; } @@ -119,7 +123,8 @@ sub end_m { } elsif ($target eq 'tex') { @Apache::londefdef::table = (); $currentstring .= '\documentclass[letterpaper]{article} - \newcommand{\keephidden}[1]{} + \newcommand{\keephidden}[1]{} + \renewcommand{\deg}{$^{\circ}$} \usepackage[dvips]{graphicx} \usepackage{epsfig}\usepackage{calc}'; } @@ -834,12 +839,14 @@ EDITBUTTON } #--
tag sub start_br { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\vskip 0 mm'; + if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') { + $currentstring .= '\vskip 0 mm'; + } } elsif ($target eq 'latexsource') { $currentstring .= '\\'; } @@ -948,7 +955,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + $currentstring .= '\underline{'; } return $currentstring; } @@ -958,7 +965,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring .= '}'; } return $currentstring; } @@ -969,7 +976,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + $currentstring .= '\underline{'; } return $currentstring; } @@ -979,7 +986,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring .= '}'; } return $currentstring; } @@ -1032,7 +1039,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "\\hline "; + $currentstring .= '\vskip 0 mm \noindent\makebox[\textwidth - 8 mm][b]{\hrulefill}'; } return $currentstring; } @@ -1109,7 +1116,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + $currentstring .= '\underline{'; } return $currentstring; } @@ -1119,7 +1126,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring .= '}'; } return $currentstring; } @@ -1310,7 +1317,17 @@ EDITBUTTON chop $output; $output .= ' \\\\ '; } - $Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}'; + my @length = split(/,/,$Apache::londefdef::table[-1]{'length'}); + my $how_many_columns = $#length+1; + my $parboxlength = '(\textwidth'; + for (my $io=0; $io<=$#length;$io++) { + if ($length[$io] ne '') { + $parboxlength .= ' - '.$length[$io].' '; + } + } + $parboxlength .= ')/'.$how_many_columns.' - 7 mm'; + $output =~ s/\\parbox{}/\\parbox{$parboxlength}/g; + $Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}\vskip 0 mm '; if ($#Apache::londefdef::table > 0) { $inmemory = $Apache::londefdef::table[-1]{'output'}; pop @Apache::londefdef::table; @@ -1339,6 +1356,7 @@ EDITBUTTON } push ( @{ $Apache::londefdef::table[-1]{'rowdata'} }, $Apache::londefdef::table[-1]{'hinc'}); $Apache::londefdef::table[-1]{'counter_columns'} = -1; + $Apache::londefdef::table[-1]{'length'} = ''; #just added } return $currentstring; @@ -1379,7 +1397,10 @@ EDITBUTTON } elsif ($target eq 'tex') { my $current_row = $Apache::londefdef::table[-1]{'row_number'}; my $data=&Apache::lonxml::endredirection(); - @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= $data.' '.$Apache::londefdef::table[-1]{'vinc'}; + if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) { #just added + $Apache::londefdef::table[-1]{'length'} .= $1.','; #just added + } #just added + @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; } return $currentstring; } @@ -1409,7 +1430,10 @@ EDITBUTTON } elsif ($target eq 'tex') { my $current_row = $Apache::londefdef::table[-1]{'row_number'}; my $data=&Apache::lonxml::endredirection(); - @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\bf{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; + if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) { #just added + $Apache::londefdef::table[-1]{'length'} .= $1.','; #just added + } #just added + @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{\textbf{'.$data.'}} '.$Apache::londefdef::table[-1]{'vinc'}; } return $currentstring; } @@ -1428,18 +1452,11 @@ EDITBUTTON } elsif ($target eq 'tex') { my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval); $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); - if ($src=~m/\.(gif|GIF)$/) { - my $gif_file = Apache::File->new($src); - binmode ($gif_file); - my ($buff,$imagesize); - read ($gif_file,$buff,6); - read ($gif_file,$imagesize,4); - my ($xlsb,$xmsb,$ylsb,$ymsb) = split(//,$imagesize); - my $image_width=ord($xlsb)+ord($xmsb)*256; - my $image_height=ord($ylsb)+ord($ymsb)*256; - $width_param = $image_width * $scaling; #default value of the picture's width - $height_param = $image_height * $scaling; #default value of the picture's height - } + my $image = Image::Magick->new; + my $current_figure = $image->Read($src); + $width_param = $image->Get('width') * $scaling;; + $height_param = $image->Get('height') * $scaling;; + undef $image; my $epssrc = $src; $epssrc =~ s/(\.gif|\.jpg)$/\.eps/i; if (not -e $epssrc) {