Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas FAUVERGUE2015-07-29 07:39:14 +0000
committerGerrit Code Review @ Eclipse.org2015-08-03 06:56:06 +0000
commit2805078d2f7a817d1751d194a683d42e96afcfcd (patch)
tree54b92c4930fe6fc96c61a4b58acd030fc02e97dd
parentb39a9a5a159e91abae23706d7f043ccf7090153e (diff)
downloadorg.eclipse.papyrus-2805078d2f7a817d1751d194a683d42e96afcfcd.tar.gz
org.eclipse.papyrus-2805078d2f7a817d1751d194a683d42e96afcfcd.tar.xz
org.eclipse.papyrus-2805078d2f7a817d1751d194a683d42e96afcfcd.zip
Bug 473188: [CSS3] Papyrus should provide a formatter for CSS3
https://bugs.eclipse.org/bugs/show_bug.cgi?id=473188 Manage the CSS formatter. Change-Id: Ib3996df6f805faf2752e95be5c532502181d8294 Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@all4tec.net>
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/CSSRuntimeModule.java8
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/formatting/CSSFormatter.xtend145
2 files changed, 134 insertions, 19 deletions
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/CSSRuntimeModule.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/CSSRuntimeModule.java
index 00e48686b1a..f5b47d74079 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/CSSRuntimeModule.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/CSSRuntimeModule.java
@@ -3,17 +3,9 @@
*/
package org.eclipse.papyrus.infra.gmfdiag.css3;
-import org.eclipse.xtext.formatting.IFormatter;
-import org.eclipse.xtext.formatting.impl.NullFormatter;
-
/**
* Use this class to register components to be used at runtime / without the Equinox extension registry.
*/
public class CSSRuntimeModule extends org.eclipse.papyrus.infra.gmfdiag.css3.AbstractCSSRuntimeModule {
- // Formatter is not properly implemented yet. Disable all formatting to avoid errors
- @Override
- public Class<? extends IFormatter> bindIFormatter() {
- return NullFormatter.class;
- }
}
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/formatting/CSSFormatter.xtend b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/formatting/CSSFormatter.xtend
index f812d4e1b21..5bbc8c498b8 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/formatting/CSSFormatter.xtend
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css3.xtext/src/org/eclipse/papyrus/infra/gmfdiag/css3/formatting/CSSFormatter.xtend
@@ -1,12 +1,23 @@
-/*
- * generated by Xtext
- */
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST.
+ *
+ * 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:
+ * CEA LIST - Initial Implementation
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 473188
+ *
+ *****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css3.formatting
import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter
import org.eclipse.xtext.formatting.impl.FormattingConfig
-// import com.google.inject.Inject;
-// import org.eclipse.papyrus.infra.gmfdiag.css3.services.CSSGrammarAccess
+import org.eclipse.papyrus.infra.gmfdiag.css3.services.CSSGrammarAccess
+
+ import com.google.inject.Inject;
/**
* This class contains custom formatting declarations.
@@ -18,13 +29,125 @@ import org.eclipse.xtext.formatting.impl.FormattingConfig
*/
class CSSFormatter extends AbstractDeclarativeFormatter {
-// @Inject extension CSSGrammarAccess
+ @Inject extension CSSGrammarAccess
+
+ /**
+ * The space character.
+ */
+ private static final String SPACE = " "; //$NON-NLS-1$
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(SL_COMMENTRule)
-// c.setLinewrap(0, 1, 2).before(ML_COMMENTRule)
-// c.setLinewrap(0, 1, 1).after(ML_COMMENTRule)
+ // Semantic formatting (Prevent XText from adding invalid spaces)
+ c.setNoSpace().around(WSRule);
+
+ // Manage all the curly bracket
+ for(curlyBracketPair : findKeywordPairs("{", "}")){ //$NON-NLS-1$ $NON-NLS-2$
+ c.setSpace(SPACE).before(curlyBracketPair.first);
+ c.setIndentationIncrement().after(curlyBracketPair.first);
+ c.setLinewrap().after(curlyBracketPair.first);
+ c.setIndentationDecrement().before(curlyBracketPair.second);
+ c.setLinewrap().after(curlyBracketPair.second);
+ }
+
+ // Manage all the square bracket
+ for(squareBracketPair : findKeywordPairs("[", "]")){ //$NON-NLS-1$ $NON-NLS-2$
+ c.setNoSpace().around(squareBracketPair.first);
+ c.setNoSpace().around(squareBracketPair.second);
+ }
+
+ // Manage all the simple bracket
+ for(bracketPair : findKeywordPairs("(", ")")){ //$NON-NLS-1$ $NON-NLS-2$
+ c.setNoSpace().after(bracketPair.first);
+ c.setNoSpace().before(bracketPair.second);
+ }
+
+ // Manage the semi colon
+ for(semicolon : findKeywords(";")){ //$NON-NLS-1$
+ c.setNoSpace().before(semicolon);
+ c.setLinewrap().after(semicolon);
+ }
+
+ // Manage the dot
+ for(dot : findKeywords(".")){ //$NON-NLS-1$
+ c.setNoSpace().around(dot);
+ }
+
+ // Manage the percent
+ for(percent : findKeywords("%")){ //$NON-NLS-1$
+ c.setNoSpace().before(percent);
+ }
+
+ // Lexical Comments
+ c.setLinewrap(0, 1, 2).before(ML_COMMENTRule)
+ c.setLinewrap(0, 1, 1).after(ML_COMMENTRule)
+
+ // The root document structure
+ c.setLinewrap(2).after(stylesheetAccess.charsetAssignment_0);
+ c.setLinewrap(2).after(stylesheetAccess.importsImportExpressionParserRuleCall_1_0);
+ c.setLinewrap(2).after(rulesetRule);
+ c.setLinewrap(2).after(mediaRule);
+ c.setLinewrap(2).after(pageRule);
+ c.setLinewrap(2).after(font_faceRule);
+ c.setLinewrap(2).after(keyframesRule);
+
+ // Charset format
+ c.setSpace(SPACE).after(charsetAccess.charsetKeyword_0_0);
+ c.setSpace(SPACE).after(charsetAccess.CHARSETKeyword_0_1);
+
+ // Import expression format
+ c.setSpace(SPACE).after(importExpressionAccess.importKeyword_0_0);
+ c.setSpace(SPACE).after(importExpressionAccess.IMPORTKeyword_0_1);
+
+ // Page format
+ c.setSpace(SPACE).after(pageAccess.pageKeyword_1_0);
+ c.setSpace(SPACE).after(pageAccess.PAGEKeyword_1_1);
+ c.setNoSpace().around(pseudo_pageAccess.COLONTerminalRuleCall_0);
+
+ // Media format
+ c.setSpace(SPACE).after(mediaAccess.mediaKeyword_0_0);
+ c.setSpace(SPACE).after(mediaAccess.MEDIAKeyword_0_1);
+ c.setNoSpace().before(media_listAccess.COMMATerminalRuleCall_1_0);
+ c.setSpace(SPACE).after(media_listAccess.COMMATerminalRuleCall_1_0);
+
+ // Font face format
+ c.setSpace(SPACE).after(font_faceAccess.fontFaceKeyword_1_0);
+ c.setSpace(SPACE).after(font_faceAccess.FONTFACEKeyword_1_1);
+
+ // Key frames format
+ c.setSpace(SPACE).after(keyframesAccess.keyframesKeyword_1_0);
+ c.setSpace(SPACE).after(keyframesAccess.KEYFRAMESKeyword_1_1);
+
+ // Rule set
+ c.setNoSpace().before(rulesetAccess.COMMATerminalRuleCall_1_1);
+ c.setLinewrap().after(rulesetAccess.COMMATerminalRuleCall_1_1);
+
+ // No spaces between unary operator and number
+ c.setNoSpace().after(PLUSRule);
+ c.setNoSpace().after(DASHRule);
+ c.setNoSpace().before(ONE_INTRule);
+ c.setNoSpace().before(ONE_HEX_LETTERRule);
+ c.setNoSpace().around(INCLUDESRule);
+ c.setNoSpace().around(DASHMATCHRule);
+ c.setNoSpace().around(operatorRule);
+
+ // No spaces before simpleSelector condition
+ c.setNoSpace().around(pseudoClassAccess.COLONTerminalRuleCall_0);
+ c.setNoSpace().around(pseudoClassAccess.COLONTerminalRuleCall_1);
+ c.setNoSpace().around(pseudoClassFunctionAccess.COLONTerminalRuleCall_1_0);
+ c.setNoSpace().after(pseudoClassFunctionAccess.nameAssignment_1_1);
+
+ // Declarations
+ c.setNoSpace().before(css_declarationAccess.COLONTerminalRuleCall_3);
+ c.setSpace(SPACE).after(css_declarationAccess.COLONTerminalRuleCall_3)
+
+ // Attribute
+ c.setNoSpace().around(attributeSelectorAccess.opAssignment_3_0);
+
+ // The not function format
+ c.setNoSpace().after(notFunctionCallAccess.notKeyword_1);
+
+ // Manage the specific implementations
+ c.setNoSpace().around(symbolTokAccess.symbolAssignment_1);
+ c.setNoSpace().around(validURLRule);
}
}

Back to the top