com.github.sommeri.less4j.core.compiler.expressions.VariableCycleDetector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of less4j Show documentation
Show all versions of less4j Show documentation
Less language is an extension of css and less4j compiles it into regular css. It adds several dynamic features into css: variables, expressions, nested rules.
Less4j is a port. The original compiler was written in JavaScript and is called less.js. The less language is mostly defined in less.js documentation/issues and by what less.js actually do. Links to less.js:
* home page: http://lesscss.org/
* source code & issues: https://github.com/cloudhead/less.js
package com.github.sommeri.less4j.core.compiler.expressions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Stack;
import com.github.sommeri.less4j.core.ast.Variable;
public class VariableCycleDetector {
// since names are evaluated lazily, we can ignore the scope and consider variable name only
private Stack names = new Stack();
private Stack variables = new Stack();
protected VariableCycleDetector() {
}
public boolean wouldCycle(Variable input) {
return names.contains(input.getName());
}
public void leftVariableValue() {
names.pop();
variables.pop();
}
public void enteringVariableValue(Variable input) {
names.add(input.getName());
variables.add(input);
}
public List getCycleFor(Variable input) {
if (!wouldCycle(input))
return Collections.emptyList();
int position = names.indexOf(input.getName());
List result = new ArrayList(variables.subList(position, variables.size()));
result.add(input);
return result;
}
}