[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 = ¢er_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