--- loncom/xml/londefdef.pm 2004/08/20 18:43:36 1.235
+++ loncom/xml/londefdef.pm 2004/11/13 08:56:53 1.244
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.235 2004/08/20 18:43:36 sakharuk Exp $
+# $Id: londefdef.pm,v 1.244 2004/11/13 08:56:53 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]{book}';
@@ -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,18 +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
- my $old_src=$src;
- if ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/simplepage\/([^\/]+)$/) {
- $src=&Apache::loncommon::propath($1,$2).'/userfiles/simplepage/'.$3;
- if (not -e $src) {
- $old_src=~/^\/uploaded\/(.*)$/;
- $src=$Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles/'.$1;
- }
- } 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?
@@ -2439,6 +2446,7 @@ 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) {
@@ -2666,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);
@@ -3707,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 {