--- loncom/xml/londefdef.pm 2002/10/08 20:09:17 1.92 +++ loncom/xml/londefdef.pm 2002/11/19 15:13:37 1.106 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.92 2002/10/08 20:09:17 sakharuk Exp $ +# $Id: londefdef.pm,v 1.106 2002/11/19 15:13:37 sakharuk Exp $ # # # Copyright Michigan State University Board of Trustees @@ -109,28 +109,38 @@ sub end_m { return $currentstring; } #-- 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} +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[dvips]{graphicx} \usepackage{epsfig}\usepackage{calc} \newenvironment{choicelist}{\begin{enumerate}}{\end{enumerate}}'; - } - return $currentstring; - } + } + return $currentstring; +} sub end_html { my ($target,$token) = @_; my $currentstring = ''; @@ -845,7 +855,7 @@ EDITBUTTON $currentstring .= $token->[4]; } elsif ($target eq 'tex') { if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') { - $currentstring .= '\vskip 0 mm'; + $currentstring .= '\vskip 0.2 mm'; } } elsif ($target eq 'latexsource') { $currentstring .= '\\'; @@ -955,7 +965,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -965,7 +975,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; } @@ -976,7 +989,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -986,7 +999,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; } @@ -1132,7 +1148,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -1142,7 +1158,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; } @@ -1300,7 +1319,7 @@ sub start_table { 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); + my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval,undef,1); unless (defined $border) { $border = 0; } if ($border) { $Apache::londefdef::table[-1]{'hinc'} = '\hline '; @@ -1314,7 +1333,7 @@ sub start_table { my $width; foreach my $key (keys(%{$token->[2]})) { if ($key =~ /^width$/i) { - $width = &Apache::lonxml::get_param($key,$parstack,$safeeval); + $width = &Apache::lonxml::get_param($key,$parstack,$safeeval,undef,1); } } if (defined($width)) { $Apache::londefdef::table[-1]{'width'}=$width; } @@ -1412,7 +1431,8 @@ sub start_table { if ($signature) { my $NumberEmptyLength = $how_many_columns - $filled_columns; my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength; - $output =~ s/\$SpacePerColumn/$SpacePerColumn/g; + my $shorthand = ($filled_columns+1)*4; + $output =~ s/\$SpacePerColumn/$SpacePerColumn - $shorthand mm/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) { @@ -1438,7 +1458,7 @@ sub start_table { $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 { @@ -1468,7 +1488,7 @@ sub start_table { 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);; } @@ -1494,7 +1514,7 @@ sub start_table { } else { if (length($data)<5) { $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; - $tempolen = '5 mm'; + $tempolen = '6 mm'; } else { $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; $tempolen = 'TOBECHANGEDONNUMBER'; @@ -1511,7 +1531,7 @@ sub start_table { 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);; } @@ -1542,19 +1562,20 @@ sub start_table { #-- 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 $src = &Apache::lonxml::get_param('src',$parstack,$safeeval); + &image_replication($src); $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); - #if original gif/jpg file exist do following: + #if original gif/jpg/png file exist do following: if (-e $src) { #defines the default size of image my $image = Image::Magick->new; @@ -1563,9 +1584,10 @@ sub start_table { $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); + 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; @@ -1584,13 +1606,13 @@ sub start_table { $path = $1.'/'; } my $newsrc = $src; - $newsrc =~ s/(\.gif|\.jpg)$/\.eps/i; - $file=~s/(\.gif|\.jpg)$/\.eps/i; + $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 .= '\noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; + $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; } } else { #there is no eps counterpart for image - check for ps one @@ -1599,7 +1621,7 @@ sub start_table { #ps counterpart for image exist $file =~ s/\.eps$/\.ps/; if ($path) { - $currentstring .= '\noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; + $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; } } else { #there aren't eps or ps - so create eps @@ -1607,12 +1629,12 @@ sub start_table { 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 .= '\graphicspath{{/home/httpd/prtspool/}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; + $currentstring .= '\vskip 1 mm \graphicspath{{/home/httpd/prtspool/}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; } } } else { #original image file doesn't exist so check the alt attribute - my $alt = &Apache::lonxml::get_param('alt',$parstack,$safeeval); + my $alt = &Apache::lonxml::get_param('alt',$parstack,$safeeval,undef,1); if ($alt) { $currentstring .= ' '.$alt.' '; } else { @@ -1713,27 +1735,30 @@ 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); - if (not -e '/home/httpd/html'.$src) { - #replicates image itself - &Apache::lonnet::repcopy('/home/httpd/html'.$src); - #replicates eps or ps - my $newsrc = $src; - $newsrc =~ s/(.gif|.jpg)$/.eps/; - if (not-e $newsrc && &Apache::lonnet::repcopy('/home/httpd/html'.$newsrc) ne 'OK') { - $newsrc =~ s/\.ps$/\.eps/; - &Apache::lonnet::repcopy('/home/httpd/html'.$newsrc); - } - } - return ''; - } - sub end_allow { - return ''; - } +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 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) = @_; @@ -1781,7 +1806,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; @@ -1799,7 +1824,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; @@ -1817,7 +1842,7 @@ sub start_embed { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'tex') { - my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval); + my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval,undef,1); $currentstring .= '\vskip '.$howmuch.' '; } return $currentstring; @@ -2527,5 +2552,22 @@ sub start_embed { } return $currentstring; } + +sub image_replication { + my $src = shift; + if (not -e '/home/httpd/html'.$src) { + #replicates image itself + &Apache::lonnet::repcopy('/home/httpd/html'.$src); + #replicates eps or ps + my $newsrc = $src; + $newsrc =~ s/\.(gif|jpg|png)$/.eps/; + if (not-e $newsrc && &Apache::lonnet::repcopy('/home/httpd/html'.$newsrc) ne 'OK') { + $newsrc =~ s/\.ps$/\.eps/; + &Apache::lonnet::repcopy('/home/httpd/html'.$newsrc); + } + } + return ''; +} + 1; __END__