/* GeoGebra - Dynamic Mathematics for Everyone http://www.geogebra.org This file is part of GeoGebra. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. */ package org.geogebra.common.kernel.arithmetic; import java.util.HashSet; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.StringTemplate; import org.geogebra.common.kernel.commands.EvalInfo; import org.geogebra.common.kernel.geos.GeoElement; /** * Helper class to evaluate expressions with GeoText objects in it. * * @see ExpressionNode#evaluate(StringTemplate) * @author Markus Hohenwarter */ public class MyStringBuffer extends ValidExpression implements TextValue { private StringBuilder sb; private Kernel kernel; /** * @param kernel * Kernel * @param str * text */ public MyStringBuffer(Kernel kernel, String str) { sb = new StringBuilder(str); this.kernel = kernel; } /** * @param str * text to append */ public void append(String str) { sb.append(str); } /** * @param pos * position to insert (same as in String#insert) * @param str * text to insert */ public void insert(int pos, String str) { sb.insert(pos, str); } @Override public String toString(StringTemplate tpl) { StringBuilder temp = new StringBuilder(); temp.append("\""); temp.append(sb); temp.append("\""); return temp.toString(); } @Override public void resolveVariables(EvalInfo info) { // MyStringBuffer never has variables } @Override public boolean isConstant() { return true; } @Override public boolean isLeaf() { return true; } @Override public boolean isNumberValue() { return false; } @Override public boolean evaluatesToText() { return true; } @Override public MyStringBuffer deepCopy(Kernel kernelForCopy) { return getText(); } @Override public HashSet<GeoElement> getVariables() { return null; } @Override final public String toValueString(StringTemplate tpl) { return sb.toString(); } @Override final public String toOutputValueString(StringTemplate tpl) { StringBuffer sb2 = new StringBuffer(sb.length() + 2); sb2.append('"'); sb2.append(sb); sb2.append('"'); return sb2.toString(); } @Override final public String toLaTeXString(boolean symbolic, StringTemplate tpl) { return sb.toString(); } @Override public MyStringBuffer getText() { return new MyStringBuffer(kernel, sb.toString()); } @Override final public boolean contains(ExpressionValue ev) { return ev == this; } /** * @return kernel */ public Kernel getKernel() { return kernel; } @Override public ExpressionNode wrap() { return new ExpressionNode(kernel, this); } @Override public ValueType getValueType() { return ValueType.TEXT; } @Override public String getTextString() { return sb.toString(); } }