Initial commit
[yaffs-website] / node_modules / node-sass / src / libsass / src / to_c.cpp
1 #include "sass.hpp"
2 #include "to_c.hpp"
3 #include "ast.hpp"
4
5 namespace Sass {
6
7   union Sass_Value* To_C::fallback_impl(AST_Node_Ptr n)
8   { return sass_make_error("unknown type for C-API"); }
9
10   union Sass_Value* To_C::operator()(Boolean_Ptr b)
11   { return sass_make_boolean(b->value()); }
12
13   union Sass_Value* To_C::operator()(Number_Ptr n)
14   { return sass_make_number(n->value(), n->unit().c_str()); }
15
16   union Sass_Value* To_C::operator()(Custom_Warning_Ptr w)
17   { return sass_make_warning(w->message().c_str()); }
18
19   union Sass_Value* To_C::operator()(Custom_Error_Ptr e)
20   { return sass_make_error(e->message().c_str()); }
21
22   union Sass_Value* To_C::operator()(Color_Ptr c)
23   { return sass_make_color(c->r(), c->g(), c->b(), c->a()); }
24
25   union Sass_Value* To_C::operator()(String_Constant_Ptr s)
26   {
27     if (s->quote_mark()) {
28       return sass_make_qstring(s->value().c_str());
29     } else {
30       return sass_make_string(s->value().c_str());
31     }
32   }
33
34   union Sass_Value* To_C::operator()(String_Quoted_Ptr s)
35   { return sass_make_qstring(s->value().c_str()); }
36
37   union Sass_Value* To_C::operator()(List_Ptr l)
38   {
39     union Sass_Value* v = sass_make_list(l->length(), l->separator(), l->is_bracketed());
40     for (size_t i = 0, L = l->length(); i < L; ++i) {
41       sass_list_set_value(v, i, (*l)[i]->perform(this));
42     }
43     return v;
44   }
45
46   union Sass_Value* To_C::operator()(Map_Ptr m)
47   {
48     union Sass_Value* v = sass_make_map(m->length());
49     int i = 0;
50     for (auto key : m->keys()) {
51       sass_map_set_key(v, i, key->perform(this));
52       sass_map_set_value(v, i, m->at(key)->perform(this));
53       i++;
54     }
55     return v;
56   }
57
58   union Sass_Value* To_C::operator()(Arguments_Ptr a)
59   {
60     union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA, false);
61     for (size_t i = 0, L = a->length(); i < L; ++i) {
62       sass_list_set_value(v, i, (*a)[i]->perform(this));
63     }
64     return v;
65   }
66
67   union Sass_Value* To_C::operator()(Argument_Ptr a)
68   { return a->value()->perform(this); }
69
70   // not strictly necessary because of the fallback
71   union Sass_Value* To_C::operator()(Null_Ptr n)
72   { return sass_make_null(); }
73
74 };