/**
* Copyright (c) 2011 Cloudsmith Inc. and other contributors, as listed below.
* 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
*
* Contributors:
* Cloudsmith
*
*/
package org.cloudsmith.xtext.dommodel.formatter.css.debug;
import java.io.IOException;
import org.cloudsmith.xtext.dommodel.formatter.ILayoutManager;
import org.cloudsmith.xtext.dommodel.formatter.css.Alignment;
import org.cloudsmith.xtext.dommodel.formatter.css.IStyleVisitor;
import org.cloudsmith.xtext.dommodel.formatter.css.LineBreaks;
import org.cloudsmith.xtext.dommodel.formatter.css.Spacing;
/**
* @author henrik
*
*/
public class EffectiveStyleAppender implements IStyleVisitor {
public static String encodedString(String input) {
if(input == null)
return null;
input = input.replace("\n", "\\n");
input = input.replace("\t", "\\t");
input = input.replace("\r", "\\r");
return input;
}
private Appendable out;
public EffectiveStyleAppender(Appendable out) {
this.out = out;
}
@Override
public void align(Alignment x) {
append("Alignment(");
append(x.toString());
append(")");
}
private EffectiveStyleAppender append(String s) {
try {
out.append(s);
}
catch(IOException e) {
throw new RuntimeException(e);
}
return this;
}
@Override
public void dedent(int count) {
append("Dedent(");
append(Integer.toString(count));
append(")");
}
@Override
public void indent(int count) {
append("Indent(");
append(Integer.toString(count));
append(")");
}
@Override
public void layout(ILayoutManager value) {
append("Layout(");
append(value.getClass().getSimpleName());
append(")");
}
@Override
public void lineBreaks(LineBreaks lineBreakInfo) {
append(lineBreakInfo.toString());
}
@Override
public void spacing(Spacing value) {
append(value.toString());
}
@Override
public void styleName(String name) {
append("Name(");
append(name);
append(")");
}
@Override
public void tokenText(String text) {
// skip when text is null (composites)
if(text == null)
return;
append("Text(\"");
append(encodedString(text));
append("\")");
}
@Override
public void verbatim(Boolean value) {
append("Verbatim(");
append(value.toString());
append(")");
}
@Override
public void width(Integer value) {
append("Width(");
append(value.toString());
append(")");
}
}