package com.himamis.retex.editor.share.serializer;
import com.himamis.retex.editor.share.model.MathArray;
import com.himamis.retex.editor.share.model.MathCharacter;
import com.himamis.retex.editor.share.model.MathComponent;
import com.himamis.retex.editor.share.model.MathContainer;
import com.himamis.retex.editor.share.model.MathFormula;
import com.himamis.retex.editor.share.model.MathFunction;
import com.himamis.retex.editor.share.model.MathSequence;
public abstract class SerializerAdapter implements Serializer {
protected MathContainer currentField = null;
protected MathComponent currentSelStart = null;
protected MathComponent currentSelEnd = null;
protected int currentOffset = 0;
protected boolean currentBraces = true;
@Override
public String serialize(MathFormula formula) {
return serialize(formula, null, 0, null, null);
}
public String serialize(MathFormula formula, MathSequence currentField,
int currentOffset) {
return serialize(formula, currentField, currentOffset, null, null);
}
public String serialize(MathFormula formula, MathSequence currentField,
int currentOffset, MathComponent selStart, MathComponent selEnd) {
this.currentField = currentField;
this.currentOffset = currentOffset;
this.currentSelEnd = selEnd;
this.currentSelStart = selStart;
currentBraces = currentField != null;
StringBuilder buffer = new StringBuilder();
serialize(formula.getRootComponent(), buffer);
return buffer.toString();
}
public String serialize(MathContainer container, MathSequence currentField,
int currentOffset) {
this.currentField = currentField;
this.currentOffset = currentOffset;
currentBraces = currentField != null;
StringBuilder stringBuilder = new StringBuilder();
serialize(container, stringBuilder);
return stringBuilder.toString();
}
public void serialize(MathComponent container, StringBuilder stringBuilder) {
if (container instanceof MathCharacter) {
serialize((MathCharacter) container, stringBuilder);
} else if (container instanceof MathSequence) {
serialize((MathSequence) container, stringBuilder);
} else if (container instanceof MathArray) {
serialize((MathArray) container, stringBuilder);
} else if (container instanceof MathFunction) {
serialize((MathFunction) container, stringBuilder);
}
}
abstract void serialize(MathCharacter mathCharacter, StringBuilder stringBuilder);
abstract void serialize(MathSequence sequence, StringBuilder stringBuilder);
abstract void serialize(MathSequence sequence, StringBuilder stringBuilder, int from, int to);
abstract void serialize(MathFunction function, StringBuilder stringBuilder);
abstract void serialize(MathArray array, StringBuilder stringBuilder);
}