/*
* Copyright 2008 Google Inc.
*
* 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.google.common.css.compiler.ast;
/**
* Visitor interface for CSS abstract syntax trees.
*
*/
public interface CssTreeVisitor extends AtRuleHandler {
/** Called before visiting a {@code CssRootNode}'s sub trees */
boolean enterTree(CssRootNode root);
/** Called after visiting a {@code CssRootNode}'s sub trees */
void leaveTree(CssRootNode root);
/** Called before visiting a {@code CssImportBlockNode}'s sub trees */
boolean enterImportBlock(CssImportBlockNode block);
/** Called after visiting a {@code CssImportBlockNode}'s sub trees */
void leaveImportBlock(CssImportBlockNode block);
/** Called before visiting a {@code CssBlockNode}'s sub trees */
boolean enterBlock(CssBlockNode block);
/** Called after visiting a {@code CssBlockNode}'s sub trees */
void leaveBlock(CssBlockNode block);
/** Called before visiting a {@code CssConditionalBlockNode}'s sub trees */
boolean enterConditionalBlock(CssConditionalBlockNode block);
/** Called after visiting a {@code CssConditionalBlockNode}'s sub trees */
void leaveConditionalBlock(CssConditionalBlockNode block);
/** Called before visiting a {@code CssDeclarationBlockNode}'s sub trees */
boolean enterDeclarationBlock(CssDeclarationBlockNode block);
/** Called after visiting a {@code CssDeclarationBlockNode}'s sub trees */
void leaveDeclarationBlock(CssDeclarationBlockNode block);
/**
* Called before visiting a {@code CssRulesetNode}'s sub trees.
*
* @return whether ruleset children should be visited
*/
boolean enterRuleset(CssRulesetNode ruleset);
/** Called after visiting a {@code CssRulesetNode}'s sub trees */
void leaveRuleset(CssRulesetNode ruleset);
/** Called before visiting a {@code CssSelectorListNode}'s sub trees */
boolean enterSelectorBlock(CssSelectorListNode block);
/** Called after visiting a {@code CssSelectorListNode}'s sub trees */
void leaveSelectorBlock(CssSelectorListNode block);
/** Called before visiting a {@code CssDeclarationNode}'s sub trees */
boolean enterDeclaration(CssDeclarationNode declaration);
/** Called after visiting a {@code CssDeclarationNode}'s sub trees */
void leaveDeclaration(CssDeclarationNode declaration);
/** Called before visiting a {@code CssSelectorNode}'s sub trees */
boolean enterSelector(CssSelectorNode selector);
/** Called after visiting a {@code CssSelectorNode}'s sub trees */
void leaveSelector(CssSelectorNode selector);
/** Called before visiting a {@code CssClassSelectorNode}'s sub trees */
boolean enterClassSelector(CssClassSelectorNode classSelector);
/** Called after visiting a {@code CssClassSelectorNode}'s sub trees */
void leaveClassSelector(CssClassSelectorNode classSelector);
/** Called before visiting a {@code CssIdSelectorNode}'s sub trees */
boolean enterIdSelector(CssIdSelectorNode idSelector);
/** Called after visiting a {@code CssIdSelectorNode}'s sub trees */
void leaveIdSelector(CssIdSelectorNode idSelector);
/** Called before visiting a {@code CssPseudoClassNode}'s sub trees */
boolean enterPseudoClass(CssPseudoClassNode pseudoClass);
/** Called after visiting a {@code CssPseudoClassNode}'s sub trees */
void leavePseudoClass(CssPseudoClassNode pseudoClass);
/** Called before visiting a {@code CssPseudoElementNode}'s sub trees */
boolean enterPseudoElement(CssPseudoElementNode pseudoElement);
/** Called after visiting a {@code CssPseudoElementNode}'s sub trees */
void leavePseudoElement(CssPseudoElementNode pseudoElement);
/** Called before visiting a {@code CssAttributeSelectorNode}'s sub trees */
boolean enterAttributeSelector(CssAttributeSelectorNode attributeSelector);
/** Called after visiting a {@code CssAttributeSelectorNode}'s sub trees */
void leaveAttributeSelector(CssAttributeSelectorNode attributeSelector);
/** Called before visiting a {@code CssPropertyValueNode}'s sub trees */
boolean enterPropertyValue(CssPropertyValueNode propertyValue);
/** Called after visiting a {@code CssPropertyValueNode}'s sub trees */
void leavePropertyValue(CssPropertyValueNode propertyValue);
/** Called before visiting a {@code CssValueNode} that is a
{@code CssCompositeValueNode} */
boolean enterCompositeValueNode(CssCompositeValueNode value);
/** Called after visiting a {@code CssValueNode} that is a
{@code CssCompositeValueNode} */
void leaveCompositeValueNode(CssCompositeValueNode value);
/** Called before visiting a {@code CssValueNode} that is not a
{@code CssCompositeValueNode} */
boolean enterValueNode(CssValueNode value);
/** Called after visiting a {@code CssValueNode} that is not a
{@code CssCompositeValueNode} */
void leaveValueNode(CssValueNode value);
/** Called between values in a {@code CssCompositeValueNode} */
boolean enterCompositeValueNodeOperator(CssCompositeValueNode parent);
/** Called between values in a {@code CssCompositeValueNode} */
void leaveCompositeValueNodeOperator(CssCompositeValueNode parent);
/** Called before visiting a {@code CssFunctionNode}'s sub trees */
boolean enterFunctionNode(CssFunctionNode value);
/** Called after visiting a {@code CssFunctionNode}'s sub trees. */
void leaveFunctionNode(CssFunctionNode value);
/** Called before visiting a {@code CssFunctionNode}'s sub trees */
boolean enterArgumentNode(CssValueNode value);
/** Called after visiting a {@code CssFunctionNode}'s sub trees. */
void leaveArgumentNode(CssValueNode value);
/** Called before visiting a {@code CssCombinatorNode}'s sub trees */
boolean enterCombinator(CssCombinatorNode combinator);
/** Called after visiting a {@code CssCombinatorNode}'s sub trees */
void leaveCombinator(CssCombinatorNode combinator);
/** Called before visiting a {@code CssKeyNode}'s sub trees */
boolean enterKey(CssKeyNode key);
/** Called after visiting a {@code CssKeyNode}'s sub trees */
void leaveKey(CssKeyNode key);
/** Called before visiting a {@code CssKeyListNode}'s sub trees */
boolean enterKeyBlock(CssKeyListNode block);
/** Called after visiting a {@code CssKeyListNode}'s sub trees */
void leaveKeyBlock(CssKeyListNode block);
/** Called before visiting a {@code CssKeyframeRulesetNode}'s sub trees */
boolean enterKeyframeRuleset(CssKeyframeRulesetNode key);
/** Called after visiting a {@code CssKeyframeRulesetNode}'s sub trees */
void leaveKeyframeRuleset(CssKeyframeRulesetNode key);
/** Called before visiting a {@code CssForLoopRuleNode}'s sub trees */
boolean enterForLoop(CssForLoopRuleNode node);
/** Called after visiting a {@code CssForLoopRuleNode}'s sub trees */
void leaveForLoop(CssForLoopRuleNode node);
}