Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / src / check_nesting.hpp
1 #ifndef SASS_CHECK_NESTING_H
2 #define SASS_CHECK_NESTING_H
3
4 #include "ast.hpp"
5 #include "operation.hpp"
6
7 namespace Sass {
8
9   class CheckNesting : public Operation_CRTP<Statement_Ptr, CheckNesting> {
10
11     std::vector<Statement_Ptr>  parents;
12     Statement_Ptr               parent;
13     Definition_Ptr              current_mixin_definition;
14
15     Statement_Ptr fallback_impl(Statement_Ptr);
16     Statement_Ptr before(Statement_Ptr);
17     Statement_Ptr visit_children(Statement_Ptr);
18
19   public:
20     CheckNesting();
21     ~CheckNesting() { }
22
23     Statement_Ptr operator()(Block_Ptr);
24     Statement_Ptr operator()(Definition_Ptr);
25
26     template <typename U>
27     Statement_Ptr fallback(U x) {
28       Statement_Ptr n = Cast<Statement>(x);
29       if (this->should_visit(n)) {
30         return fallback_impl(n);
31       }
32       return NULL;
33     }
34
35   private:
36     void invalid_content_parent(Statement_Ptr);
37     void invalid_charset_parent(Statement_Ptr);
38     void invalid_extend_parent(Statement_Ptr);
39     // void invalid_import_parent(Statement_Ptr);
40     void invalid_mixin_definition_parent(Statement_Ptr);
41     void invalid_function_parent(Statement_Ptr);
42
43     void invalid_function_child(Statement_Ptr);
44     void invalid_prop_child(Statement_Ptr);
45     void invalid_prop_parent(Statement_Ptr);
46     void invalid_return_parent(Statement_Ptr);
47
48     bool is_transparent_parent(Statement_Ptr, Statement_Ptr);
49
50     bool should_visit(Statement_Ptr);
51
52     bool is_charset(Statement_Ptr);
53     bool is_mixin(Statement_Ptr);
54     bool is_function(Statement_Ptr);
55     bool is_root_node(Statement_Ptr);
56     bool is_at_root_node(Statement_Ptr);
57     bool is_directive_node(Statement_Ptr);
58   };
59
60 }
61
62 #endif