--- loncom/xml/londefdef.pm 2002/11/09 22:05:33 1.100 +++ loncom/xml/londefdef.pm 2003/02/28 21:06:42 1.120 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.100 2002/11/09 22:05:33 albertel Exp $ +# $Id: londefdef.pm,v 1.120 2003/02/28 21:06:42 albertel Exp $ # # # Copyright Michigan State University Board of Trustees @@ -44,15 +44,17 @@ package Apache::londefdef; -use Apache::lonnet; +use Apache::lonnet(); use strict; -use Apache::lonxml; +use Apache::lonxml(); use Apache::File(); use Image::Magick; +use Apache::lonmenu(); +use Apache::lonmeta(); BEGIN { - &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','u','ul','var','wbr')); + &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')); } @@ -108,6 +110,28 @@ 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); + } + } + return $result; +} + +sub end_tthoption { + my ($target,$token) = @_; + my $result; + return $result; +} + #-- tag sub start_html { my ($target,$token) = @_; @@ -133,11 +157,12 @@ sub start_html { } 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}}'; + \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; } @@ -162,7 +187,7 @@ sub start_html { 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; @@ -300,25 +325,28 @@ sub start_html { } #-- tag sub start_meta { - my ($target,$token,$tagstack,$parstack,$parser) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { 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]; } } if ($target eq 'meta') { - unless ($token->[2]->{'http-equiv'}) { + unless (&Apache::lonxml::get_param + ('http-equiv',$parstack,$safeeval,undef,1)) { my $name=$token->[2]->{'name'}; $name=~tr/A-Z/a-z/; - $name=~s/\s/\_/g; + $name=~s/\s/\_/gs; + $name=~s/\W//gs; if ($name) { $currentstring='<'.$name.'>'. - $token->[2]->{'content'}. + &Apache::lonxml::get_param + ('content',$parstack,$safeeval,undef,1). ''.$name.'>'; } } @@ -344,7 +372,7 @@ sub start_html { 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]})) { @@ -353,7 +381,7 @@ sub start_html { 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]})) { @@ -362,7 +390,7 @@ sub start_html { delete($token->[2]->{$key}); } } - $token->[2]->{'onUnload'}=&Apache::lonxml::unloadevents(). + $token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents(). ';'.$onUnload; $currentstring .= '<'.$token->[1]; @@ -376,7 +404,9 @@ sub start_html { EDITBUTTON - } + } else { + $currentstring.=&Apache::lonmenu::menubuttons(undef,$target,1); + } } elsif ($target eq 'tex') { $currentstring = '\begin{document}'; } @@ -965,7 +995,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -975,7 +1005,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; } @@ -986,7 +1019,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -996,7 +1029,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; } @@ -1142,7 +1178,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -1152,7 +1188,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; } @@ -1310,7 +1349,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 '; @@ -1324,7 +1363,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; } @@ -1422,9 +1461,12 @@ sub start_table { if ($signature) { my $NumberEmptyLength = $how_many_columns - $filled_columns; my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength; - my $shorthand = ($NumberEmptyLength+1)*4; + 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'}; @@ -1449,7 +1491,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 { @@ -1478,15 +1520,14 @@ sub start_table { my $currentstring = ''; 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); + } 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(); -; } return $currentstring; } @@ -1505,7 +1546,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'; @@ -1522,7 +1563,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);; } @@ -1562,11 +1603,22 @@ sub start_table { my $scaling = .3; if ($target eq 'web') { - $currentstring = $token->[4]; + if ($ENV{'browser.imagesuppress'} ne 'on') { + $currentstring = $token->[4]; + } else { + my $alttag= &Apache::lonxml::get_param + ('alt',$parstack,$safeeval,undef,1); + unless ($alttag) { + $alttag=&Apache::lonmeta::alttag + ($Apache::lonxml::pwd[-1],$src); + } + $currentstring='[IMAGE: '.$alttag.']'; + } } elsif ($target eq 'tex') { - &image_replication($src); - $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); - #if original gif/jpg file exist do following: + $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); + &image_replication($src); + + #if original gif/jpg/png file exist do following: if (-e $src) { #defines the default size of image my $image = Image::Magick->new; @@ -1575,9 +1627,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; @@ -1596,13 +1649,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 .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; + $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} '; } } else { #there is no eps counterpart for image - check for ps one @@ -1611,7 +1664,7 @@ sub start_table { #ps counterpart for image exist $file =~ s/\.eps$/\.ps/; if ($path) { - $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; + $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} '; } } else { #there aren't eps or ps - so create eps @@ -1619,12 +1672,18 @@ 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 .= '\vskip 1 mm \graphicspath{{/home/httpd/prtspool/}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} '; + $currentstring .= '\vskip 1 mm \graphicspath{{/home/httpd/prtspool/}}\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); + unless ($alt) { + $alt=&Apache::lonmeta::alttag + ($Apache::lonxml::pwd[-1],$src); + } + if ($alt) { $currentstring .= ' '.$alt.' '; } else { @@ -1634,6 +1693,7 @@ sub start_table { } return $currentstring; } + sub end_img { my ($target,$token) = @_; my $currentstring = ''; @@ -1647,19 +1707,35 @@ sub start_table { #--