--- loncom/xml/londefdef.pm 2002/07/11 18:20:00 1.70 +++ loncom/xml/londefdef.pm 2002/07/30 14:10:51 1.79 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.70 2002/07/11 18:20:00 sakharuk Exp $ +# $Id: londefdef.pm,v 1.79 2002/07/30 14:10:51 sakharuk Exp $ # # # Copyright Michigan State University Board of Trustees @@ -74,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); @@ -90,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; } @@ -120,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}'; } @@ -835,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 .= '\\'; } @@ -949,7 +955,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + $currentstring .= '\underline{'; } return $currentstring; } @@ -959,7 +965,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring .= '}'; } return $currentstring; } @@ -970,7 +976,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + $currentstring .= '\underline{'; } return $currentstring; } @@ -980,7 +986,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring .= '}'; } return $currentstring; } @@ -1033,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; } @@ -1110,7 +1116,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + $currentstring .= '\underline{'; } return $currentstring; } @@ -1120,7 +1126,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring .= '}'; } return $currentstring; } @@ -1277,7 +1283,7 @@ EDITBUTTON my $aa = {}; push @Apache::londefdef::table, $aa; $Apache::londefdef::table[-1]{'row_number'} = -1; - $Apache::londefdef::table[-1]{'output'} = '\begin{tabular} '; + $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} '; my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); unless (defined $border) { $border = 0; } if ($border) { @@ -1293,24 +1299,103 @@ EDITBUTTON return $currentstring; } sub end_table { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { my $inmemory = ''; my $output = ''; + #construct header of the table my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'}; my $in; for ($in=0;$in<=$Apache::londefdef::table[-1]{'counter_columns'};$in++) { $header_of_table .= $Apache::londefdef::table[-1]{'columns'}[$in].$Apache::londefdef::table[-1]{'vvinc'}; } $header_of_table .= '}'; + #fill the table for ($in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { $output .= $Apache::londefdef::table[-1]{'rowdata'}[$in]; chop $output; $output .= ' \\\\ '; } + #define the length of the table cells + my @lengthforoutput = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[0]); + my $how_many_columns = $#lengthforoutput + 1; + my $filled_columns = 0; + foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) { + my @length = split(/,/,$tempo_length); + for (my $ico=0;$ico<$how_many_columns;$ico++) { + if (not $lengthforoutput[$ico]=~m/\s*0\s*/) {$filled_columns++;} + } + } + my $temp_file; + my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.tbl"; + if (-e $filename) { + $temp_file = Apache::File->new($filename); + my @tbl_file_content = <$temp_file>; + my ($one,$two) = split(/,/,$tbl_file_content[0]); + $how_many_columns+=$one-1; + $filled_columns+=$two; + } else { + $temp_file = Apache::File->new('>>'.$filename); + } + print $temp_file "$how_many_columns,$filled_columns\n"; + foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) { + my @length = split(/,/,$tempo_length); + for (my $ico=0;$ico<=$#lengthforoutput;$ico++) { + $lengthforoutput[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/; + my $old_value = $1; + my $old_unit = $2; + if ($old_unit eq 'cm') { + $old_value = $old_value * 10; + } elsif ($old_unit eq 'in') { + $old_value = $old_value * 25.4; + } elsif ($old_unit eq 'pt') { + $old_value = $old_value * 25.4/72.27; + } elsif ($old_unit eq 'pc') { + $old_value = $old_value * 25.4/6.022; + } + $old_unit = 'mm'; + $length[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/; + my $new_value = $1; + my $new_unit = $2; + if ($new_unit eq 'cm') { + $new_value = $new_value * 10; + } elsif ($old_unit eq 'in') { + $new_value = $new_value * 25.4; + } elsif ($old_unit eq 'pt') { + $new_value = $new_value * 25.4/72.27; + } elsif ($old_unit eq 'pc') { + $new_value = $new_value * 25.4/6.022; + } + $new_unit = 'mm'; + if ($old_value < $new_value) { + $lengthforoutput[$ico] = $new_value.' mm'; + } else { + $lengthforoutput[$ico] = $old_value.' mm'; + } + } + } + my $parboxlength = '(\textwidth'; + for (my $io=0; $io<=$#lengthforoutput;$io++) { + $parboxlength .= ' - '.$lengthforoutput[$io].' '; + } + $parboxlength .= ')/($GLOBALnumberOFcolumns+1) - 1 mm'; + $output =~ s/\\parbox{}{}/\\parbox{1 mm}{}/g; + $output =~ s/\\parbox{}{(\\textbf{\w?\.?})}/\\parbox{5 mm}{$1}/g; #for stupid tables with empty columns + $output =~ s/\\parbox{}/\\parbox{$parboxlength}/g; + my ($howmanyatall,$howmanyfilled) = (0,0); + + my @tagar = @$tagstack; + my $signature = 1; + for (my $ico=0;$ico<$#tagar;$ico++) { + if ($tagar[$ico] eq 'table') { $signature = 0; } + } + if ($signature) { + my $totalnumber = $how_many_columns-$filled_columns-1; + $output =~ s/\$GLOBALnumberOFcolumns/$totalnumber/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'}; @@ -1340,7 +1425,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'} = ''; } return $currentstring; } @@ -1350,7 +1435,9 @@ EDITBUTTON if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { -# $currentstring .= ' START ROW '. $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}].' END ROW '; +# $currentstring .= ' START ROW '. $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}].' END ROW '; + push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'}; + } return $currentstring; } @@ -1380,7 +1467,12 @@ 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))/) { + $Apache::londefdef::table[-1]{'length'} .= $1.','; + } else { + $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; + } + @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; } return $currentstring; } @@ -1410,7 +1502,12 @@ 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))/) { + $Apache::londefdef::table[-1]{'length'} .= $1.','; + } else { + $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; + } + @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{\textbf{'.$data.'}} '.$Apache::londefdef::table[-1]{'vinc'}; } return $currentstring; }