Log Message:
-----------
When (-x)*y or x*(-y) reductions are performed, don't print extra
parentheses in string and TeX version. I.e., display as -xy not
-(xy). This makes reduction with polynomials work better.
Modified Files:
--------------
pg/lib/Parser/BOP:
multiply.pm
Revision Data
-------------
Index: multiply.pm
===================================================================
RCS file: /webwork/cvs/system/pg/lib/Parser/BOP/multiply.pm,v
retrieving revision 1.15
retrieving revision 1.16
diff -Llib/Parser/BOP/multiply.pm -Llib/Parser/BOP/multiply.pm -u -r1.15 -r1.16
--- lib/Parser/BOP/multiply.pm
+++ lib/Parser/BOP/multiply.pm
@@ -67,6 +67,13 @@
return $self;
}
+sub makeNeg {
+ my $self = shift;
+ $self = $self->SUPER::makeNeg(@_);
+ $self->{op}{noParens} = 1;
+ return $self;
+}
+
$Parser::reduce->{'1*x'} = 1;
$Parser::reduce->{'x*1'} = 1;
$Parser::reduce->{'0*x'} = 1;
@@ -76,6 +83,26 @@
$Parser::reduce->{'x*n'} = 1;
$Parser::reduce->{'fn*x'} = 1;
+sub string {
+ my ($self,$precedence,$showparens,$position,$outerRight) = @_;
+ my $string; my $bop = $self->{def};
+ $position = '' unless defined($position);
+ $showparens = '' unless defined($showparens);
+ my $extraParens = $self->context->flag('showExtraParens');
+ my $addparens =
+ defined($precedence) && !$self->{noParens} &&
+ ($showparens eq 'all' || (($showparens eq 'extra' || $bop->{fullparens}) && $extraParens > 1) ||
+ $precedence > $bop->{precedence} || ($precedence == $bop->{precedence} &&
+ ($bop->{associativity} eq 'right' || ($showparens eq 'same' && $extraParens))));
+ $outerRight = !$addparens && ($outerRight || $position eq 'right');
+
+ $string = $self->{lop}->string($bop->{precedence},$bop->{leftparens},'left',$outerRight).
+ $bop->{string}.
+ $self->{rop}->string($bop->{precedence},$bop->{rightparens},'right');
+
+ $string = $self->addParens($string) if $addparens;
+ return $string;
+}
sub TeX {
my ($self,$precedence,$showparens,$position,$outerRight) = @_;
@@ -87,7 +114,7 @@
$cdot = '\cdot ' unless $cdot;
my $addparens =
- defined($precedence) &&
+ defined($precedence) && !$self->{noParens} &&
($showparens eq 'all' || $precedence > $bop->{precedence} ||
($precedence == $bop->{precedence} &&
($bop->{associativity} eq 'right' || $showparens eq 'same')));
|