package org.matheclipse.core.form.mathml.reflection;

import org.matheclipse.core.convert.AST2Expr;
import org.matheclipse.core.form.mathml.AbstractOperator;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.interfaces.ISignedNumber;
import org.matheclipse.parser.client.operator.ASTNodeFactory;

/**
 * Operator function conversions
 */
public class Plus extends AbstractOperator {

  public Plus() {
    super(ASTNodeFactory.MMA_STYLE_FACTORY.get("Plus").getPrecedence(), "mrow",
        "+");
  }

  /*
   * (non-Javadoc)
   * 
   * @see
   * org.matheclipse.core.form.mathml.IConverter#convert(java.lang.StringBuffer,
   * org.matheclipse.parser.interfaces.IAST, int)
   */
  @Override
  public boolean convert(final StringBuffer buf, final IAST f,
      final int precedence) {
    IExpr expr;
    fFactory.tagStart(buf, fFirstTag);
    precedenceOpen(buf, precedence);
    final Times timesConverter = (Times) fFactory.reflection(AST2Expr.TIMES_STRING);
    int size = f.size() - 1;
    for (int i = size; i > 0; i--) {
      expr = f.get(i);
      if ((i < size) && (expr instanceof IAST)
          && ((IAST) expr).head().toString().equals(AST2Expr.TIMES_STRING)) {
        timesConverter.convert(buf, (IAST) expr, fPrecedence, Times.PLUS_CALL);
      } else {
        if (i < size) {
          if ((expr instanceof ISignedNumber)
              && (((ISignedNumber) expr).isNegative())) {
            fFactory.tag(buf, "mo", "-");
            expr = ((ISignedNumber) expr).negate();
          } else {
            fFactory.tag(buf, "mo", "+");
          }
        }
        fFactory.convert(buf, expr, fPrecedence);
      }
    }
    precedenceClose(buf, precedence);
    fFactory.tagEnd(buf, fFirstTag);
    return true;
  }

}

 

Ads help maintain this website.