blob: 971fd68bd982f17eaa9420e15bbe4c12259b70a0 [file] [log] [blame]
package org.eclipse.gmf.internal.xpand;
import org.eclipse.gmf.internal.xpand.ast.TextStatement;
import org.eclipse.gmf.internal.xpand.expression.ast.SyntaxElement;
import org.eclipse.gmf.internal.xpand.model.Output;
public abstract class AbstractOutput implements Output {
private boolean deleteLine = false;
public void enterStatement(SyntaxElement stmt) {
if (stmt instanceof TextStatement) {
deleteLine = ((TextStatement) stmt).isDeleteLine();
}
}
public void exitStatement(SyntaxElement stmt) {
deleteLine = false;
}
public void write(String text) {
if (deleteLine) {
int i = 0;
while (i < text.length()) {
char charAt = text.charAt(i);
if (Character.isWhitespace(charAt)) {
if ((charAt == '\r' || charAt == '\n') && (i+1 < text.length())) {
char nextToLF = text.charAt(++i);
if (nextToLF != charAt && (nextToLF == '\n' || nextToLF == '\r')) {
i++;
}
break;
}
}
i++;
}
doAppend(text.substring(i));
deleteLine = false;
} else {
doAppend(text);
}
}
protected abstract void doAppend(String text);
}