Parcourir la source

Function compilation is refactored (#13253).

Change-Id: Ic3c5d6822d90703d7f02de3d1a3d15fe4366af07
tags/7.2.0.beta1
denisanisimov il y a 10 ans
Parent
révision
40e07d0172

+ 47
- 25
theme-compiler/src/com/vaadin/sass/internal/parser/LexicalUnitImpl.java Voir le fichier

@@ -24,11 +24,22 @@
package com.vaadin.sass.internal.parser;

import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.w3c.css.sac.LexicalUnit;

import com.vaadin.sass.internal.expression.exception.IncompatibleUnitsException;
import com.vaadin.sass.internal.util.ColorUtil;
import com.vaadin.sass.internal.parser.function.AbsFunctionGenerator;
import com.vaadin.sass.internal.parser.function.CeilFunctionGenerator;
import com.vaadin.sass.internal.parser.function.DarkenFunctionGenerator;
import com.vaadin.sass.internal.parser.function.DefaultFunctionGenerator;
import com.vaadin.sass.internal.parser.function.FloorFunctionGenerator;
import com.vaadin.sass.internal.parser.function.LightenFunctionGenerator;
import com.vaadin.sass.internal.parser.function.RoundFunctionGenerator;
import com.vaadin.sass.internal.parser.function.SCSSFunctionGenerator;
import com.vaadin.sass.internal.util.DeepCopy;

/**
@@ -325,30 +336,7 @@ public class LexicalUnitImpl implements LexicalUnit, SCSSLexicalUnit,
case LexicalUnit.SAC_RECT_FUNCTION:
case LexicalUnit.SAC_FUNCTION:
String funcName = getFunctionName();
LexicalUnitImpl firstParam = getParameters();
if ("round".equals(funcName)) {
firstParam
.setFloatValue(Math.round(firstParam.getFloatValue()));
text = firstParam.toString();
} else if ("ceil".equals(funcName)) {
firstParam.setFloatValue((float) Math.ceil(firstParam
.getFloatValue()));
text = firstParam.toString();
} else if ("floor".equals(funcName)) {
firstParam.setFloatValue((float) Math.floor(firstParam
.getFloatValue()));
text = firstParam.toString();
} else if ("abs".equals(funcName)) {
firstParam.setFloatValue(Math.abs(firstParam.getFloatValue()));
text = firstParam.toString();
} else if ("darken".equals(funcName)) {
LexicalUnitImpl dark = ColorUtil.darken(this);
text = dark.toString();
} else if ("lighten".equals(funcName)) {
text = ColorUtil.lighten(this).toString();
} else {
text = getFunctionName() + "(" + getParameters() + ")";
}
text = serializeFunction(funcName);
break;
case LexicalUnit.SAC_IDENT:
text = getStringValue();
@@ -778,4 +766,38 @@ public class LexicalUnitImpl implements LexicalUnit, SCSSLexicalUnit,
}

}

private String serializeFunction(String funcName) {
return getSerializer(funcName).printState(this);
}

private static SCSSFunctionGenerator getSerializer(String funcName) {
SCSSFunctionGenerator serializer = SERIALIZERS.get(funcName);
if (serializer == null) {
return DEFAULT_SERIALIZER;
} else {
return serializer;
}
}

private static List<SCSSFunctionGenerator> initSerializers() {
List<SCSSFunctionGenerator> list = new LinkedList<SCSSFunctionGenerator>();
list.add(new AbsFunctionGenerator());
list.add(new CeilFunctionGenerator());
list.add(new DarkenFunctionGenerator());
list.add(new FloorFunctionGenerator());
list.add(new LightenFunctionGenerator());
list.add(new RoundFunctionGenerator());
return list;
}

private static final Map<String, SCSSFunctionGenerator> SERIALIZERS = new HashMap<String, SCSSFunctionGenerator>();

private static final SCSSFunctionGenerator DEFAULT_SERIALIZER = new DefaultFunctionGenerator();

static {
for (SCSSFunctionGenerator serializer : initSerializers()) {
SERIALIZERS.put(serializer.getFunctionName(), serializer);
}
}
}

+ 39
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/AbsFunctionGenerator.java Voir le fichier

@@ -0,0 +1,39 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;

/**
*
* @since 7.2
* @author Vaadin Ltd
*/
public class AbsFunctionGenerator implements SCSSFunctionGenerator {

@Override
public String getFunctionName() {
return "abs";
}

@Override
public String printState(LexicalUnitImpl function) {
LexicalUnitImpl firstParam = function.getParameters();
firstParam.setFloatValue(Math.abs(firstParam.getFloatValue()));
return firstParam.toString();
}

}

+ 39
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/CeilFunctionGenerator.java Voir le fichier

@@ -0,0 +1,39 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;

/**
*
* @since 7.2
* @author Vaadin Ltd
*/
public class CeilFunctionGenerator implements SCSSFunctionGenerator {

@Override
public String getFunctionName() {
return "ceil";
}

@Override
public String printState(LexicalUnitImpl function) {
LexicalUnitImpl firstParam = function.getParameters();
firstParam.setFloatValue((float) Math.ceil(firstParam.getFloatValue()));
return firstParam.toString();
}

}

+ 38
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/DarkenFunctionGenerator.java Voir le fichier

@@ -0,0 +1,38 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;
import com.vaadin.sass.internal.util.ColorUtil;

/**
*
* @since 7.2
* @author Vaadin Ltd
*/
public class DarkenFunctionGenerator implements SCSSFunctionGenerator {

@Override
public String getFunctionName() {
return "darken";
}

@Override
public String printState(LexicalUnitImpl function) {
LexicalUnitImpl dark = ColorUtil.darken(function);
return dark.toString();
}
}

+ 45
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/DefaultFunctionGenerator.java Voir le fichier

@@ -0,0 +1,45 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;

/**
*
* @since 7.2
* @author Vaadin Ltd
*/
public class DefaultFunctionGenerator implements SCSSFunctionGenerator {

@Override
public String getFunctionName() {
return null;
}

@Override
public String printState(LexicalUnitImpl function) {
StringBuilder builder = new StringBuilder(function.getFunctionName());
return builder.append('(').append(printParameters(function))
.append(')').toString();
}

private String printParameters(LexicalUnitImpl function) {
if (function.getParameters() == null) {
return null;
}
return function.getParameters().toString();
}
}

+ 40
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/FloorFunctionGenerator.java Voir le fichier

@@ -0,0 +1,40 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;

/**
*
* @since 7.2
* @author Vaadin Ltd
*/
public class FloorFunctionGenerator implements SCSSFunctionGenerator {

@Override
public String getFunctionName() {
return "floor";
}

@Override
public String printState(LexicalUnitImpl function) {
LexicalUnitImpl firstParam = function.getParameters();
firstParam
.setFloatValue((float) Math.floor(firstParam.getFloatValue()));
return firstParam.toString();
}

}

+ 38
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/LightenFunctionGenerator.java Voir le fichier

@@ -0,0 +1,38 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;
import com.vaadin.sass.internal.util.ColorUtil;

/**
*
* @since 7.2
* @author Vaadin Ltd
*/
public class LightenFunctionGenerator implements SCSSFunctionGenerator {

@Override
public String getFunctionName() {
return "lighten";
}

@Override
public String printState(LexicalUnitImpl function) {
return ColorUtil.lighten(function).toString();
}

}

+ 39
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/RoundFunctionGenerator.java Voir le fichier

@@ -0,0 +1,39 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;

/**
*
* @since 7.2
* @author Vaadin Ltd
*/
public class RoundFunctionGenerator implements SCSSFunctionGenerator {

@Override
public String getFunctionName() {
return "round";
}

@Override
public String printState(LexicalUnitImpl function) {
LexicalUnitImpl firstParam = function.getParameters();
firstParam.setFloatValue(Math.round(firstParam.getFloatValue()));
return firstParam.toString();
}

}

+ 54
- 0
theme-compiler/src/com/vaadin/sass/internal/parser/function/SCSSFunctionGenerator.java Voir le fichier

@@ -0,0 +1,54 @@
/*
* Copyright 2000-2013 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.internal.parser.function;

import com.vaadin.sass.internal.parser.LexicalUnitImpl;

/**
* Generator class is used to handle SCSS functions. Generator is applied to the
* function lexical unit if its method {@link #getFunctionName()} returns name
* of the function.
*
* If there are no dedicated generator for the function then default generator
* is used.
*
* @since 7.2
* @author Vaadin Ltd
*/
public interface SCSSFunctionGenerator {

/**
* Returns function name handled by this generator. Default generator
* returns <code>null</code> and is used if there is no dedicated generator
* for given function.
*
* @since 7.2
* @return
*/
String getFunctionName();

/**
* Prints out the current state of the function. State is SCSS content of
* the function before compilation and compiled CSS content after
* compilation.
*
* @since 7.2
* @param function
* Function lexical unit to print its state
* @return String state representation of the function
*/
String printState(LexicalUnitImpl function);
}

Chargement…
Annuler
Enregistrer