[LON-CAPA-cvs] cvs: loncom /xml londefdef.pm

damieng damieng at source.lon-capa.org
Fri Jan 27 14:58:21 EST 2017


damieng		Fri Jan 27 19:58:21 2017 EDT

  Modified files:              
    /loncom/xml	londefdef.pm 
  Log:
  fixed paragraph align with tex target, added some basic CSS support with style attribute
  
Index: loncom/xml/londefdef.pm
diff -u loncom/xml/londefdef.pm:1.463 loncom/xml/londefdef.pm:1.464
--- loncom/xml/londefdef.pm:1.463	Fri Jan 27 18:27:05 2017
+++ loncom/xml/londefdef.pm	Fri Jan 27 19:58:21 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.463 2017/01/27 18:27:05 damieng Exp $
+# $Id: londefdef.pm,v 1.464 2017/01/27 19:58:21 damieng Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -1305,6 +1305,10 @@
 
 	$currentstring .= &end_p();	# close off prior para if in progress.
 	my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1);
+	if (!defined $align) {
+          # check inline CSS
+          $align = &get_css_property('text-align',$parstack,$safeeval);
+        }
 	if ($align eq 'center') {
 	    $currentstring .='\begin{center}\par ';
 	    $closing_string = '\end{center}';
@@ -1312,13 +1316,13 @@
 		$currentstring = &center_correction().$currentstring;
 	    }
 	} elsif ($align eq 'right') {
-	    $currentstring.="\n".'{\flushright ';
+	    $currentstring.="\n".'\begin{flushright}';
 #	    $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{';
-	    $closing_string= "}\n";
+	    $closing_string= '\end{flushright}'."\n";
 	} elsif ($align eq 'left') {
-	    $currentstring.= "\n".'{\flushleft ';
+	    $currentstring.= "\n".'\begin{flushleft}';
 #	    $currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{{';
-	    $closing_string = "}\n";
+	    $closing_string = '\end{flushleft}'."\n";
 	} else {
             $currentstring.='\par ';
 	    if (&is_inside_of($tagstack, 'table')) {
@@ -4053,13 +4057,33 @@
     return $currentstring;
 }
 
+my @span_end_stack; # for span tex target
+
 #-- <span> tag (end tag required)
 sub start_span {
-    my ($target,$token) = @_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[4];     
-    } 
+    } elsif ($target eq 'tex') {
+        my $endstring = '';
+        my $family = &get_css_property('font-family',$parstack,$safeeval);
+        if ($family eq 'monospace') {
+            $currentstring .= '\texttt{';
+            $endstring .= '}';
+        }
+        my $weight = &get_css_property('font-weight',$parstack,$safeeval);
+        if ($weight eq 'bold') {
+            $currentstring .= '\textbf{';
+            $endstring .= '}';
+        }
+        my $style = &get_css_property('font-style',$parstack,$safeeval);
+        if ($style eq 'italic') {
+            $currentstring .= '\textit{';
+            $endstring .= '}';
+        }
+        push(@span_end_stack, $endstring);
+    }
     return $currentstring;
 }
 
@@ -4068,7 +4092,10 @@
     my $currentstring = '';
     if ($target eq 'web' || $target eq 'webgrade') {
 	$currentstring = $token->[2];    
-    } 
+    } elsif ($target eq 'tex') {
+        my $endstring = pop @span_end_stack;
+        $currentstring .= $endstring;
+    }
     return $currentstring;
 }
 
@@ -4666,6 +4693,23 @@
     return $cleanhref;
 }
 
+# This is retrieving a CSS property from the style attribute of the current element.
+# It is not checking <style> elements or linked stylesheets yet.
+sub get_css_property {
+    my ($property,$parstack,$safeeval) = @_;
+    my $style=&Apache::lonxml::get_param('style',$parstack,$safeeval,undef,1);
+    my @style_components=split(/;/,$style);
+    foreach my $css_pair (@style_components) {
+        my ($name, $value) = split(/:/, $css_pair);
+        $name =~ s/^\s+|\s+$//g;
+        $value =~ s/^\s+|\s+$//g;
+        if ($name eq $property) {
+            return $value;
+        }
+    }
+    return undef;
+}
+
 =pod
 
 =head1 NAME




More information about the LON-CAPA-cvs mailing list