ifndef SASS_INSPECT_H define SASS_INSPECT_H

include “position.hpp” include “operation.hpp” include “emitter.hpp”

namespace Sass {

class Context;

class Inspect : public Operation_CRTP<void, Inspect>, public Emitter {
protected:
  // import all the class-specific methods and override as desired
  using Operation_CRTP<void, Inspect>::operator();

public:

  Inspect(const Emitter& emi);
  virtual ~Inspect();

  // statements
  virtual void operator()(Block*);
  virtual void operator()(StyleRule*);
  virtual void operator()(Bubble*);
  virtual void operator()(SupportsRule*);
  virtual void operator()(AtRootRule*);
  virtual void operator()(AtRule*);
  virtual void operator()(Keyframe_Rule*);
  virtual void operator()(Declaration*);
  virtual void operator()(Assignment*);
  virtual void operator()(Import*);
  virtual void operator()(Import_Stub*);
  virtual void operator()(WarningRule*);
  virtual void operator()(ErrorRule*);
  virtual void operator()(DebugRule*);
  virtual void operator()(Comment*);
  virtual void operator()(If*);
  virtual void operator()(ForRule*);
  virtual void operator()(EachRule*);
  virtual void operator()(WhileRule*);
  virtual void operator()(Return*);
  virtual void operator()(ExtendRule*);
  virtual void operator()(Definition*);
  virtual void operator()(Mixin_Call*);
  virtual void operator()(Content*);
  // expressions
  virtual void operator()(Map*);
  virtual void operator()(Function*);
  virtual void operator()(List*);
  virtual void operator()(Binary_Expression*);
  virtual void operator()(Unary_Expression*);
  virtual void operator()(Function_Call*);
  // virtual void operator()(Custom_Warning*);
  // virtual void operator()(Custom_Error*);
  virtual void operator()(Variable*);
  virtual void operator()(Number*);
  virtual void operator()(Color_RGBA*);
  virtual void operator()(Color_HSLA*);
  virtual void operator()(Boolean*);
  virtual void operator()(String_Schema*);
  virtual void operator()(String_Constant*);
  virtual void operator()(String_Quoted*);
  virtual void operator()(Custom_Error*);
  virtual void operator()(Custom_Warning*);
  virtual void operator()(SupportsOperation*);
  virtual void operator()(SupportsNegation*);
  virtual void operator()(SupportsDeclaration*);
  virtual void operator()(Supports_Interpolation*);
  virtual void operator()(MediaRule*);
  virtual void operator()(CssMediaRule*);
  virtual void operator()(CssMediaQuery*);
  virtual void operator()(Media_Query*);
  virtual void operator()(Media_Query_Expression*);
  virtual void operator()(At_Root_Query*);
  virtual void operator()(Null*);
  virtual void operator()(Parent_Reference* p);
  // parameters and arguments
  virtual void operator()(Parameter*);
  virtual void operator()(Parameters*);
  virtual void operator()(Argument*);
  virtual void operator()(Arguments*);
  // selectors
  virtual void operator()(Selector_Schema*);
  virtual void operator()(PlaceholderSelector*);
  virtual void operator()(TypeSelector*);
  virtual void operator()(ClassSelector*);
  virtual void operator()(IDSelector*);
  virtual void operator()(AttributeSelector*);
  virtual void operator()(PseudoSelector*);
  virtual void operator()(SelectorComponent*);
  virtual void operator()(SelectorCombinator*);
  virtual void operator()(CompoundSelector*);
  virtual void operator()(ComplexSelector*);
  virtual void operator()(SelectorList*);
  virtual sass::string lbracket(List*);
  virtual sass::string rbracket(List*);

};

} endif