diff options
author | Artur Signell <artur@vaadin.com> | 2012-09-07 16:43:01 +0300 |
---|---|---|
committer | Artur Signell <artur@vaadin.com> | 2012-09-07 16:43:01 +0300 |
commit | 544152d1adc3a098445f7b11b4651fcc3c2f13bc (patch) | |
tree | 755041e36ad5f39ddc4d72db0f977ef68da7e047 /theme-compiler/src/com/vaadin/sass/handler | |
parent | 733a7fd89068939b44f357e9eb88e197427097da (diff) | |
download | vaadin-framework-544152d1adc3a098445f7b11b4651fcc3c2f13bc.tar.gz vaadin-framework-544152d1adc3a098445f7b11b4651fcc3c2f13bc.zip |
Renamed sass -> theme-compiler for consistency (#9299)
Diffstat (limited to 'theme-compiler/src/com/vaadin/sass/handler')
-rw-r--r-- | theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java | 72 | ||||
-rw-r--r-- | theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java | 276 |
2 files changed, 348 insertions, 0 deletions
diff --git a/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java new file mode 100644 index 0000000000..c489a6a4a7 --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandler.java @@ -0,0 +1,72 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.sass.handler; + +import java.util.ArrayList; +import java.util.Collection; + +import org.w3c.css.sac.DocumentHandler; +import org.w3c.css.sac.LexicalUnit; +import org.w3c.css.sac.SACMediaList; +import org.w3c.css.sac.SelectorList; + +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.tree.ForNode; +import com.vaadin.sass.tree.IfNode; +import com.vaadin.sass.tree.MixinDefNode; +import com.vaadin.sass.tree.VariableNode; +import com.vaadin.sass.tree.WhileNode; +import com.vaadin.sass.tree.controldirective.EachDefNode; + +public interface SCSSDocumentHandler extends DocumentHandler { + ScssStylesheet getStyleSheet(); + + void variable(String name, LexicalUnit value, boolean guarded); + + void startMixinDirective(String name, Collection<VariableNode> args); + + void endMixinDirective(String name, Collection<VariableNode> args); + + MixinDefNode mixinDirective(String name, String args, String body); + + void debugDirective(); + + ForNode forDirective(String var, String from, String to, boolean exclusive, + String body); + + WhileNode whileDirective(String condition, String body); + + IfNode ifDirective(); + + void extendDirective(SelectorList list); + + void startNestedProperties(String name); + + void endNestedProperties(String name); + + void includeDirective(String name, Collection<LexicalUnit> args); + + void importStyle(String uri, SACMediaList media, boolean isURL); + + void property(String name, LexicalUnit value, boolean important, + String comment); + + EachDefNode startEachDirective(String variable, ArrayList<String> list); + + void endEachDirective(); + +} diff --git a/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java new file mode 100644 index 0000000000..0ed8b8d0f2 --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/handler/SCSSDocumentHandlerImpl.java @@ -0,0 +1,276 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.sass.handler; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; + +import org.w3c.css.sac.CSSException; +import org.w3c.css.sac.InputSource; +import org.w3c.css.sac.LexicalUnit; +import org.w3c.css.sac.SACMediaList; +import org.w3c.css.sac.SelectorList; + +import com.vaadin.sass.ScssStylesheet; +import com.vaadin.sass.tree.BlockNode; +import com.vaadin.sass.tree.CommentNode; +import com.vaadin.sass.tree.ExtendNode; +import com.vaadin.sass.tree.ForNode; +import com.vaadin.sass.tree.IfNode; +import com.vaadin.sass.tree.ImportNode; +import com.vaadin.sass.tree.MediaNode; +import com.vaadin.sass.tree.MixinDefNode; +import com.vaadin.sass.tree.MixinNode; +import com.vaadin.sass.tree.NestPropertiesNode; +import com.vaadin.sass.tree.Node; +import com.vaadin.sass.tree.RuleNode; +import com.vaadin.sass.tree.VariableNode; +import com.vaadin.sass.tree.WhileNode; +import com.vaadin.sass.tree.controldirective.EachDefNode; + +public class SCSSDocumentHandlerImpl implements SCSSDocumentHandler { + + private final ScssStylesheet styleSheet; + Stack<Node> nodeStack = new Stack<Node>(); + private Map<String, Stack<LexicalUnit>> variableMap; + + public SCSSDocumentHandlerImpl() { + this(new ScssStylesheet()); + variableMap = new HashMap<String, Stack<LexicalUnit>>(); + } + + public SCSSDocumentHandlerImpl(ScssStylesheet styleSheet) { + this.styleSheet = styleSheet; + nodeStack.push(styleSheet); + } + + public void addVariable(String varName, LexicalUnit value) { + if (variableMap.get(varName) == null) { + variableMap.put(varName, new Stack<LexicalUnit>()); + } + Stack<LexicalUnit> valueStack = variableMap.get(varName); + valueStack.push(value); + } + + public void removeVaraible(String varName) { + Stack<LexicalUnit> valueStack = variableMap.get(varName); + if (valueStack != null && !valueStack.isEmpty()) { + valueStack.pop(); + } + } + + public LexicalUnit getVariable(String varName) { + Stack<LexicalUnit> valueStack = variableMap.get(varName); + if (valueStack != null && !valueStack.isEmpty()) { + return valueStack.peek(); + } + return null; + } + + @Override + public ScssStylesheet getStyleSheet() { + return styleSheet; + } + + @Override + public void startDocument(InputSource source) throws CSSException { + nodeStack.push(styleSheet); + // System.out.println("startDocument(InputSource source): " + // + source.getURI()); + } + + @Override + public void endDocument(InputSource source) throws CSSException { + // System.out.println("endDocument(InputSource source): " + // + source.getURI()); + } + + @Override + public void variable(String name, LexicalUnit value, boolean guarded) { + VariableNode node = new VariableNode(name, value, guarded); + nodeStack.peek().appendChild(node); + } + + @Override + public void debugDirective() { + } + + @Override + public ForNode forDirective(String var, String from, String to, + boolean exclusive, String body) { + ForNode node = new ForNode(var, from, to, exclusive, body); + System.out.println(node); + return node; + } + + @Override + public EachDefNode startEachDirective(String var, ArrayList<String> list) { + EachDefNode node = new EachDefNode(var, list); + nodeStack.peek().appendChild(node); + nodeStack.push(node); + return node; + } + + @Override + public void endEachDirective() { + nodeStack.pop(); + } + + @Override + public WhileNode whileDirective(String condition, String body) { + WhileNode node = new WhileNode(condition, body); + System.out.println(node); + return node; + } + + @Override + public IfNode ifDirective() { + return new IfNode(); + } + + @Override + public void comment(String text) throws CSSException { + CommentNode node = new CommentNode(text); + nodeStack.peek().appendChild(node); + } + + @Override + public void ignorableAtRule(String atRule) throws CSSException { + System.out.println("ignorableAtRule(String atRule): " + atRule); + } + + @Override + public void namespaceDeclaration(String prefix, String uri) + throws CSSException { + System.out.println("namespaceDeclaration(String prefix, String uri): " + + prefix + ", " + uri); + } + + @Override + public void importStyle(String uri, SACMediaList media, + String defaultNamespaceURI) throws CSSException { + } + + @Override + public void startMedia(SACMediaList media) throws CSSException { + MediaNode node = new MediaNode(media); + nodeStack.peek().appendChild(node); + nodeStack.push(node); + } + + @Override + public void endMedia(SACMediaList media) throws CSSException { + nodeStack.pop(); + } + + @Override + public void startPage(String name, String pseudo_page) throws CSSException { + System.out.println("startPage(String name, String pseudo_page): " + + name + ", " + pseudo_page); + } + + @Override + public void endPage(String name, String pseudo_page) throws CSSException { + System.out.println("endPage(String name, String pseudo_page): " + name + + ", " + pseudo_page); + } + + @Override + public void startFontFace() throws CSSException { + System.out.println("startFontFace()"); + } + + @Override + public void endFontFace() throws CSSException { + System.out.println("endFontFace()"); + } + + @Override + public void startSelector(SelectorList selectors) throws CSSException { + BlockNode node = new BlockNode(selectors); + nodeStack.peek().appendChild(node); + nodeStack.push(node); + } + + @Override + public void endSelector(SelectorList selectors) throws CSSException { + nodeStack.pop(); + } + + @Override + public void property(String name, LexicalUnit value, boolean important) + throws CSSException { + property(name, value, important, null); + } + + public void property(String name, LexicalUnit value, boolean important, + String comment) { + RuleNode node = new RuleNode(name, value, important, comment); + nodeStack.peek().appendChild(node); + } + + @Override + public void extendDirective(SelectorList list) { + ExtendNode node = new ExtendNode(list); + nodeStack.peek().appendChild(node); + } + + @Override + public MixinDefNode mixinDirective(String name, String args, String body) { + MixinDefNode node = new MixinDefNode(name, args, body); + return node; + } + + @Override + public void startNestedProperties(String name) { + NestPropertiesNode node = new NestPropertiesNode(name); + nodeStack.peek().appendChild(node); + nodeStack.push(node); + } + + @Override + public void endNestedProperties(String name) { + nodeStack.pop(); + } + + @Override + public void startMixinDirective(String name, Collection<VariableNode> args) { + MixinDefNode node = new MixinDefNode(name.trim(), args); + nodeStack.peek().appendChild(node); + nodeStack.push(node); + } + + @Override + public void endMixinDirective(String name, Collection<VariableNode> args) { + nodeStack.pop(); + } + + @Override + public void includeDirective(String name, Collection<LexicalUnit> args) { + MixinNode node = new MixinNode(name, args); + nodeStack.peek().appendChild(node); + } + + @Override + public void importStyle(String uri, SACMediaList media, boolean isURL) { + ImportNode node = new ImportNode(uri, media, isURL); + nodeStack.peek().appendChild(node); + } +} |