/*
* generated by Xtext
*/
package org.eclipse.xtext.example.fowlerdsl.formatting;
import org.eclipse.xtext.Keyword;
import org.eclipse.xtext.example.fowlerdsl.services.StatemachineGrammarAccess;
import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
import org.eclipse.xtext.formatting.impl.FormattingConfig;
import org.eclipse.xtext.util.Pair;
import com.google.inject.Inject;
/**
* This class contains custom formatting description.
*
* see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
* on how and when to use it
*
* Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an
* example
*/
public class StatemachineFormatter extends AbstractDeclarativeFormatter {
@Inject
private StatemachineGrammarAccess grammar;
@Override
protected void configureFormatting(FormattingConfig c) {
c.setLinewrap(0, 1, 2).before(grammar.getSL_COMMENTRule());
c.setLinewrap(0, 1, 2).before(grammar.getML_COMMENTRule());
c.setLinewrap(0, 1, 1).after(grammar.getML_COMMENTRule());
c.setAutoLinewrap(120);
handleBlocks(c, "events", "end");
handleBlocks(c, "resetEvents", "end");
handleBlocks(c, "commands", "end");
handleBlocks(c, "state", "end");
for (Keyword kw : grammar.findKeywords("=")) {
c.setSpace(" ").around(kw);
}
// no space before comma, one space after
for (Keyword kw : grammar.findKeywords(",")) {
c.setNoSpace().before(kw);
c.setSpace(" ").after(kw);
}
c.setLinewrap().around(grammar.getStatemachineAccess().getEventsAssignment_1_1());
c.setLinewrap().around(grammar.getStatemachineAccess().getResetEventsAssignment_2_1());
c.setLinewrap().around(grammar.getStatemachineAccess().getCommandsAssignment_3_1());
c.setLinewrap().around(grammar.getStatemachineAccess().getStatesAssignment_4());
c.setLinewrap().around(grammar.getStateAccess().getTransitionsAssignment_3());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getEndKeyword_1_2(), grammar.getStatemachineAccess().getResetEventsKeyword_2_0());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getEndKeyword_1_2(), grammar.getStatemachineAccess().getCommandsKeyword_3_0());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getEndKeyword_2_2(), grammar.getStatemachineAccess().getCommandsKeyword_3_0());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getEndKeyword_1_2(), grammar.getStatemachineAccess().getStatesAssignment_4());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getEndKeyword_1_2(), grammar.getStatemachineAccess().getStatesAssignment_4());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getEndKeyword_2_2(), grammar.getStatemachineAccess().getStatesAssignment_4());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getEndKeyword_3_2(), grammar.getStatemachineAccess().getStatesAssignment_4());
c.setLinewrap().between(grammar.getStateAccess().getRightCurlyBracketKeyword_2_3(), grammar.getStateAccess().getTransitionsAssignment_3());
c.setLinewrap(2).between(grammar.getStatemachineAccess().getStatesAssignment_4(), grammar.getStatemachineAccess().getStatesAssignment_4());
}
protected void handleBlocks(FormattingConfig c, String startKeyword,
String endKeyword) {
for (Pair<Keyword, Keyword> kw : grammar.findKeywordPairs(startKeyword,
endKeyword)) {
c.setLinewrap().after(kw.getFirst());
c.setLinewrap().around(kw.getSecond());
c.setIndentation(kw.getFirst(), kw.getSecond());
}
}
}