Skip to content
This repository was archived by the owner on Oct 24, 2025. It is now read-only.

Commit cb7d066

Browse files
author
Aaron Leung
committed
Implemented the ie-hex-str built-in function.
1 parent c8971fe commit cb7d066

File tree

5 files changed

+35
-1
lines changed

5 files changed

+35
-1
lines changed

context.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ namespace Sass {
144144
// Other Color Functions
145145
register_function(adjust_color_sig, adjust_color);
146146
register_function(scale_color_sig, scale_color);
147-
register_function(change_color_sig, change_color);
147+
register_function(change_color_sig, change_color);
148+
register_function(ie_hex_str_sig, ie_hex_str);
148149
// String Functions
149150
register_function(unquote_sig, unquote);
150151
register_function(quote_sig, quote);

functions.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,16 @@ namespace Sass {
737737
return Node();
738738
}
739739

740+
extern Signature ie_hex_str_sig = "ie-hex-str($color)";
741+
Node ie_hex_str(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, Backtrace& bt, string& path, size_t line) {
742+
Node color(arg(ie_hex_str_sig, path, line, parameter_names, bindings, 0, Node::numeric_color, bt));
743+
Node result(new_Node(Node::ie_hex_str, color.path(), color.line(), 4));
744+
result << color[0] << color[1] << color[2] << color[3];
745+
Node wrapped_result(new_Node(Node::concatenation, color.path(), color.line(), 1));
746+
wrapped_result << result;
747+
return wrapped_result;
748+
}
749+
740750
////////////////////////////////////////////////////////////////////////
741751
// String Functions ////////////////////////////////////////////////////
742752
////////////////////////////////////////////////////////////////////////

functions.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ namespace Sass {
158158
extern Signature change_color_sig;
159159
Node change_color(const Node, Environment&, Node_Factory&, Backtrace&, string& path, size_t line);
160160

161+
extern Signature ie_hex_str_sig;
162+
Node ie_hex_str(const Node, Environment&, Node_Factory&, Backtrace&, string& path, size_t line);
163+
161164
// String Functions ////////////////////////////////////////////////////
162165

163166
extern Signature unquote_sig;

node.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ namespace Sass {
142142
numeric_percentage,
143143
numeric_dimension,
144144
numeric_color,
145+
ie_hex_str,
145146
boolean,
146147
important,
147148

node_emitters.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,25 @@ namespace Sass {
278278
return ss.str();
279279
}
280280
} break;
281+
282+
case ie_hex_str: {
283+
stringstream ss;
284+
ss << '#' << std::setw(2) << std::setfill('0') << std::hex;
285+
286+
double x = at(3).numeric_value() * 255;
287+
if (x > 0xff) x = 0xff;
288+
else if (x < 0) x = 0;
289+
ss << std::hex << std::setw(2) << std::uppercase << static_cast<unsigned long>(std::floor(x+0.5));
290+
291+
for (size_t i = 0; i < 3; ++i) {
292+
double x = at(i).numeric_value();
293+
if (x > 0xff) x = 0xff;
294+
else if (x < 0) x = 0;
295+
ss << std::hex << std::setw(2) << std::uppercase << static_cast<unsigned long>(std::floor(x+0.5));
296+
}
297+
298+
return ss.str();
299+
} break;
281300

282301
case uri: {
283302
string result("url(");

0 commit comments

Comments
 (0)