Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / src / expand.hpp
1 #ifndef SASS_EXPAND_H
2 #define SASS_EXPAND_H
3
4 #include <vector>
5
6 #include "ast.hpp"
7 #include "eval.hpp"
8 #include "operation.hpp"
9 #include "environment.hpp"
10
11 namespace Sass {
12
13   class Listize;
14   class Context;
15   class Eval;
16   struct Backtrace;
17
18   class Expand : public Operation_CRTP<Statement_Ptr, Expand> {
19   public:
20
21     Env* environment();
22     Selector_List_Obj selector();
23     Backtrace* backtrace();
24
25     Context&          ctx;
26     Eval              eval;
27     size_t            recursions;
28     bool              in_keyframes;
29     bool              at_root_without_rule;
30     bool              old_at_root_without_rule;
31
32     // it's easier to work with vectors
33     std::vector<Env*>              env_stack;
34     std::vector<Block_Ptr>         block_stack;
35     std::vector<AST_Node_Obj>      call_stack;
36     std::vector<Selector_List_Obj> selector_stack;
37     std::vector<Media_Block_Ptr>   media_block_stack;
38     std::vector<Backtrace*>        backtrace_stack;
39
40     Statement_Ptr fallback_impl(AST_Node_Ptr n);
41
42   private:
43     void expand_selector_list(Selector_Obj, Selector_List_Obj extender);
44
45   public:
46     Expand(Context&, Env*, Backtrace*, std::vector<Selector_List_Obj>* stack = NULL);
47     ~Expand() { }
48
49     Block_Ptr operator()(Block_Ptr);
50     Statement_Ptr operator()(Ruleset_Ptr);
51     Statement_Ptr operator()(Media_Block_Ptr);
52     Statement_Ptr operator()(Supports_Block_Ptr);
53     Statement_Ptr operator()(At_Root_Block_Ptr);
54     Statement_Ptr operator()(Directive_Ptr);
55     Statement_Ptr operator()(Declaration_Ptr);
56     Statement_Ptr operator()(Assignment_Ptr);
57     Statement_Ptr operator()(Import_Ptr);
58     Statement_Ptr operator()(Import_Stub_Ptr);
59     Statement_Ptr operator()(Warning_Ptr);
60     Statement_Ptr operator()(Error_Ptr);
61     Statement_Ptr operator()(Debug_Ptr);
62     Statement_Ptr operator()(Comment_Ptr);
63     Statement_Ptr operator()(If_Ptr);
64     Statement_Ptr operator()(For_Ptr);
65     Statement_Ptr operator()(Each_Ptr);
66     Statement_Ptr operator()(While_Ptr);
67     Statement_Ptr operator()(Return_Ptr);
68     Statement_Ptr operator()(Extension_Ptr);
69     Statement_Ptr operator()(Definition_Ptr);
70     Statement_Ptr operator()(Mixin_Call_Ptr);
71     Statement_Ptr operator()(Content_Ptr);
72
73     template <typename U>
74     Statement_Ptr fallback(U x) { return fallback_impl(x); }
75
76     void append_block(Block_Ptr);
77   };
78
79 }
80
81 #endif