--- loncom/xml/londefdef.pm 2004/07/12 15:52:44 1.224
+++ loncom/xml/londefdef.pm 2004/11/19 22:16:33 1.247
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.224 2004/07/12 15:52:44 sakharuk Exp $
+# $Id: londefdef.pm,v 1.247 2004/11/19 22:16:33 albertel Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -63,9 +63,11 @@ sub initialize_londefdef {
$Apache::londefdef::TD_redirection=0;
@Apache::londefdef::table = ();
$Apache::londefdef::select=0;
- @Apache::londefdef::description=();
- $Apache::londefdef::DD_redirection=0;
- $Apache::londefdef::DT_redirection=0;
+ undef(@Apache::londefdef::description);
+ @Apache::londefdef::DD=(0);
+ @Apache::londefdef::DT=(0);
+ @Apache::londefdef::seenDT=(0);
+ $Apache::londefdef::list_index=0;
}
#======================= TAG SUBROUTINES =====================
@@ -150,8 +152,7 @@ sub start_html {
my $options=$ENV{'course.'.$ENV{'request.course.id'}.'.tthoptions'};
&Apache::lontexconvert::init_tth();
if ($target eq 'web' || $target eq 'edit') {
- $currentstring = &Apache::lonxml::xmlbegin().
- &Apache::lonxml::fontsettings();
+ $currentstring = &Apache::lonxml::xmlbegin();
} elsif ($target eq 'tex') {
@Apache::londefdef::table = ();
$currentstring .= '\documentclass[letterpaper]{article}';
@@ -176,10 +177,10 @@ sub start_html {
}
sub end_html {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
- $currentstring = &Apache::lonxml::xmlend();
+ $currentstring = &Apache::lonxml::xmlend($target,$parser);
}
return $currentstring;
}
@@ -189,7 +190,7 @@ sub start_head {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
- $currentstring = $token->[4];
+ $currentstring = $token->[4].&Apache::lonxml::fontsettings();
}
return $currentstring;
}
@@ -478,6 +479,7 @@ sub end_accessrule {
sub start_body {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
+
if ($target eq 'web') {
if ($Apache::lonhomework::parsing_a_problem) {
&Apache::lonxml::warning("
tag found inside of tag this can cause problems.");
@@ -529,12 +531,19 @@ sub start_body {
$token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents().
';'.$onUnload;
- $currentstring .= '<'.$token->[1];
+ if ($ENV{'request.state'} ne 'construct') {
+ $currentstring .= '<'.$token->[1];
+ }
foreach (keys %{$token->[2]}) {
$currentstring.=' '.$_.'="'.$token->[2]->{$_}.'"';
}
- $currentstring.='>';
+ if ($ENV{'request.state'} ne 'construct') {
+ $currentstring.='>';
+ }
if ($ENV{'request.state'} ne 'published') {
+ my $remote=($ENV{'environment.remote'} ne 'off');
+ $currentstring=&Apache::loncommon::bodytag(undef,undef,
+ $currentstring,$remote);
$currentstring.=(<
@@ -1133,16 +1142,16 @@ sub end_p {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- if ($$tagstack[-1] eq 'p') {
- my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1);
- if ($align eq 'center') {
- $currentstring .= '\end{center}';
- } elsif ($align eq 'right') {
- $currentstring .= '}}';
- } elsif ($align eq 'left') {
- $currentstring .= '}\hfill}';
- }
- }
+ my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1);
+ if (not defined $align) {
+ $currentstring.='\strut\\\\\strut ';
+ } elsif ($align eq 'center') {
+ $currentstring .= '\end{center}';
+ } elsif ($align eq 'right') {
+ $currentstring .= '}}';
+ } elsif ($align eq 'left') {
+ $currentstring .= '}\hfill}';
+ }
}
return $currentstring;
}
@@ -1154,8 +1163,17 @@ sub start_br {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- if (($$tagstack[-2] eq 'b') || ($$tagstack[-2] eq 'strong') ||
- ($$tagstack[-2] eq 'ol') || ($$tagstack[-2] eq 'ul')) {
+ my @tempo=@$tagstack;
+ my $signal=0;
+ for (my $i=$#tempo;$i>=0;$i--) {
+ if (($tempo[$i] eq 'b') || ($tempo[$i] eq 'strong') ||
+ ($tempo[$i] eq 'ol') || ($tempo[$i] eq 'ul') ||
+ ($tempo[$i] eq 'td') || ($tempo[$i] eq 'th')) {
+ $signal=1;
+ last;
+ }
+ }
+ if ($signal) {
$currentstring .= ' \vskip 0 mm ';
} elsif ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
$currentstring .= '\strut \\\\ \strut ';
@@ -1476,17 +1494,28 @@ sub start_li {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,1);
- if ($type=~/circle/) {
- $currentstring .= ' \item[o] ';
+ my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
+ my $value=&Apache::lonxml::get_param('value',$parstack,$safeeval,undef,0);
+ #FIXME need to support types i and I
+ if ($type=~/disc/) {
+ $currentstring .= ' \item[$\bullet$] ';
+ } elsif ($type=~/circle/) {
+ $currentstring .= ' \item[$\circ$] ';
} elsif ($type=~/square/) {
- $currentstring .= ' \item[$\Box$] ';
- } elsif ($type ne '') {
- $currentstring .= ' \item['.$type.'] ';
+ $currentstring .= ' \item[$\diamond$] ';
+ } elsif ($type eq '1') {
+ $currentstring .= ' \item['.($Apache::londefdef::list_index+1).'.]';
+ } elsif ($type eq 'A') {
+ $currentstring .= ' \item['.('A'..'Z')[$Apache::londefdef::list_index].'.]';
+ } elsif ($type eq 'a') {
+ $currentstring .= ' \item['.('a'..'z')[$Apache::londefdef::list_index].'.]';
+ } elsif ($value ne '') {
+ $currentstring .= ' \item['.$value.'] ';
} else {
$currentstring .= ' \item ';
}
- }
+ $Apache::londefdef::list_index++;
+ }
return $currentstring;
}
@@ -1533,6 +1562,7 @@ sub start_ul {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
my $TeXtype=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
+ $Apache::londefdef::list_index=0;
if ($TeXtype eq 'disc') {
$currentstring .= '\renewcommand{\labelitemi}{$\bullet$}'.
'\renewcommand{\labelitemii}{$\bullet$}'.
@@ -1621,6 +1651,7 @@ sub start_ol {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
+ $Apache::londefdef::list_index=0;
my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
if ($type eq '1') {
$currentstring .= '\renewcommand{\labelenumi}{\arabic{enumi}.}'.
@@ -1675,9 +1706,11 @@ sub start_dl {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$currentstring = '\begin{description}';
- @Apache::londefdef::description=();
- $Apache::londefdef::DD_redirection=0;
- $Apache::londefdef::DT_redirection=0;
+ $Apache::londefdef::DL++;
+ push(@Apache::londefdef::description,[]);
+ $Apache::londefdef::DD[$Apache::londefdef::DL]=0;
+ $Apache::londefdef::DT[$Apache::londefdef::DL]=0;
+ $Apache::londefdef::seenDT[$Apache::londefdef::DL]=0;
}
return $currentstring;
}
@@ -1688,18 +1721,17 @@ sub end_dl {
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- if ($Apache::londefdef::DT_redirection) {
- my $data=&item_cleanup;
- push @Apache::londefdef::description,'\item['.$data.']';
- $Apache::londefdef::DT_redirection=0;
- } elsif ($Apache::londefdef::DD_redirection) {
- $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
- }
- foreach my $element (@Apache::londefdef::description) {
+ if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
+ if ($Apache::londefdef::DD[-1]) { &end_dd(@_); }
+ foreach my $element (@{$Apache::londefdef::description[-1]}) {
$currentstring.=' '.$element.' ';
}
- @Apache::londefdef::description=();
+ pop(@Apache::londefdef::description);
$currentstring.='\end{description}';
+ delete($Apache::londefdef::DD[$Apache::londefdef::DL]);
+ delete($Apache::londefdef::DT[$Apache::londefdef::DL]);
+ delete($Apache::londefdef::seenDT[$Apache::londefdef::DL]);
+ $Apache::londefdef::DL--;
}
return $currentstring;
}
@@ -1711,16 +1743,11 @@ sub start_dt {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- if ($Apache::londefdef::DT_redirection) {
- my $data=&item_cleanup;
- push @Apache::londefdef::description,'\item['.$data.']';
- $Apache::londefdef::DT_redirection=0;
- } elsif ($Apache::londefdef::DD_redirection) {
- $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
- $Apache::londefdef::DD_redirection=0;
- }
+ if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
+ if ($Apache::londefdef::DD[-1]) { &end_dd(@_); }
&Apache::lonxml::startredirection();
- $Apache::londefdef::DT_redirection=1;
+ $Apache::londefdef::DT[-1]++;
+ $Apache::londefdef::seenDT[-1]=1;
}
return $currentstring;
}
@@ -1731,9 +1758,11 @@ sub end_dt {
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- my $data=&item_cleanup;
- push @Apache::londefdef::description,'\item['.$data.']';
- $Apache::londefdef::DT_redirection=0;
+ if ($Apache::londefdef::DT[-1]) {
+ my $data=&item_cleanup();
+ push(@{$Apache::londefdef::description[-1]},'\item['.$data.'] \strut \vskip 0mm');
+ $Apache::londefdef::DT[-1]--;
+ }
}
return $currentstring;
}
@@ -1752,12 +1781,14 @@ sub start_dd {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- if ($Apache::londefdef::DT_redirection) {
- my $data=&item_cleanup;
- push @Apache::londefdef::description,'\item['.$data.']';
- $Apache::londefdef::DT_redirection=0;
- }
- $Apache::londefdef::DD_redirection=1;
+ if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
+ if ($Apache::londefdef::DD[-1]) { &end_dd(@_);}
+ if (!$Apache::londefdef::seenDT[-1]) {
+ push(@{$Apache::londefdef::description[-1]},'\item[\strut] \strut \vskip 0mm ');
+ }
+ push(@{$Apache::londefdef::description[-1]},'');
+ $Apache::londefdef::description[-1]->[-1].=' \strut ';
+ $Apache::londefdef::DD[-1]++;
&Apache::lonxml::startredirection();
}
return $currentstring;
@@ -1769,8 +1800,9 @@ sub end_dd {
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
- $Apache::londefdef::DD_redirection=0;
+ $Apache::londefdef::description[-1]->[-1].=
+ &Apache::lonxml::endredirection().' \vskip 0mm ';
+ $Apache::londefdef::DD[-1]--;
}
return $currentstring;
}
@@ -1797,7 +1829,7 @@ sub start_table {
$textwidth=$Apache::londefdef::table[-2]{'TeXlen'}[$Apache::londefdef::table[-2]{'row_number'}][$Apache::londefdef::table[-2]{'counter_columns'}];
} else {
#try to use all space not used before (minus 5% for LaTeX table internal) - rather silly
- my $textwidth=$Apache::londefdef::table[-2]{'width'};
+ $textwidth=$Apache::londefdef::table[-2]{'width'};
for (my $i=0;$i<$Apache::londefdef::table[-2]{'counter_columns'};$i++) {
$textwidth=$textwidth-$Apache::londefdef::table[-2]{'TeXlen'}[0][$i];
}
@@ -1840,6 +1872,7 @@ sub start_table {
$Apache::londefdef::table[-1]{'output'}.=' \noindent \begin{tabular} ';
$Apache::londefdef::table[-1]{'TeXlen'}=[];
$Apache::londefdef::table[-1]{'objectlen'}=[];
+ $Apache::londefdef::table[-1]{'objectsignal'}=[];
$Apache::londefdef::table[-1]{'maxlen'}=[];
$Apache::londefdef::table[-1]{'minlen'}=[];
$Apache::londefdef::table[-1]{'content'}=[];
@@ -1868,7 +1901,7 @@ sub end_table {
}
#free space and number of empty columns
my ($available_space,$empty_columns)=($Apache::londefdef::table[-1]{'width'},0);
-## &Apache::lonnet::logthis("Available space $Apache::londefdef::table[-1]{'width'}");
+ if ($#Apache::londefdef::table ne 0) {$available_space=0.9*$available_space;}
for (my $jn=0;$jn<=$Apache::londefdef::table[-1]{'counter_columns'};$jn++) {
if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]==0) {
$empty_columns++;
@@ -1899,8 +1932,14 @@ sub end_table {
$localmin=$Apache::londefdef::table[-1]{'objectlen'}[$in][$jn];
}
}
- if ($max_len[$jn]<$localmin) {$max_len[$jn]=$localmin;}#object size is bigger
- if ($min_len[$jn]<$localmin) {$min_len[$jn]=$localmin;}#object size is bigger
+ if ($max_len[$jn]<$localmin) {
+ $max_len[$jn]=$localmin;
+ $Apache::londefdef::table[-1]{'objectsignal'}[$jn]=1;
+ }#object size is bigger
+ if ($min_len[$jn]<$localmin) {
+ $min_len[$jn]=$localmin;
+ $Apache::londefdef::table[-1]{'objectsignal'}[$jn]=1;
+ }#object size is bigger
if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]!=0) {
$min_len[$jn]=0;
$max_len[$jn]=0;
@@ -1933,6 +1972,36 @@ sub end_table {
$fwidth[$jn]=$min_len[$jn];
}
}
+ #check if we have objects which can be scaled
+ my $how_many_to_scale=0;
+ my @to_scale=();
+ for (my $jn=0;$jn<=$#max_len;$jn++) {
+ if ($Apache::londefdef::table[-1]{'objectsignal'}[$jn] eq '1') {
+ $how_many_to_scale++;
+ push @to_scale, $jn;
+ }
+ }
+ if ($how_many_to_scale>0) {
+ my $space_to_adjust=($space_neeeded-$available_space)/$how_many_to_scale;
+ foreach my $jn (@to_scale) {
+ for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
+ $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/;
+ if ($1 ne '') {
+ my $current_length=&recalc($1);
+ $current_length=~/(\d+\.?\d*)/;
+ $current_length=$current_length-$space_to_adjust;
+ $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~s/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/width=$current_length mm/;
+ }
+ $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/\[(\d+\.?\d*)\s*mm\]/;
+ if ($1 ne '') {
+ my $current_length=$1;
+ $current_length=$current_length-$space_to_adjust;
+ $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~s/\[(\d+\.?\d*)\s*mm\]/\[$current_length mm\]/;
+ }
+ }
+ $fwidth[$jn]=$fwidth[$jn]-$space_to_adjust;
+ }
+ }
} else {
#step 3. adjustment over minimal + corrections
my $enlarge_coef=$available_space/$space_neeeded;
@@ -2007,13 +2076,13 @@ sub end_table {
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
for (my $jn=0;$jn<=$#fwidth;$jn++) {
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output.='\begin{center}';
+ $output.='\vspace*{-6 mm}\begin{center}';
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
$output.=' \hfill \llap{'
}
$output.=$Apache::londefdef::table[-1]{'content'}[$in][$jn];
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
- $output.='\end{center}';
+ $output.='\end{center}\vspace*{-6 mm}';
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
$output.='} ';
}
@@ -2149,6 +2218,26 @@ sub end_td_tex {
push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth;
push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ } elsif ($data=~/\\parbox\{\s*\d+\.?\d*\s*(mm|cm|in|pc|pt)*\s*\}/ or $data=~/\\epsfxsize\s*=\s*\d+\.?\d*\s*(mm|cm|in|pc|pt)*/) {
+ my $garbage_data=$data;
+ my $fwidth=0;
+ while ($garbage_data=~/\\parbox\{\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)\s*\}/) {
+ my $current_length=&recalc($1);
+ $current_length=~/(\d+\.?\d*)/;
+ if ($fwidth<$1) {$fwidth=$1;}
+ $garbage_data=~s/\\parbox\{\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)//;
+ }
+ while ($garbage_data=~/\\epsfxsize\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) {
+ my $current_length=&recalc($1);
+ $current_length=~/(\d+\.?\d*)/;
+ if ($fwidth<$1) {$fwidth=$1;}
+ $garbage_data=~s/\\epsfxsize\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)//;
+ }
+ push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth;
+ push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ $data=~s/\\\\\s*$//;
} else {
$data=~s/^\s+(\S.*)/$1/;
$data=~s/(.*\S)\s+$/$1/;
@@ -2171,7 +2260,7 @@ sub end_td_tex {
$current_length=2.5*&LATEX_length($data);
my @words=split(/ /,$data);
foreach my $word (@words) {
- my $lengthword=2.5*&LATEX_length($word);
+ my $lengthword=2*&LATEX_length($word);
if ($min_length<$lengthword) {$min_length=$lengthword;}
}
}
@@ -2207,55 +2296,128 @@ sub start_th {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
- if ($what_to_push eq '') {
- $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;
- }
- push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;
- $Apache::londefdef::table[-1]{'counter_columns'}++;
- &Apache::lonxml::startredirection();
+ $Apache::londefdef::TD_redirection = 1;
+ &tagg_check('tr','th',$tagstack,$parstack,$parser,$safeeval);
}
return $currentstring;
}
-
+
+sub tagg_check {
+ my ($good_tag,$bad_tag,$tagstack,$parstack,$parser,$safeeval) = @_;
+ my @ar=@$parstack;
+ for (my $i=$#ar-1;$i>=0;$i--) {
+ if (lc($$tagstack[$i]) eq $good_tag) {
+ &start_th_tex($parstack,$parser,$safeeval);
+ last;
+ } elsif (lc($$tagstack[$i]) eq $bad_tag) {
+ splice @ar, $i+1;
+ &end_th_tex(\@ar,$parser,$safeeval);
+ &start_th_tex($parstack,$parser,$safeeval);
+ last;
+ }
+ }
+ return '';
+}
+
+sub start_th_tex {
+ my ($parstack,$parser,$safeeval) = @_;
+ my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
+ if ($alignchar eq '') {
+ $alignchar = $Apache::londefdef::table[-1]{'rows'}[-1];
+ }
+ push @{ $Apache::londefdef::table[-1]{'align'}[$Apache::londefdef::table[-1]{'row_number'}] }, $alignchar;
+ $Apache::londefdef::table[-1]{'counter_columns'}++;
+ my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
+ if (defined $TeXwidth) {
+ my $current_length=&recalc($TeXwidth);
+ $current_length=~/(\d+\.?\d*)/;
+ push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$1;
+ }
+ &Apache::lonxml::startredirection();
+ return '';
+}
+
+sub end_th_tex {
+ my ($parstack,$parser,$safeeval) = @_;
+ my $current_row = $Apache::londefdef::table[-1]{'row_number'};
+ my $data=&Apache::lonxml::endredirection();
+ my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
+ if (defined $TeXwidth) {
+ push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ } else {
+ if (($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) or ($data=~m/\[(\d+\.?\d*)\s*mm\]/)) {
+ my $garbage_data=$data;
+ my $fwidth=0;
+ while ($garbage_data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) {
+ my $current_length=&recalc($1);
+ $current_length=~/(\d+\.?\d*)/;
+ if ($fwidth<$1) {$fwidth=$1;}
+ $garbage_data=~s/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)//;
+ }
+ while ($garbage_data=~m/\[(\d+\.?\d*)\s*mm\]/) {
+ my $current_length=$1;
+ if ($fwidth<$current_length) {$fwidth=$current_length;}
+ $garbage_data=~s/\[(\d+\.?\d*)\s*mm\]//;
+ }
+ push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth;
+ push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ } else {
+ $data=~s/^\s+(\S.*)/$1/;
+ $data=~s/(.*\S)\s+$/$1/;
+ $data=~s/(\s)+/$1/;
+ my ($current_length,$min_length)=(0,0);
+ if ($data=~/\\vskip/) {
+ my $newdata=$data;
+ $newdata=~s/\\vskip \d*\.?\d*\s*mm/THISISJUSTTEMPORARYSEPARATOR/g;
+ my @newdata=split(/THISISJUSTTEMPORARYSEPARATOR/,$newdata);
+ foreach my $elementdata (@newdata) {
+ my $lengthnewdata=2.5*&LATEX_length($elementdata);
+ if ($lengthnewdata>$current_length) {$current_length=$lengthnewdata;}
+ my @words=split(/ /,$elementdata);
+ foreach my $word (@words) {
+ my $lengthword=2.5*&LATEX_length($word);
+ if ($min_length<$lengthword) {$min_length=$lengthword;}
+ }
+ }
+ } else {
+ $current_length=2.5*&LATEX_length($data);
+ my @words=split(/ /,$data);
+ foreach my $word (@words) {
+ my $lengthword=2*&LATEX_length($word);
+ if ($min_length<$lengthword) {$min_length=$lengthword;}
+ }
+ }
+ push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
+ push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$current_length;
+ push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$min_length;
+ }
+ }
+ for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) {
+ $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/;
+ }
+ #make data bold
+ $data='\textbf{'.$data.'}';
+ push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data;
+ return'';
+}
+
sub end_th {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- my $current_row = $Apache::londefdef::table[-1]{'row_number'};
- my $data=&Apache::lonxml::endredirection();
- my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
- if (defined $TeXwidth) {
- my $current_length=&recalc($TeXwidth);
- $current_length=~/(\d+)/;
- $Apache::londefdef::table[-1]{'TeXlength'} .= $1.',';
- $Apache::londefdef::table[-1]{'length'} .= '0,';
- } else {
- if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) {
- my $current_length=&recalc($1);
- $current_length=~/(\d+)/;
- $Apache::londefdef::table[-1]{'TeXlength'} .= $1.',';
- $Apache::londefdef::table[-1]{'length'} .= '0,';
- } else {
- $data=~/^\s*(\S.*)/;
- $data=$1;
- $data=~/(.*\S)\s*$/;
- $data=$1;
- my $current_length=2*length($data);
- $Apache::londefdef::table[-1]{'length'} .= $current_length.',';
- $Apache::londefdef::table[-1]{'TeXlength'} .= '0,';
- }
- }
- for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) {
- $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/;
- }
- $data='\textbf{'.$data.'}';
- @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{TOBECHANGEDONNUMBER}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'};
+ $Apache::londefdef::TD_redirection =0;
+ &end_th_tex($parstack,$parser,$safeeval);
}
return $currentstring;
}
+
#-- tag (end tag forbidden)
sub start_img {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
@@ -2281,13 +2443,9 @@ sub start_img {
$currentstring.='[IMAGE: '.$alttag.']';
}
} elsif ($target eq 'tex') {
+ my $oldSRC=$src;
+ $oldSRC=~s/\.(gif|jpg|png)$/\.eps/;
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
- #if uploaded restore the path
- if ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/simplepage\/([^\/]+)$/) {
- $src=&Apache::loncommon::propath($1,$2).'/userfiles/simplepage/'.$3;
- } elsif ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/aboutme\/([^\/]+)$/) {
- $src=&Apache::loncommon::propath($1,$2).'/userfiles/aboutme/'.$3;
- }
#if original gif/jpg/png file exist do following:
if (-e $src) {
#what is the image size?
@@ -2295,12 +2453,13 @@ sub start_img {
my ($file,$path)=&file_path($src);
my $newsrc = $src;
$newsrc =~ s/\.(gif|jpg|png)$/.eps/i;
+ &Apache::lonnet::repcopy($oldSRC);
$file=~s/\.(gif|jpg|png)$/.eps/i;
#where can we find the picture?
if (-e $newsrc) {
#eps counterpart for image exist
if ($path) {
- $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+ $currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
}
} else {
#there is no eps counterpart for image - check for ps one
@@ -2309,11 +2468,11 @@ sub start_img {
#ps counterpart for image exist
$file =~ s/\.eps$/\.ps/;
if ($path) {
- $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+ $currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
}
} else {
#care about eps dynamical generation
- $currentstring.='\vskip 1 mm '.&eps_generation($src,$file,$width_param);
+ $currentstring.=&eps_generation($src,$file,$width_param);
}
}
} else {
@@ -2340,6 +2499,8 @@ sub start_img {
$currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'
';
$currentstring .=&Apache::edit::text_arg('TeXwidth (mm):','TeXwidth',$token,5);
$currentstring .=&Apache::edit::text_arg('TeXheight (mm):','TeXheight',$token,5);
+ $currentstring .=&Apache::edit::select_arg('Alignment:','align',
+ ['','bottom','middle','top','left','right'],$token,5);
$currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval);
my $alt=&Apache::lonxml::get_param('alt',$parstack,$safeeval);
@@ -2353,7 +2514,7 @@ sub start_img {
my ($osrc,$owidth,$oheight)=
($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});
my $ctag=&Apache::edit::get_new_args($token,$parstack,
- $safeeval,'src','alt',
+ $safeeval,'src','alt','align',
'TeXwidth','TeXheight',
'width','height');
my ($nsrc,$nwidth,$nheight)=
@@ -2520,7 +2681,7 @@ sub start_allow {
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
$Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
&Apache::lonnet::clutter($src);
- &image_replication($src);
+ if ($target eq 'tex') { &image_replication($src); }
my $result;
if ($target eq 'edit') {
$result .=&Apache::edit::tag_start($target,$token);
@@ -3561,7 +3722,11 @@ sub eps_generation {
$newsrc=~s/\/home\/httpd\/lonUsers//;
$newsrc=~s/\/([^\/]+)\/(\w)\/(\w)\/(\w)\//\/$1\//;
}
- return ' \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+ if ($newsrc=~/\/userfiles\//) {
+ return ' \graphicspath{{'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+ } else {
+ return ' \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+ }
}
sub file_path {
@@ -3613,8 +3778,6 @@ sub LATEX_length {
$garbage=~s|\\(\w+)\\|\\|g;
$garbage=~s|\\(\w+)(\s*)|$2|g;
$garbage=~s|\+|11|g;
-
- &Apache::lonnet::logthis("garbage was just $garbage");
my $value=length($garbage);
return $value;
}