Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / src / listize.cpp
1 #include "sass.hpp"
2 #include <iostream>
3 #include <typeinfo>
4 #include <string>
5
6 #include "listize.hpp"
7 #include "context.hpp"
8 #include "backtrace.hpp"
9 #include "error_handling.hpp"
10
11 namespace Sass {
12
13   Listize::Listize()
14   {  }
15
16   Expression_Ptr Listize::operator()(Selector_List_Ptr sel)
17   {
18     List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), sel->length(), SASS_COMMA);
19     l->from_selector(true);
20     for (size_t i = 0, L = sel->length(); i < L; ++i) {
21       if (!sel->at(i)) continue;
22       l->append(sel->at(i)->perform(this));
23     }
24     if (l->length()) return l.detach();
25     return SASS_MEMORY_NEW(Null, l->pstate());
26   }
27
28   Expression_Ptr Listize::operator()(Compound_Selector_Ptr sel)
29   {
30     std::string str;
31     for (size_t i = 0, L = sel->length(); i < L; ++i) {
32       Expression_Ptr e = (*sel)[i]->perform(this);
33       if (e) str += e->to_string();
34     }
35     return SASS_MEMORY_NEW(String_Quoted, sel->pstate(), str);
36   }
37
38   Expression_Ptr Listize::operator()(Complex_Selector_Ptr sel)
39   {
40     List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), 2);
41     l->from_selector(true);
42     Compound_Selector_Obj head = sel->head();
43     if (head && !head->is_empty_reference())
44     {
45       Expression_Ptr hh = head->perform(this);
46       if (hh) l->append(hh);
47     }
48
49     std::string reference = ! sel->reference() ? ""
50       : sel->reference()->to_string();
51     switch(sel->combinator())
52     {
53       case Complex_Selector::PARENT_OF:
54         l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), ">"));
55       break;
56       case Complex_Selector::ADJACENT_TO:
57         l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "+"));
58       break;
59       case Complex_Selector::REFERENCE:
60         l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "/" + reference + "/"));
61       break;
62       case Complex_Selector::PRECEDES:
63         l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "~"));
64       break;
65       case Complex_Selector::ANCESTOR_OF:
66       break;
67     }
68
69     Complex_Selector_Obj tail = sel->tail();
70     if (tail)
71     {
72       Expression_Obj tt = tail->perform(this);
73       if (List_Ptr ls = Cast<List>(tt))
74       { l->concat(ls); }
75     }
76     if (l->length() == 0) return 0;
77     return l.detach();
78   }
79
80   Expression_Ptr Listize::fallback_impl(AST_Node_Ptr n)
81   {
82     return Cast<Expression>(n);
83   }
84
85 }