Commit f0efa6ea by Aaron Leung

Implemented "unit".

parent 755d6b51
...@@ -67,4 +67,8 @@ div { ...@@ -67,4 +67,8 @@ div {
a: type-of(false); a: type-of(false);
b: type-of("true"); b: type-of("true");
c: type-of(a b c); c: type-of(a b c);
a: unit(10);
b: unit(10%);
c: unit(10boo);
} }
...@@ -64,7 +64,7 @@ namespace Sass { ...@@ -64,7 +64,7 @@ namespace Sass {
register_function(join_3_descriptor, join_3); register_function(join_3_descriptor, join_3);
// Introspection Functions // Introspection Functions
register_function(type_of_descriptor, type_of); register_function(type_of_descriptor, type_of);
// register_function(unit_descriptor, unit); register_function(unit_descriptor, unit);
// register_function(unitless_descriptor, unitless); // register_function(unitless_descriptor, unitless);
// register_function(comparable_descriptor, comparable); // register_function(comparable_descriptor, comparable);
} }
......
#ifndef SASS_PRELEXER_INCLUDED
#include "prelexer.hpp"
#endif
#include "functions.hpp" #include "functions.hpp"
#include <iostream> #include <iostream>
#include <cmath> #include <cmath>
...@@ -339,7 +342,32 @@ namespace Sass { ...@@ -339,7 +342,32 @@ namespace Sass {
return type; return type;
} }
extern const char empty_str[] = "";
extern const char percent_str[] = "%";
Function_Descriptor unit_descriptor =
{ "unit", "$value", 0 };
Node unit(const vector<Token>& parameters, map<Token, Node>& bindings) {
Node val(bindings[parameters[0]]);
Node u(Node::string_constant, val.line_number, Token::make());
switch (val.type)
{
case Node::number:
u.content.token = Token::make(empty_str);
break;
case Node::numeric_percentage:
u.content.token = Token::make(percent_str);
break;
case Node::numeric_dimension:
u.content.token = Token::make(val.content.dimension.unit, Prelexer::identifier(val.content.dimension.unit));
break;
default: // TO DO: throw an exception
u.content.token = Token::make(empty_str);
break;
}
return u;
}
......
...@@ -133,8 +133,8 @@ namespace Sass { ...@@ -133,8 +133,8 @@ namespace Sass {
extern Function_Descriptor type_of_descriptor; extern Function_Descriptor type_of_descriptor;
Node type_of(const vector<Token>& parameters, map<Token, Node>& bindings); Node type_of(const vector<Token>& parameters, map<Token, Node>& bindings);
// extern Function_Descriptor unit_descriptor; extern Function_Descriptor unit_descriptor;
// Node unit(const vector<Token>& parameters, map<Token, Node>& bindings); Node unit(const vector<Token>& parameters, map<Token, Node>& bindings);
// //
// extern Function_Descriptor unitless_descriptor; // extern Function_Descriptor unitless_descriptor;
// Node unitless(const vector<Token>& parameters, map<Token, Node>& bindings); // Node unitless(const vector<Token>& parameters, map<Token, Node>& bindings);
......
#define SASS_PRELEXER_INCLUDED
namespace Sass { namespace Sass {
namespace Prelexer { namespace Prelexer {
......
#include <string> #include <string>
#include <sstream> #include <sstream>
#include <cstring> #include <cstring>
#ifndef SASS_PRELEXER_INCLUDED
#include "prelexer.hpp" #include "prelexer.hpp"
#endif
namespace Sass { namespace Sass {
using std::string; using std::string;
......
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