Commit 8821e71b by Aaron Leung

Implementing the 'if' built-in function.

parent b3e8d772
...@@ -158,6 +158,7 @@ namespace Sass { ...@@ -158,6 +158,7 @@ namespace Sass {
register_function(comparable_descriptor, comparable); register_function(comparable_descriptor, comparable);
// Boolean Functions // Boolean Functions
register_function(not_descriptor, not_impl); register_function(not_descriptor, not_impl);
register_function(if_descriptor, if_impl);
} }
void Context::setup_color_map() void Context::setup_color_map()
......
...@@ -748,7 +748,7 @@ namespace Sass { ...@@ -748,7 +748,7 @@ namespace Sass {
// Boolean Functions /////////////////////////////////////////////////// // Boolean Functions ///////////////////////////////////////////////////
Function_Descriptor not_descriptor = Function_Descriptor not_descriptor =
{ "not", "value", 0 }; { "not", "$value", 0 };
Node not_impl(const Node parameters, map<Token, Node>& bindings, Node_Factory& new_Node) { Node not_impl(const Node parameters, map<Token, Node>& bindings, Node_Factory& new_Node) {
Node val(bindings[parameters[0].token()]); Node val(bindings[parameters[0].token()]);
if (val.type() == Node::boolean && val.boolean_value() == false) { if (val.type() == Node::boolean && val.boolean_value() == false) {
...@@ -759,5 +759,16 @@ namespace Sass { ...@@ -759,5 +759,16 @@ namespace Sass {
} }
} }
Function_Descriptor if_descriptor =
{ "if", "$predicate", "$consequent", "$alternative", 0 };
Node if_impl(const Node parameters, map<Token, Node>& bindings, Node_Factory& new_Node) {
Node predicate(bindings[parameters[0].token()]);
Node consequent(bindings[parameters[1].token()]);
Node alternative(bindings[parameters[2].token()]);
if (predicate.type() == Node::boolean && predicate.boolean_value() == false) return alternative;
return consequent;
}
} }
} }
...@@ -196,6 +196,9 @@ namespace Sass { ...@@ -196,6 +196,9 @@ namespace Sass {
extern Function_Descriptor not_descriptor; extern Function_Descriptor not_descriptor;
Node not_impl(const Node parameters, map<Token, Node>& bindings, Node_Factory& new_Node); Node not_impl(const Node parameters, map<Token, Node>& bindings, Node_Factory& new_Node);
extern Function_Descriptor if_descriptor;
Node if_impl(const Node parameters, map<Token, Node>& bindings, Node_Factory& new_Node);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment