|
Packit |
bfcc33 |
#include "sass.hpp"
|
|
Packit |
bfcc33 |
#include "to_c.hpp"
|
|
Packit |
bfcc33 |
#include "ast.hpp"
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
namespace Sass {
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::fallback_impl(AST_Node_Ptr n)
|
|
Packit |
bfcc33 |
{ return sass_make_error("unknown type for C-API"); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Boolean_Ptr b)
|
|
Packit |
bfcc33 |
{ return sass_make_boolean(b->value()); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Number_Ptr n)
|
|
Packit |
bfcc33 |
{ return sass_make_number(n->value(), n->unit().c_str()); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Custom_Warning_Ptr w)
|
|
Packit |
bfcc33 |
{ return sass_make_warning(w->message().c_str()); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Custom_Error_Ptr e)
|
|
Packit |
bfcc33 |
{ return sass_make_error(e->message().c_str()); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Color_Ptr c)
|
|
Packit |
bfcc33 |
{ return sass_make_color(c->r(), c->g(), c->b(), c->a()); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(String_Constant_Ptr s)
|
|
Packit |
bfcc33 |
{
|
|
Packit |
bfcc33 |
if (s->quote_mark()) {
|
|
Packit |
bfcc33 |
return sass_make_qstring(s->value().c_str());
|
|
Packit |
bfcc33 |
} else {
|
|
Packit |
bfcc33 |
return sass_make_string(s->value().c_str());
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(String_Quoted_Ptr s)
|
|
Packit |
bfcc33 |
{ return sass_make_qstring(s->value().c_str()); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(List_Ptr l)
|
|
Packit |
bfcc33 |
{
|
|
Packit |
bfcc33 |
union Sass_Value* v = sass_make_list(l->length(), l->separator());
|
|
Packit |
bfcc33 |
for (size_t i = 0, L = l->length(); i < L; ++i) {
|
|
Packit |
bfcc33 |
sass_list_set_value(v, i, (*l)[i]->perform(this));
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
return v;
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Map_Ptr m)
|
|
Packit |
bfcc33 |
{
|
|
Packit |
bfcc33 |
union Sass_Value* v = sass_make_map(m->length());
|
|
Packit |
bfcc33 |
int i = 0;
|
|
Packit |
bfcc33 |
for (auto key : m->keys()) {
|
|
Packit |
bfcc33 |
sass_map_set_key(v, i, key->perform(this));
|
|
Packit |
bfcc33 |
sass_map_set_value(v, i, m->at(key)->perform(this));
|
|
Packit |
bfcc33 |
i++;
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
return v;
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Arguments_Ptr a)
|
|
Packit |
bfcc33 |
{
|
|
Packit |
bfcc33 |
union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA);
|
|
Packit |
bfcc33 |
for (size_t i = 0, L = a->length(); i < L; ++i) {
|
|
Packit |
bfcc33 |
sass_list_set_value(v, i, (*a)[i]->perform(this));
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
return v;
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Argument_Ptr a)
|
|
Packit |
bfcc33 |
{ return a->value()->perform(this); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
// not strictly necessary because of the fallback
|
|
Packit |
bfcc33 |
union Sass_Value* To_C::operator()(Null_Ptr n)
|
|
Packit |
bfcc33 |
{ return sass_make_null(); }
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
};
|