inspect.hpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef SASS_INSPECT
  2. #define SASS_INSPECT
  3. #include <string>
  4. #ifndef SASS_OPERATION
  5. #include "operation.hpp"
  6. #endif
  7. // #ifndef SASS_TO_STRING
  8. // #include "to_string.hpp"
  9. // #endif
  10. namespace Sass {
  11. using namespace std;
  12. struct Context;
  13. class Inspect : public Operation_CRTP<void, Inspect> {
  14. // import all the class-specific methods and override as desired
  15. using Operation_CRTP<void, Inspect>::operator();
  16. // To_String* to_string;
  17. string buffer;
  18. size_t indentation;
  19. Context* ctx;
  20. void indent();
  21. void fallback_impl(AST_Node* n);
  22. void append_to_buffer(const string& text);
  23. public:
  24. Inspect(Context* ctx = 0);
  25. virtual ~Inspect();
  26. string get_buffer() { return buffer; }
  27. // statements
  28. virtual void operator()(Block*);
  29. virtual void operator()(Ruleset*);
  30. virtual void operator()(Propset*);
  31. virtual void operator()(Feature_Block*);
  32. virtual void operator()(Media_Block*);
  33. virtual void operator()(At_Rule*);
  34. virtual void operator()(Declaration*);
  35. virtual void operator()(Assignment*);
  36. virtual void operator()(Import*);
  37. virtual void operator()(Import_Stub*);
  38. virtual void operator()(Warning*);
  39. virtual void operator()(Error*);
  40. virtual void operator()(Debug*);
  41. virtual void operator()(Comment*);
  42. virtual void operator()(If*);
  43. virtual void operator()(For*);
  44. virtual void operator()(Each*);
  45. virtual void operator()(While*);
  46. virtual void operator()(Return*);
  47. virtual void operator()(Extension*);
  48. virtual void operator()(Definition*);
  49. virtual void operator()(Mixin_Call*);
  50. virtual void operator()(Content*);
  51. // expressions
  52. virtual void operator()(Map*);
  53. virtual void operator()(List*);
  54. virtual void operator()(Binary_Expression*);
  55. virtual void operator()(Unary_Expression*);
  56. virtual void operator()(Function_Call*);
  57. virtual void operator()(Function_Call_Schema*);
  58. virtual void operator()(Variable*);
  59. virtual void operator()(Textual*);
  60. virtual void operator()(Number*);
  61. virtual void operator()(Color*);
  62. virtual void operator()(Boolean*);
  63. virtual void operator()(String_Schema*);
  64. virtual void operator()(String_Constant*);
  65. virtual void operator()(Feature_Query*);
  66. virtual void operator()(Feature_Query_Condition*);
  67. virtual void operator()(Media_Query*);
  68. virtual void operator()(Media_Query_Expression*);
  69. virtual void operator()(Null*);
  70. // parameters and arguments
  71. virtual void operator()(Parameter*);
  72. virtual void operator()(Parameters*);
  73. virtual void operator()(Argument*);
  74. virtual void operator()(Arguments*);
  75. // selectors
  76. virtual void operator()(Selector_Schema*);
  77. virtual void operator()(Selector_Reference*);
  78. virtual void operator()(Selector_Placeholder*);
  79. virtual void operator()(Type_Selector*);
  80. virtual void operator()(Selector_Qualifier*);
  81. virtual void operator()(Attribute_Selector*);
  82. virtual void operator()(Pseudo_Selector*);
  83. virtual void operator()(Wrapped_Selector*);
  84. virtual void operator()(Compound_Selector*);
  85. virtual void operator()(Complex_Selector*);
  86. virtual void operator()(Selector_List*);
  87. template <typename U>
  88. void fallback(U x) { fallback_impl(reinterpret_cast<AST_Node*>(x)); }
  89. };
  90. string unquote(const string&);
  91. string quote(const string&, char);
  92. }
  93. #endif