--- loncom/xml/londefdef.pm 2004/08/19 12:23:17 1.231.2.1 +++ loncom/xml/londefdef.pm 2004/11/19 21:17:56 1.246 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.231.2.1 2004/08/19 12:23:17 albertel Exp $ +# $Id: londefdef.pm,v 1.246 2004/11/19 21:17:56 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."); @@ -1485,17 +1487,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; } @@ -1542,6 +1555,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$}'. @@ -1630,6 +1644,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}.}'. @@ -1684,9 +1699,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; } @@ -1697,18 +1714,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; } @@ -1720,16 +1736,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; } @@ -1740,9 +1751,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; } @@ -1761,12 +1774,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; @@ -1778,8 +1793,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; } @@ -2420,13 +2436,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? @@ -2434,12 +2446,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 @@ -2448,11 +2461,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 { @@ -2479,6 +2492,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); @@ -2492,7 +2507,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)= @@ -2659,7 +2674,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); @@ -3700,7 +3715,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 {