/**
* Copyright (c) 2011-2012 Eclipse contributors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.emf.ecore.xcore.generator;
import org.eclipse.xtext.xbase.compiler.output.FakeTreeAppendable;
import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable;
public class XcoreAppendable extends FakeTreeAppendable
{
private boolean inSingleQuotedString;
private boolean inDoubleQuotedString;
public XcoreAppendable()
{
super(new XcoreImportManager(), "\t", "\n");
}
@Override
public ITreeAppendable append(CharSequence value)
{
String string = value.toString();
if (string.equals("'"))
{
if (!inDoubleQuotedString)
{
inSingleQuotedString = !inSingleQuotedString;
}
return super.append(value);
}
else if (string.equals("\""))
{
if (!inSingleQuotedString)
{
inDoubleQuotedString = !inDoubleQuotedString;
}
return super.append(value);
}
else if (inSingleQuotedString || inDoubleQuotedString)
{
return super.append(string.replace("<%", "<%<%><%%%>"));
}
else if (string.startsWith(" else") || string.startsWith(" catch") || string.startsWith(" finally") || string.startsWith("\n"))
{
return super.append("\n").append(string.substring(1));
}
else if (string.endsWith(" {"))
{
return super.append(string.substring(0, string.length() - 2)).append("\n{");
}
else if (string.endsWith(" { "))
{
return super.append(string.substring(0, string.length() - 3)).append("\n{");
}
else if (string.startsWith("} "))
{
return super.append("}\n").append(string.substring(2));
}
else if (string.endsWith("finally "))
{
return super.append(string.substring(0, string.length() - 1)).append("\n");
}
else
{
return super.append(value);
}
}
}