--- loncom/xml/londefdef.pm 2002/05/09 18:55:47 1.58
+++ loncom/xml/londefdef.pm 2002/07/31 14:55:56 1.80
@@ -1,8 +1,7 @@
-
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.58 2002/05/09 18:55:47 sakharuk Exp $
+# $Id: londefdef.pm,v 1.80 2002/07/31 14:55:56 sakharuk Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -49,10 +48,11 @@ use Apache::lonnet;
use strict;
use Apache::lonxml;
use Apache::File();
+use Image::Magick;
BEGIN {
- &Apache::lonxml::register('Apache::londefdef',('m','html','head','map','select','option','input','textarea','form','meta','title','body','center','b','strong','dt','h1','h2','h3','h4','h5','h6','cite','i','address','dd','dl','dir','ol','ul','menu','dfn','kbd','tt','code','em','q','p','br','big','small','basefont','font','s','sub','strike','sup','hr','a','li','u','output','param','applet','img','embed','allow','frameset','pre','insert','externallink','table','tr','td'));
+ &Apache::lonxml::register('Apache::londefdef',('m','html','head','map','select','option','input','textarea','form','meta','title','body','center','b','strong','dt','h1','h2','h3','h4','h5','h6','cite','i','address','dd','dl','dir','ol','ul','menu','dfn','kbd','tt','code','em','q','p','br','big','small','basefont','font','s','sub','strike','sup','hr','a','li','u','output','param','applet','img','embed','allow','frameset','pre','insert','externallink','table','tr','th','td','blankspace','bubble','bubbles','bubbleline'));
}
@@ -73,7 +73,8 @@ sub start_m {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
- my $inside = &Apache::lonxml::get_all_text("/m",$$parser[-1]);
+ $Apache::lonxml::prevent_entity_encode++;
+ 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;
}
@@ -97,6 +101,7 @@ sub end_m {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
+ $Apache::lonxml::prevent_entity_encode--;
} elsif ($target eq 'tex') {
$currentstring = "";
} elsif ($target eq 'meta') {
@@ -118,9 +123,10 @@ 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{epsfig}\usepackage{calc}';
}
return $currentstring;
}
@@ -833,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 .= '\\\\';
+ if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
+ $currentstring .= '\vskip 0 mm';
+ }
} elsif ($target eq 'latexsource') {
$currentstring .= '\\';
}
@@ -921,17 +929,21 @@ EDITBUTTON
}
#-- tag
sub start_font {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $currentstring = '';
if ($target eq 'web') {
+ my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
+ if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode++;}
$currentstring = $token->[4];
}
return $currentstring;
}
sub end_font {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $currentstring = '';
if ($target eq 'web') {
+ my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
+ if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode--;}
$currentstring = $token->[2];
}
return $currentstring;
@@ -943,7 +955,7 @@ EDITBUTTON
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "{\\underline ";
+ $currentstring .= '\underline{';
}
return $currentstring;
}
@@ -953,7 +965,7 @@ EDITBUTTON
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= " }";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -964,7 +976,7 @@ EDITBUTTON
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "{\\underline ";
+ $currentstring .= '\underline{';
}
return $currentstring;
}
@@ -974,7 +986,7 @@ EDITBUTTON
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= " }";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -1027,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;
}
@@ -1104,7 +1116,7 @@ EDITBUTTON
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "{\\underline ";
+ $currentstring .= '\underline{';
}
return $currentstring;
}
@@ -1114,7 +1126,7 @@ EDITBUTTON
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= " }";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -1271,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) {
@@ -1280,32 +1292,111 @@ EDITBUTTON
$Apache::londefdef::table[-1]{'vvinc'} = '|';
} else {
$Apache::londefdef::table[-1]{'hinc'} = '';
- $Apache::londefdef::table[-1]{'vinc'} = '';
+ $Apache::londefdef::table[-1]{'vinc'} = '&';
$Apache::londefdef::table[-1]{'vvinc'} = '';
}
}
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 .= ' \\\\ ';
}
- $Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}';
+ #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'};
pop @Apache::londefdef::table;
@@ -1330,11 +1421,11 @@ EDITBUTTON
if ($alignchar ne '') {
push @ {$Apache::londefdef::table[-1]{'rows'} }, $alignchar;
} else {
- push @ {$Apache::londefdef::table[-1]{'rows'} }, 'c';
+ push @ {$Apache::londefdef::table[-1]{'rows'} }, 'l';
}
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;
}
@@ -1344,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;
}
@@ -1374,7 +1467,47 @@ 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;
+ }
+#--
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.