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

import org.matheclipse.core.basic.Config;
import org.matheclipse.core.convert.AST2Expr;
import org.matheclipse.core.form.tex.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(), "+");
	}

	/*
	 * (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;
		precedenceOpen(buf, precedence);
		final Times timesConverter = (Times) fFactory.reflection(AST2Expr.TIMES_STRING);
		for (int i = 1; i < f.size(); i++) {
			expr = f.get(i);

			if ((i > 1) && (expr instanceof IAST) && ((IAST) expr).head().toString().equals(AST2Expr.TIMES_STRING)) {
				timesConverter.convert(buf, (IAST) expr, fPrecedence, Times.PLUS_CALL);
			} else {
				if (i > 1) {
					if ((expr instanceof ISignedNumber) && (((ISignedNumber) expr).isNegative())) {
						buf.append(" - ");
						expr = ((ISignedNumber) expr).negate();
					} else {
						buf.append(" + ");
					}
				}
				fFactory.convert(buf, expr, fPrecedence);
			}
		}
		precedenceClose(buf, precedence);
		return true;
	}

}

 

Ads help maintain this website.