--- loncom/xml/londefdef.pm 2002/05/22 21:07:45 1.62 +++ loncom/xml/londefdef.pm 2003/02/17 17:34:16 1.115 @@ -1,8 +1,7 @@ - # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.62 2002/05/22 21:07:45 sakharuk Exp $ +# $Id: londefdef.pm,v 1.115 2003/02/17 17:34:16 www Exp $ # # # Copyright Michigan State University Board of Trustees @@ -49,10 +48,12 @@ use Apache::lonnet; use strict; use Apache::lonxml; use Apache::File(); +use Image::Magick; +use Apache::lonmenu; 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','th','td')); + &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','address','allow','applet','area','b','base','basefont','bgo','bgsound','big','blink','blockquote','blankspace','body','br','button','caption','center','cite','code','col','colgroup','dd','del','dfn','dir','div','dl','dt','em','embed','externallink','fieldset','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','i','iframe','img','input','ins','insert','isindex','kbd','keygen','label','layer','legend','li','link','m','map','marquee','menu','meta','multicol','nobr','noembed','noframes','nolayer','noscript','object','ol','optgroup','option','output','p','param','pre','q','s','samp','select','server','small','spacer','span','strike','strong','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','tthoption','u','ul','var','wbr')); } @@ -74,7 +75,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 +91,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; } @@ -105,27 +109,61 @@ sub end_m { } return $currentstring; } + +sub start_tthoption { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $result; + if ($target eq 'web') { + my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser); + $inside=~s/^\s*//; + if ($ENV{'browser.mathml'}) { + &tth::ttmoptions($inside); + } else { + &tth::tthoptions($inside); + } + } +} + +sub end_tthoption { + my ($target,$token) = @_; + my $result; + return $result; +} + #-- tag - sub start_html { - my ($target,$token) = @_; - my $currentstring = ''; - if ($ENV{'browser.mathml'}) { - &tth::ttminit(); - } else { - &tth::tthinit(); - } - if ($target eq 'web') { - $currentstring = &Apache::lonxml::xmlbegin(). - &Apache::lonxml::fontsettings(); - } elsif ($target eq 'tex') { - @Apache::londefdef::table = (); - $currentstring .= '\documentclass[letterpaper]{article} - \newcommand{\keephidden}[1]{} - \usepackage[dvips]{graphicx} - \usepackage{epsfig}'; - } - return $currentstring; +sub start_html { + my ($target,$token) = @_; + my $currentstring = ''; + if ($ENV{'browser.mathml'}) { + &tth::ttminit(); + if ($ENV{'browser.unicode'}) { + &tth::ttmoptions('-L -u1'); + } else { + &tth::ttmoptions('-L -u0'); + } + } else { + &tth::tthinit(); + if ($ENV{'browser.unicode'}) { + &tth::tthoptions('-L -u1'); + } else { + &tth::tthoptions('-L -u0'); } + } + if ($target eq 'web') { + $currentstring = &Apache::lonxml::xmlbegin(). + &Apache::lonxml::fontsettings(); + } elsif ($target eq 'tex') { + @Apache::londefdef::table = (); + $currentstring .= '\documentclass[letterpaper]{article} + \newcommand{\keephidden}[1]{} + \renewcommand{\deg}{$^{\circ}$} + \usepackage{textcomp} + \usepackage[dvips]{graphicx} + \usepackage{epsfig}\usepackage{calc} +\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'; + } + return $currentstring; +} sub end_html { my ($target,$token) = @_; my $currentstring = ''; @@ -147,7 +185,7 @@ sub end_m { my ($target,$token) = @_; my $currentstring = ''; if ($target eq 'web') { - $currentstring = &Apache::lonxml::registerurl(undef,$target). + $currentstring = &Apache::lonmenu::registerurl(undef,$target). $token->[2]; } return $currentstring; @@ -291,7 +329,7 @@ sub end_m { my $args=''; if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } if ($args eq '') { - &Apache::lonxml::get_all_text("/meta",$$parser[$#$parser]); + &Apache::lonxml::get_all_text("/meta",$parser); } else { $currentstring = $token->[4]; } @@ -325,12 +363,11 @@ sub end_m { #-- tag sub start_body { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; -# my ($target,$token) = @_; my $currentstring = ''; if ($target eq 'web') { if (!$Apache::lonxml::registered) { $currentstring.=''. - &Apache::lonxml::registerurl(undef,$target).''; + &Apache::lonmenu::registerurl(undef,$target).''; } my $onLoad=''; foreach my $key (keys(%{$token->[2]})) { @@ -339,7 +376,7 @@ sub end_m { delete($token->[2]->{$key}); } } - $token->[2]->{'onLoad'}=&Apache::lonxml::loadevents(). + $token->[2]->{'onload'}=&Apache::lonmenu::loadevents(). ';'.$onLoad; my $onUnload=''; foreach my $key (keys(%{$token->[2]})) { @@ -348,7 +385,7 @@ sub end_m { delete($token->[2]->{$key}); } } - $token->[2]->{'onUnload'}=&Apache::lonxml::unloadevents(). + $token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents(). ';'.$onUnload; $currentstring .= '<'.$token->[1]; @@ -362,7 +399,9 @@ sub end_m { EDITBUTTON - } + } else { + $currentstring.=&Apache::lonmenu::menubuttons(undef,$target,1); + } } elsif ($target eq 'tex') { $currentstring = '\begin{document}'; } @@ -462,7 +501,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\large{\textbf{'; + $currentstring .= '{\large \textbf{'; } elsif ($target eq 'meta') { $currentstring=''; &start_output(); @@ -489,7 +528,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\large{\textbf{'; + $currentstring .= '{\large \textbf{'; } return $currentstring; } @@ -510,7 +549,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\large{\textbf{'; + $currentstring .= '{\large \textbf{'; } return $currentstring; } @@ -531,7 +570,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\large{\textbf{'; + $currentstring .= '{\large \textbf{'; } return $currentstring; } @@ -552,7 +591,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\large{\textbf{'; + $currentstring .= '{\large \textbf{'; } return $currentstring; } @@ -573,7 +612,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\large{\textbf{'; + $currentstring .= '{\large \textbf{'; } return $currentstring; } @@ -835,12 +874,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.2 mm'; + } } elsif ($target eq 'latexsource') { $currentstring .= '\\'; } @@ -949,7 +990,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -959,7 +1000,10 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring=&Apache::lonxml::endredirection(); + $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g; + $currentstring=~s/^\s*(\S)/\\underline{$1/; + $currentstring=~s/(\S)\s*$/$1}/; } return $currentstring; } @@ -970,7 +1014,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -980,7 +1024,10 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring=&Apache::lonxml::endredirection(); + $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g; + $currentstring=~s/^\s*(\S)/\\underline{$1/; + $currentstring=~s/(\S)\s*$/$1}/; } return $currentstring; } @@ -1033,7 +1080,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "\\hline "; + $currentstring .= '\vskip 0 mm \noindent\makebox[\textwidth/2 ][b]{\hrulefill}\vskip 0 mm '; } return $currentstring; } @@ -1046,6 +1093,23 @@ EDITBUTTON } return $currentstring; } +#--
tag + sub start_div { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring .= $token->[4]; + } + return $currentstring; + } + sub end_div { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring .= $token->[2]; + } + return $currentstring; + } #-- tag sub start_a { my ($target,$token) = @_; @@ -1065,7 +1129,6 @@ EDITBUTTON my $tempor_var = $stackref->[$#$stackref]; if (index($tempor_var,'name') != -1 ) { $tempor_var =~ s/name=([^,]*),/$1/g; -# $currentstring .= " \\label{$tempor_var}"; } elsif (index($tempor_var,'href') != -1 ) { $tempor_var =~ s/href=([^,]*),/$1/g; $currentstring .= " \\ref{$tempor_var}"; @@ -1110,7 +1173,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= "{\\underline "; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -1120,7 +1183,10 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= " }"; + $currentstring=&Apache::lonxml::endredirection(); + $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g; + $currentstring=~s/^\s*(\S)/\\underline{$1/; + $currentstring=~s/(\S)\s*$/$1}/; } return $currentstring; } @@ -1268,58 +1334,146 @@ EDITBUTTON return $currentstring; } #-- tag - sub start_table { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = $token->[4]; - } elsif ($target eq 'tex') { - my $aa = {}; - push @Apache::londefdef::table, $aa; - $Apache::londefdef::table[-1]{'row_number'} = -1; - $Apache::londefdef::table[-1]{'output'} = '\begin{tabular} '; - my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); - unless (defined $border) { $border = 0; } - if ($border) { - $Apache::londefdef::table[-1]{'hinc'} = '\hline '; - $Apache::londefdef::table[-1]{'vinc'} = '&'; - $Apache::londefdef::table[-1]{'vvinc'} = '|'; - } else { - $Apache::londefdef::table[-1]{'hinc'} = ''; - $Apache::londefdef::table[-1]{'vinc'} = ''; - $Apache::londefdef::table[-1]{'vvinc'} = ''; - } - } - return $currentstring; +sub start_table { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } elsif ($target eq 'tex') { + my $aa = {}; + push @Apache::londefdef::table, $aa; + $Apache::londefdef::table[-1]{'row_number'} = -1; + $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} '; + my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval,undef,1); + unless (defined $border) { $border = 0; } + if ($border) { + $Apache::londefdef::table[-1]{'hinc'} = '\hline '; + $Apache::londefdef::table[-1]{'vinc'} = '&'; + $Apache::londefdef::table[-1]{'vvinc'} = '|'; + } else { + $Apache::londefdef::table[-1]{'hinc'} = ''; + $Apache::londefdef::table[-1]{'vinc'} = '&'; + $Apache::londefdef::table[-1]{'vvinc'} = ''; + } + my $width; + foreach my $key (keys(%{$token->[2]})) { + if ($key =~ /^width$/i) { + $width = &Apache::lonxml::get_param($key,$parstack,$safeeval,undef,1); + } } + if (defined($width)) { $Apache::londefdef::table[-1]{'width'}=$width; } + } + 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; #total number of columns in the table + my $filled_columns = 0; #number of columns with information about width + my $available_space = ' '; + 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'; + } + } + } + for (my $ico=0;$ico<=$#lengthforoutput;$ico++) { + if (not $lengthforoutput[$ico]=~m/^\s*0\s*\w*\s*$/) { + $filled_columns++; + $available_space = $available_space.' - '.$lengthforoutput[$ico]; + } + } + 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,$three) = split(/,/,$tbl_file_content[0]); + $how_many_columns+=$one-1; + $filled_columns+=$two; + if($three=~/\S/) {$available_space = $available_space.' - '.$three;} + } else { + $temp_file = Apache::File->new('>>'.$filename); + } + print $temp_file "$how_many_columns,$filled_columns,$available_space\n"; + $output =~ s/\\parbox{TOBECHANGEDONNUMBER}{}/\\parbox{1 mm}{}/g; + $output =~ s/\\parbox{TOBECHANGEDONNUMBER}/\\parbox{\$SpacePerColumn}/g; + my @tagar = @$tagstack; + my $signature = 1; + for (my $ico=0;$ico<$#tagar;$ico++) { + if ($tagar[$ico] eq 'table') { $signature = 0; } + } + if ($signature) { + my $NumberEmptyLength = $how_many_columns - $filled_columns; + my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength; + my $shorthand = ($filled_columns+1)*4; + $output =~ s/\$SpacePerColumn/$SpacePerColumn - $shorthand mm/g; + } + if ($how_many_columns==1) { #start of block with width correction for one column table + $output=~s/^\s*\\parbox{([^}]*)}/\\parbox{\\textwidth - 1 cm}/; + } #end of block with width correction for one column table + $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; - $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory; + $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory } else { $currentstring = $Apache::londefdef::table[-1]{'output'}; $currentstring =~ s/\\\\\s+\\\\/\\\\/g; pop @Apache::londefdef::table; + if (-e $filename) { + unlink $filename; + } } } return $currentstring; @@ -1332,15 +1486,15 @@ EDITBUTTON $currentstring = $token->[4]; } elsif ($target eq 'tex') { $Apache::londefdef::table[-1]{'row_number'}++; - my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1); + my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1); 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; } @@ -1350,7 +1504,8 @@ 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 '; + push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'}; + } return $currentstring; } @@ -1361,26 +1516,38 @@ EDITBUTTON if ($target eq 'web') { $currentstring = $token->[4]; } elsif ($target eq 'tex') { - my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1); + 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(); -; } return $currentstring; } sub end_td { my ($target,$token) = @_; my $currentstring = ''; + my $tempolen = ''; 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(); - @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= $data.' '.$Apache::londefdef::table[-1]{'vinc'}; + if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt))/) { + $Apache::londefdef::table[-1]{'length'} .= $1.','; + $tempolen = $1; + } else { + if (length($data)<5) { + $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; + $tempolen = '6 mm'; + } else { + $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; + $tempolen = 'TOBECHANGEDONNUMBER'; + } + } + @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$tempolen.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; } return $currentstring; } @@ -1391,7 +1558,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring = $token->[4]; } elsif ($target eq 'tex') { - my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1); + 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);; } @@ -1410,89 +1577,96 @@ 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; } #-- tag sub start_img { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]= - $token->[2]->{'src'}; + my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval, + undef,1); + $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src; my $currentstring = ''; my $width_param = ''; + my $height_param = ''; + my $scaling = .3; if ($target eq 'web') { - $currentstring = $token->[4]; + $currentstring = $token->[4]; } elsif ($target eq 'tex') { - my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval); - my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval); - my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval); - if ($TeXwidth ne '') { - $width_param = $TeXwidth; - } elsif ($TeXheight ne '') { - $width_param = $TeXheight; - } else { - if ($width ne '') { - $width_param = $width*.3; - if ($width_param <= 900) { - $width_param = '[width='.$width_param.'mm]'; - } else { - $width_param = '[width= 9.0 cm]'; + &image_replication($src); + $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); + #if original gif/jpg/png file exist do following: + if (-e $src) { + #defines the default size of image + 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; + #do we have any specified size of the picture? + my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval); + my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval); + my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval, + undef,1); + if ($TeXwidth ne '') { + if ($TeXwidth=~/(\d+)\s*\%/) { + $width_param = $1*$ENV{'form.textwidth'}/100; + } else { + $width_param = $TeXwidth; } + } elsif ($TeXheight ne '') { + $width_param = $TeXheight/$height_param*$width_param; + } elsif ($width ne '') { + $width_param = $width*$scaling; } - } - my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval); - $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); - my $epssrc = $src; - $epssrc =~ s/(\.gif|\.jpg|\.GIF|\.JPG)$/\.eps/; - if (not -e $epssrc) { - my $localfile = $epssrc; - $localfile =~ s/.*(\/res)/$1/; my $file; my $path; - if ($localfile =~ m!(.*)/([^/]*)$!) { - $file = $2; + if ($src =~ m!(.*)/([^/]*)$!) { + $file = $2; $path = $1.'/'; - } - my $signal_eps = 0; - my @content_directory = &Apache::lonnet::dirlist($path); - for (my $iy=0;$iy<=$#content_directory;$iy++) { - my @tempo_array = split(/&/,$content_directory[$iy]); - $content_directory[$iy] = $tempo_array[0]; - if ($file eq $tempo_array[0]) { - $signal_eps = 1; - last; + } + my $newsrc = $src; + $newsrc =~ s/\.(gif|jpg|png)$/.eps/i; + $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.'} '; } - } - if ($signal_eps) { - my $eps_file = &Apache::lonnet::getfile($localfile); } else { - $localfile = $src; - $localfile =~ s/.*(\/res)/$1/; - my $as = &Apache::lonnet::getfile($src); - - } - } - my $file; - my $path; - if ($src =~ m!(.*)/([^/]*)$!) { - $file = $2; - $path = $1.'/'; - } - my $newsrc = $src; - $newsrc =~ s/(\.gif|\.jpg|\.GIF|\.JPG)$/\.eps/; - $file=~s/(\.gif|\.jpg|\.GIF|\.JPG)$/\.eps/; - if (-e $newsrc) { - if ($path) { - $currentstring .= '\graphicspath{{'.$path.'}}\fbox{\includegraphics'.$width_param.'{'.$file.'}}'; + #there is no eps counterpart for image - check for ps one + $newsrc =~ s/\.eps$/\.ps/; + if (-e $newsrc) { + #ps counterpart for image exist + $file =~ s/\.eps$/\.ps/; + if ($path) { + $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} '; + } + } else { + #there aren't eps or ps - so create eps + my $temp_file; + my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat"; + $temp_file = Apache::File->new('>>'.$filename); + print $temp_file "$src\n"; + $currentstring .= '\vskip 1 mm \graphicspath{{/home/httpd/prtspool/}}\includegraphics[width='.$width_param.' mm]{'.$file.'} '; + } } } else { - my $temp_file; - my $filename = "/home/httpd/prtspool/$ENV{'user.name'}$ENV{'user.domain'}temp$ENV{'user.login.time'}.dat"; - $temp_file = Apache::File->new('>>'.$filename); - print $temp_file "$src\n"; - $currentstring .= '\graphicspath{{/home/httpd/prtspool/}}\fbox{\includegraphics'.$width_param.'{'.$file.'}}'; + #original image file doesn't exist so check the alt attribute + my $alt = &Apache::lonxml::get_param('alt',$parstack,$safeeval,undef,1); + if ($alt) { + $currentstring .= ' '.$alt.' '; + } else { + # tag will care about replication + } } } return $currentstring; @@ -1587,20 +1761,31 @@ sub start_embed { } return $currentstring; } - #-- tag +sub start_allow { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]= + $token->[2]->{'src'}; + my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1); + &image_replication($src); + my $result; + if ($target eq 'edit') { + $result .=&Apache::edit::tag_start($target,$token); + $result .=&Apache::edit::text_arg('File Spec:','src',$token,70); + $result .=&Apache::edit::end_row();#.&Apache::edit::start_spanning_row(); + } elsif ($target eq 'modified') { + my $constructtag=&Apache::edit::get_new_args($token,$parstack, + $safeeval,'src'); + if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } + } + return $result; +} - sub start_allow { - my ($target,$token) = @_; - - $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]= - $token->[2]->{'src'}; - - return ''; - } - sub end_allow { - return ''; - } +sub end_allow { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + if ( $target eq 'edit') { return (&Apache::edit::end_table()); } + return ''; +} #-- Frames sub start_frameset { my ($target,$token) = @_; @@ -1608,7 +1793,7 @@ sub start_embed { if ($target eq 'web') { if (!$Apache::lonxml::registered) { $currentstring.=''. - &Apache::lonxml::registerurl(undef,$target).''; + &Apache::lonmenu::registerurl(undef,$target).''; } $currentstring .= $token->[4]; } @@ -1648,7 +1833,7 @@ sub start_embed { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { - my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval); + my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval,undef,1); $currentstring .= ''.$display.'';; } return $currentstring; @@ -1666,7 +1851,7 @@ sub start_embed { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { - my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval); + my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval,undef,1); $currentstring .= ''.$display.'';; } return $currentstring; @@ -1679,5 +1864,737 @@ sub start_embed { } return $currentstring; } +#-- + sub start_blankspace { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $currentstring = ''; + if ($target eq 'tex') { + my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval,undef,1); + $currentstring .= '\vskip '.$howmuch.' '; + } + return $currentstring; + } + sub end_blankspace { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'tex') { + $currentstring .= ''; + } + return $currentstring; + } +#-- tag + sub start_abbr { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_abbr { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_acronym { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_acronym { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_area { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_area { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_base { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_base { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_bdo { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_bdo { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_bgsound { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_bgsound { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_blink { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_blink { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#--
tag + sub start_blockquote { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_blockquote { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#--
tag + sub start_col { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_col { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_colgroup { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_colgroup { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_del { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_del { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#--
tag + sub start_fieldset { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_fieldset { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#-- tag + sub start_frame { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_frame { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#--
tag + sub start_caption { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; + } + sub end_caption { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; + } +#--