// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/FunctionNode.java
// public class FunctionNode implements Node {
// 
//     private final FunctionType functionType;
// 
//     private List<Node> arguments;
//     private String value;
// 
//     public FunctionNode(FunctionType functionType) {
//         this.functionType = functionType;
//         this.arguments = new ArrayList<>();
//     }
// 
//     @Override
//     public String getName() {
//         return functionType.name();
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public void addChild(Node node) {
//         arguments.add(node);
//     }
// 
//     @Override
//     public List<Node> children() {
//         return arguments;
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//         for (Node child : children()) {
//             child.accept(visitor);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "FunctionNode{"
//                 + "functionType=" + functionType
//                 + ", arguments=" + arguments.toString()
//                 + '}';
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/PropertyNode.java
// public class PropertyNode implements Node {
// 
//     private final String name;
//     private final Node value;
// 
//     public PropertyNode(String name, Node value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return value.getValue();
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.singletonList(value);
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         value.accept(visitor);
//     }
// 
//     @Override
//     public String toString() {
//         return "{ " + name + " : " + value + " }";
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/SelectorNode.java
// public class SelectorNode implements Node {
// 
//     private final String name;
//     private final List<Node> properties;
// 
//     public SelectorNode(String name) {
//         this.name = name;
//         this.properties = new ArrayList<>();
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return properties.toString();
//     }
// 
//     @Override
//     public void addChild(Node node) {
//         if (node == null) {
//             return;
//         }
//         properties.add(node);
//     }
// 
//     @Override
//     public List<Node> children() {
//         return properties;
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         for (Node node : children()) {
//             node.accept(visitor);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "name: " + name + " children: " + properties;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/ValueNode.java
// public class ValueNode implements Node {
// 
//     private String value;
// 
//     public ValueNode(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return null;
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.emptyList();
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//     }
// 
//     @Override
//     public String toString() {
//         return "val: " + value;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/VariableNode.java
// public class VariableNode implements Node {
// 
//     private final String name;
//     private final Node value;
// 
//     public VariableNode(String name, Node value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return value.getValue();
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.singletonList(value);
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//     }
// 
//     @Override
//     public String toString() {
//         return "{name: " + name + ", value: " + getValue() + "}";
//     }
// }


import com.manolovn.cssdroid.parser.domain.FunctionNode;
import com.manolovn.cssdroid.parser.domain.PropertyNode;
import com.manolovn.cssdroid.parser.domain.SelectorNode;
import com.manolovn.cssdroid.parser.domain.ValueNode;
import com.manolovn.cssdroid.parser.domain.VariableNode;
package com.manolovn.cssdroid.parser.visitor;


/**
 * Visitor to apply variables
 */
public class ApplyVariableVisitor implements NodeVisitor {

    private final String variable;
    private final String value;

    public ApplyVariableVisitor(String variable, String value) {
        this.variable = variable;
        this.value = value;
    }

    @Override
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/FunctionNode.java
// public class FunctionNode implements Node {
// 
//     private final FunctionType functionType;
// 
//     private List<Node> arguments;
//     private String value;
// 
//     public FunctionNode(FunctionType functionType) {
//         this.functionType = functionType;
//         this.arguments = new ArrayList<>();
//     }
// 
//     @Override
//     public String getName() {
//         return functionType.name();
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public void addChild(Node node) {
//         arguments.add(node);
//     }
// 
//     @Override
//     public List<Node> children() {
//         return arguments;
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//         for (Node child : children()) {
//             child.accept(visitor);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "FunctionNode{"
//                 + "functionType=" + functionType
//                 + ", arguments=" + arguments.toString()
//                 + '}';
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/PropertyNode.java
// public class PropertyNode implements Node {
// 
//     private final String name;
//     private final Node value;
// 
//     public PropertyNode(String name, Node value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return value.getValue();
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.singletonList(value);
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         value.accept(visitor);
//     }
// 
//     @Override
//     public String toString() {
//         return "{ " + name + " : " + value + " }";
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/SelectorNode.java
// public class SelectorNode implements Node {
// 
//     private final String name;
//     private final List<Node> properties;
// 
//     public SelectorNode(String name) {
//         this.name = name;
//         this.properties = new ArrayList<>();
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return properties.toString();
//     }
// 
//     @Override
//     public void addChild(Node node) {
//         if (node == null) {
//             return;
//         }
//         properties.add(node);
//     }
// 
//     @Override
//     public List<Node> children() {
//         return properties;
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         for (Node node : children()) {
//             node.accept(visitor);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "name: " + name + " children: " + properties;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/ValueNode.java
// public class ValueNode implements Node {
// 
//     private String value;
// 
//     public ValueNode(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return null;
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.emptyList();
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//     }
// 
//     @Override
//     public String toString() {
//         return "val: " + value;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/VariableNode.java
// public class VariableNode implements Node {
// 
//     private final String name;
//     private final Node value;
// 
//     public VariableNode(String name, Node value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return value.getValue();
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.singletonList(value);
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//     }
// 
//     @Override
//     public String toString() {
//         return "{name: " + name + ", value: " + getValue() + "}";
//     }
// }


// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/visitor/ApplyVariableVisitor.java
import com.manolovn.cssdroid.parser.domain.FunctionNode;
import com.manolovn.cssdroid.parser.domain.PropertyNode;
import com.manolovn.cssdroid.parser.domain.SelectorNode;
import com.manolovn.cssdroid.parser.domain.ValueNode;
import com.manolovn.cssdroid.parser.domain.VariableNode;

package com.manolovn.cssdroid.parser.visitor;


/**
 * Visitor to apply variables
 */
public class ApplyVariableVisitor implements NodeVisitor {

    private final String variable;
    private final String value;

    public ApplyVariableVisitor(String variable, String value) {
        this.variable = variable;
        this.value = value;
    }

    @Override
    public void visit(FunctionNode node) {