All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.sommeri.less4j.core.compiler.expressions.VariableCycleDetector Maven / Gradle / Ivy

Go to download

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

There is a newer version: 1.17.2
Show newest version
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;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy