Commit f0efa6ea by Aaron Leung

Implemented "unit".

parent 755d6b51
......@@ -67,4 +67,8 @@ div {
a: type-of(false);
b: type-of("true");
c: type-of(a b c);
a: unit(10);
b: unit(10%);
c: unit(10boo);
}
......@@ -64,7 +64,7 @@ namespace Sass {
register_function(join_3_descriptor, join_3);
// Introspection Functions
register_function(type_of_descriptor, type_of);
// register_function(unit_descriptor, unit);
register_function(unit_descriptor, unit);
// register_function(unitless_descriptor, unitless);
// register_function(comparable_descriptor, comparable);
}
......
#ifndef SASS_PRELEXER_INCLUDED
#include "prelexer.hpp"
#endif
#include "functions.hpp"
#include <iostream>
#include <cmath>
......@@ -339,6 +342,31 @@ namespace Sass {
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 {
extern Function_Descriptor type_of_descriptor;
Node type_of(const vector<Token>& parameters, map<Token, Node>& bindings);
// extern Function_Descriptor unit_descriptor;
// Node unit(const vector<Token>& parameters, map<Token, Node>& bindings);
extern Function_Descriptor unit_descriptor;
Node unit(const vector<Token>& parameters, map<Token, Node>& bindings);
//
// extern Function_Descriptor unitless_descriptor;
// Node unitless(const vector<Token>& parameters, map<Token, Node>& bindings);
......
#define SASS_PRELEXER_INCLUDED
namespace Sass {
namespace Prelexer {
......
#include <string>
#include <sstream>
#include <cstring>
#ifndef SASS_PRELEXER_INCLUDED
#include "prelexer.hpp"
#endif
namespace Sass {
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