--- loncom/xml/londefdef.pm	2011/04/05 10:33:15	1.429
+++ loncom/xml/londefdef.pm	2012/03/01 21:13:36	1.438
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.429 2011/04/05 10:33:15 foxr Exp $
+# $Id: londefdef.pm,v 1.438 2012/03/01 21:13:36 droeschl Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -55,7 +55,7 @@ use LONCAPA();
 
 BEGIN {
 
-    &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','accessrule','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','hideweboutput'));
+    &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','accessrule','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','style','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','tthoption','u','ul','var','wbr','hideweboutput'));
 
 }
 
@@ -383,6 +383,9 @@ sub start_meta {
 	} else {
 	    $currentstring = $token->[4];
 	}
+        if ($env{'form.grade_imsexport'}) {
+            $currentstring = '';
+        }
     } elsif ($target eq 'meta') {
 	unless (&Apache::lonxml::get_param
 		('http-equiv',$parstack,$safeeval,undef,1)) {
@@ -455,6 +458,32 @@ sub insert_meta {
     <meta />';
 }
 
+#-- <start> tag
+sub start_style {
+	my ($target, $token, $tagstack, $parstack, $parser, $safeeval, $style) = @_;
+	my $currentstring = '';
+
+	if ($target eq 'tex') {
+		Apache::lonxml::startredirection();
+	} else {
+		$currentstring = $token->[4];
+	}
+	
+	return $currentstring;
+}
+
+sub end_style {
+	my ($target, $token, $tagstack, $parstack, $parser, $safeeval) = @_;
+	my $currentstring = '';
+
+	if ($target eq 'tex') {
+		Apache::lonxml::endredirection();
+	} else {
+		$currentstring = $token->[2];
+	}
+	return $currentstring;
+}
+
 # accessrule
 sub start_accessrule {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
@@ -541,9 +570,10 @@ sub start_body {
     # Breadcrumbs
     &Apache::lonhtmlcommon::clear_breadcrumbs();
     if ($env{'request.state'} eq 'construct') {
+        my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'});
         &Apache::lonhtmlcommon::add_breadcrumb({
             'text'  => 'Construction Space',
-            'href'  => &Apache::loncommon::authorspace(),
+            'href'  => &Apache::loncommon::authorspace($url),
         });
         &Apache::lonhtmlcommon::add_breadcrumb({
             'text'  => 'HTML Editor',
@@ -2044,9 +2074,6 @@ sub start_table {
     } elsif ($target eq 'tex') {
 	&disable_para();	# Can't have paras in a table.
 
-
-	#  New table code:
-
 	#  Get the parameters that we can do something about:
 
 	my $border = &Apache::lonxml::get_param('border', $parstack, $safeeval, undef, 0);
@@ -2067,7 +2094,6 @@ sub start_table {
 		$table->cell_border(1); # Default for rules is all if rules not defined.
 	    }
 	}
-	# Only all or nothing for cell borders for now:
 
 	if ((defined $cell_border)) {
 	    if ($cell_border eq 'all') {
@@ -2076,6 +2102,8 @@ sub start_table {
 		$table->cell_border(2);
 	    } elsif ($cell_border eq 'cols') {
 		$table->cell_border(3);
+	    } elsif($cell_border eq 'groups') {
+		$table->cell_border(4);
 	    } else {
 		$table->cell_border(0);
 	    }
@@ -2883,10 +2911,7 @@ sub start_applet {
     &Apache::lonxml::extlink($archive);
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
-        $currentstring = &Apache::lonenc::encrypt_ref($token,
-                                                      {'code'=>$code,
-                                                       'archive'=>$archive}
-                                                     );
+        $currentstring = $token->[4];
     } elsif ($target eq 'tex') {
         # Turn off some stuff we can't be inside thank you LaTeX
 
@@ -2972,22 +2997,47 @@ sub end_embed {
 #-- <param> tag (end tag forbidden)
 sub start_param {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
-    if (&Apache::lonxml::get_param('name',$parstack,
-				   $safeeval,undef,1)=~/^cabbase$/i) {
+    my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval,
+                                          undef,1);
+    if ($name =~/^cabbase$/i) {
 	my $value=&Apache::lonxml::get_param('value',$parstack,
 					     $safeeval,undef,1);
 	&Apache::lonxml::extlink($value);
-    } 
-  
+    } elsif ($name eq 'flashvars') {
+        if (lc(&Apache::lonxml::get_param('type',$parstack,$safeeval,-2,1))
+            eq 'application/x-shockwave-flash') {
+            my $launcher =
+                &Apache::lonxml::get_param('data',$parstack,$safeeval,-2,1);
+            if ($launcher) {
+                &Apache::lonxml::extlink($launcher);
+            }
+            my $flashvars=&Apache::lonxml::get_param('value',$parstack,
+                                                     $safeeval,undef,1);
+            if ($flashvars ne '') {
+                foreach my $item (split(/\&/,$flashvars)) {
+                    my ($key,$value)=split(/=/,$item,2);
+                    if ($key eq 'content') {
+                        if ($value ne '') {
+                            my ($dir) = ($launcher =~ m{(.+/)[^/]+$});
+                            &Apache::lonxml::extlink($dir.$value);
+                        }
+                    } elsif ($key eq 'thumb') {
+                        if ($value ne '') {
+                            &Apache::lonxml::extlink($value);
+                        }
+                    }
+                }
+            }
+        }
+    }
     my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
-    &Apache::lonxml::extlink($src);
+    if ($src ne '') {
+        &Apache::lonxml::extlink($src);
+    }
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
 	my %toconvert;
-	my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
 	if ($src) { $toconvert{'src'}= $src; }
-	my $name=&Apache::lonxml::get_param('name',$parstack,$safeeval,
-					    undef,1);
 	if ($name=~/^cabbase$/i) {
 	    $toconvert{'value'}=&Apache::lonxml::get_param('value',$parstack,
 							   $safeeval,undef,1);
@@ -3384,13 +3434,34 @@ sub end_col {
     return $currentstring;
 }
 
-#-- <colgroup> tag (end tag optional)
+#-- <colgroup tag (end tag optional)
 sub start_colgroup {
-    my ($target,$token) = @_;
+    my ($target,$token,$tagstack, $parstack, $parser, $safeeval, $style) = @_;
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[4];     
     } 
+    if ($target eq 'tex') {
+	# TODO: Ensure this tag is in a table:
+
+	# Fetch the attributes and build the hash for the
+	# call to define_colgroup.
+
+	my $span    = &Apache::lonxml::get_param('span',   $parstack, $safeeval);
+	my $halign  = &Apache::lonxml::get_param('halign', $parstack, $safeeval);
+
+	my %colgroup_params;
+	if ($span ne '') {
+	    $colgroup_params{'span'} = $span;
+	}
+	if ($halign ne '') {
+	    $colgroup_params{'halign'} = $halign;
+	}
+	
+	my $table = $Apache::londefdef::table[-1];
+	$table->define_colgroup(\%colgroup_params);
+
+    }
     return $currentstring;
 }
 
@@ -3884,6 +3955,12 @@ sub start_tbody {
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[4];     
     } 
+    if ($target eq 'tex') {
+	# TODO: Ensure this tag is within a table:
+
+	my $table = $Apache::londefdef::table[-1];
+	$table->start_body();
+    }
     return $currentstring;
 }
 
@@ -3893,6 +3970,12 @@ sub end_tbody {
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[2];    
     } 
+    if($target eq 'tex') {
+	# TODO: Ensure this tag is within a table:
+
+	my $table = $Apache::londefdef::table[-1];
+	$table->end_body();
+    }
     return $currentstring;
 }
 
@@ -3903,6 +3986,11 @@ sub start_tfoot {
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[4];     
     } 
+    if ($target eq 'tex') {
+        # TODO: ensure this is within a table tag.
+	my $table = $Apache::londefdef::table[-1];
+	$table->start_foot();
+    }
     return $currentstring;
 }
 
@@ -3912,6 +4000,11 @@ sub end_tfoot {
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[2];    
     } 
+    if ($target eq 'tex') {
+	#  TODO: Ensure this is in side a table 
+	my $table = $Apache::londefdef::table[-1];
+	$table->end_foot();
+    }
     return $currentstring;
 }
 
@@ -3922,6 +4015,11 @@ sub start_thead {
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[4];     
     } 
+    if ($target eq 'tex') {
+	# Assume we're in a table... TODO: Verify that and ignore tag if not.
+	my $table = $Apache::londefdef::table[-1];
+	$table->start_head();
+    }
     return $currentstring;
 }
 
@@ -3931,6 +4029,12 @@ sub end_thead {
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[2];    
     } 
+    if ($target eq 'tex') {
+     	# TODO: Verify we are in a table and ignore tag if not.
+
+	my $table = $Apache::londefdef::table[-1];
+	$table->end_head();
+    }
     return $currentstring;
 }
 
@@ -4141,7 +4245,7 @@ sub get_eps_image {
 		    close(FILE);
                 }
 		$src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
-		$src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
+		$src=~s|/home/httpd/html/priv/[^/]+/([^/]*)/|/home/httpd/prtspool/$1/|;
 		if ($sext ne "") {	 # Put the ext. back in to uniquify.
 		    $src =~ s/\.eps$/$sext.eps/;
 		}
@@ -4160,7 +4264,7 @@ sub get_eps_image {
 	print FILE "$src\n";
 	close FILE;
 	$src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
-	$src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
+	$src=~s|/home/httpd/html/priv/[^/]+/([^/]*)/|/home/httpd/prtspool/$1/|;
     }
     my ($path,$file)=($src=~m|(.*)/([^/]*)$|);
     $path =~ s/ /\_/g;
@@ -4179,7 +4283,7 @@ sub eps_generation {
     my $newsrc = $src;
     $newsrc =~ s/(\.bmp|\.gif|\.jpg|\.jpeg)$/\.eps/i;
     $newsrc=~s{/home/httpd/html/res}{};
-    $newsrc=~s{/home/($LONCAPA::username_re)/public_html/}{/$1/};
+    $newsrc=~s{/home/httpd/html/priv/[^/]+/($LONCAPA::username_re)/}{/$1/};
     $newsrc=~s{/\./}{/};
     $newsrc=~s{/([^/]+)\.(ps|eps)}{/};
     if ($newsrc=~m{/home/httpd/lonUsers/}) {