|
Packit Service |
7770af |
#include "sass.hpp"
|
|
Packit Service |
7770af |
#include <iostream>
|
|
Packit Service |
7770af |
#include <typeinfo>
|
|
Packit Service |
7770af |
#include <string>
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
#include "listize.hpp"
|
|
Packit Service |
7770af |
#include "context.hpp"
|
|
Packit Service |
7770af |
#include "backtrace.hpp"
|
|
Packit Service |
7770af |
#include "error_handling.hpp"
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
namespace Sass {
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
Listize::Listize()
|
|
Packit Service |
7770af |
{ }
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
Expression_Ptr Listize::operator()(Selector_List_Ptr sel)
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), sel->length(), SASS_COMMA);
|
|
Packit Service |
7770af |
l->from_selector(true);
|
|
Packit Service |
7770af |
for (size_t i = 0, L = sel->length(); i < L; ++i) {
|
|
Packit Service |
7770af |
if (!sel->at(i)) continue;
|
|
Packit Service |
7770af |
l->append(sel->at(i)->perform(this));
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
if (l->length()) return l.detach();
|
|
Packit Service |
7770af |
return SASS_MEMORY_NEW(Null, l->pstate());
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
Expression_Ptr Listize::operator()(Compound_Selector_Ptr sel)
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
std::string str;
|
|
Packit Service |
7770af |
for (size_t i = 0, L = sel->length(); i < L; ++i) {
|
|
Packit Service |
7770af |
Expression_Ptr e = (*sel)[i]->perform(this);
|
|
Packit Service |
7770af |
if (e) str += e->to_string();
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
return SASS_MEMORY_NEW(String_Quoted, sel->pstate(), str);
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
Expression_Ptr Listize::operator()(Complex_Selector_Ptr sel)
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), 2);
|
|
Packit Service |
7770af |
l->from_selector(true);
|
|
Packit Service |
7770af |
Compound_Selector_Obj head = sel->head();
|
|
Packit Service |
7770af |
if (head && !head->is_empty_reference())
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
Expression_Ptr hh = head->perform(this);
|
|
Packit Service |
7770af |
if (hh) l->append(hh);
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
std::string reference = ! sel->reference() ? ""
|
|
Packit Service |
7770af |
: sel->reference()->to_string();
|
|
Packit Service |
7770af |
switch(sel->combinator())
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
case Complex_Selector::PARENT_OF:
|
|
Packit Service |
7770af |
l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), ">"));
|
|
Packit Service |
7770af |
break;
|
|
Packit Service |
7770af |
case Complex_Selector::ADJACENT_TO:
|
|
Packit Service |
7770af |
l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "+"));
|
|
Packit Service |
7770af |
break;
|
|
Packit Service |
7770af |
case Complex_Selector::REFERENCE:
|
|
Packit Service |
7770af |
l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "/" + reference + "/"));
|
|
Packit Service |
7770af |
break;
|
|
Packit Service |
7770af |
case Complex_Selector::PRECEDES:
|
|
Packit Service |
7770af |
l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "~"));
|
|
Packit Service |
7770af |
break;
|
|
Packit Service |
7770af |
case Complex_Selector::ANCESTOR_OF:
|
|
Packit Service |
7770af |
break;
|
|
Packit Service |
7770af |
default: break;
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
Complex_Selector_Obj tail = sel->tail();
|
|
Packit Service |
7770af |
if (tail)
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
Expression_Obj tt = tail->perform(this);
|
|
Packit Service |
7770af |
if (List_Ptr ls = Cast<List>(tt))
|
|
Packit Service |
7770af |
{ l->concat(ls); }
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
if (l->length() == 0) return 0;
|
|
Packit Service |
7770af |
return l.detach();
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
Expression_Ptr Listize::fallback_impl(AST_Node_Ptr n)
|
|
Packit Service |
7770af |
{
|
|
Packit Service |
7770af |
return Cast<Expression>(n);
|
|
Packit Service |
7770af |
}
|
|
Packit Service |
7770af |
|
|
Packit Service |
7770af |
}
|