holger.willebrandt@gmail.com 14 лет назад
Родитель
Сommit
7ffd7005f2

+ 38 - 8
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/formatting/SGenFormatter.java

@@ -3,25 +3,55 @@
  */
 package org.yakindu.sct.generator.genmodel.formatting;
 
+import org.eclipse.xtext.Group;
+import org.eclipse.xtext.Keyword;
 import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
 import org.eclipse.xtext.formatting.impl.FormattingConfig;
+import org.eclipse.xtext.util.Pair;
+import org.yakindu.sct.generator.genmodel.services.SGenGrammarAccess;
 
 /**
  * This class contains custom formatting description.
  * 
  * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
- * on how and when to use it 
+ * on how and when to use it
  * 
- * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an
+ * example
  */
 public class SGenFormatter extends AbstractDeclarativeFormatter {
-	
+
 	@Override
 	protected void configureFormatting(FormattingConfig c) {
-// It's usually a good idea to activate the following three statements.
-// They will add and preserve newlines around comments
-//		c.setLinewrap(0, 1, 2).before(getGrammarAccess().getSL_COMMENTRule());
-//		c.setLinewrap(0, 1, 2).before(getGrammarAccess().getML_COMMENTRule());
-//		c.setLinewrap(0, 1, 1).after(getGrammarAccess().getML_COMMENTRule());
+		// It's usually a good idea to activate the following three statements.
+		// They will add and preserve newlines around comments
+		// c.setLinewrap(0, 1,
+		// 2).before(getGrammarAccess().getSL_COMMENTRule());
+		// c.setLinewrap(0, 1,
+		// 2).before(getGrammarAccess().getML_COMMENTRule());
+		// c.setLinewrap(0, 1, 1).after(getGrammarAccess().getML_COMMENTRule());
+
+		// Find elements which declare their body in curly brackets.
+		// - Increment Indentation for the body.
+		// - Line wrap before opening and after closing element
+		for (Pair<Keyword, Keyword> pair : grammar.findKeywordPairs("{", "}")) {
+			c.setIndentation(pair.getFirst(), pair.getSecond());
+			c.setLinewrap().after(pair.getFirst());
+			c.setLinewrap().around(pair.getSecond());
+
+			Keyword openingBrace = pair.getFirst();
+			Group containingGroup = (Group) openingBrace.eContainer();
+
+			// Top-most elements with brackets: Insert blank lines
+			// if (containingGroup.eContainer().eContainer() instanceof Grammar)
+			// {
+			c.setLinewrap(1, 2, 2).before(containingGroup);
+			c.setLinewrap(1, 2, 2).after(containingGroup);
+			// }
+		}
+
+		SGenGrammarAccess g = (SGenGrammarAccess) getGrammarAccess();
+		c.setLinewrap().around(g.getFeatureConfigurationRule());
+		c.setLinewrap().around(g.getFeatureParameterValueRule());
 	}
 }