sassc 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/context.h +3 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +117 -117
- data/ext/libsass/src/ast.hpp +160 -162
- data/ext/libsass/src/ast_def_macros.hpp +10 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +2 -2
- data/ext/libsass/src/ast_fwd_decl.hpp +61 -52
- data/ext/libsass/src/ast_helpers.hpp +5 -5
- data/ext/libsass/src/ast_sel_cmp.cpp +18 -18
- data/ext/libsass/src/ast_sel_super.cpp +52 -52
- data/ext/libsass/src/ast_sel_unify.cpp +16 -16
- data/ext/libsass/src/ast_sel_weave.cpp +62 -62
- data/ext/libsass/src/ast_selectors.cpp +87 -77
- data/ext/libsass/src/ast_selectors.hpp +72 -62
- data/ext/libsass/src/ast_supports.cpp +35 -35
- data/ext/libsass/src/ast_supports.hpp +29 -29
- data/ext/libsass/src/ast_values.cpp +58 -58
- data/ext/libsass/src/ast_values.hpp +75 -75
- data/ext/libsass/src/backtrace.cpp +9 -9
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +2 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +17 -17
- data/ext/libsass/src/bind.hpp +1 -1
- data/ext/libsass/src/c2ast.cpp +3 -3
- data/ext/libsass/src/c2ast.hpp +1 -1
- data/ext/libsass/src/check_nesting.cpp +36 -36
- data/ext/libsass/src/check_nesting.hpp +2 -2
- data/ext/libsass/src/color_maps.cpp +5 -5
- data/ext/libsass/src/color_maps.hpp +1 -1
- data/ext/libsass/src/context.cpp +63 -60
- data/ext/libsass/src/context.hpp +33 -33
- data/ext/libsass/src/cssize.cpp +30 -29
- data/ext/libsass/src/cssize.hpp +13 -13
- data/ext/libsass/src/dart_helpers.hpp +5 -5
- data/ext/libsass/src/debugger.hpp +127 -128
- data/ext/libsass/src/emitter.cpp +12 -12
- data/ext/libsass/src/emitter.hpp +10 -10
- data/ext/libsass/src/environment.cpp +27 -27
- data/ext/libsass/src/environment.hpp +24 -24
- data/ext/libsass/src/error_handling.cpp +42 -42
- data/ext/libsass/src/error_handling.hpp +38 -50
- data/ext/libsass/src/eval.cpp +138 -132
- data/ext/libsass/src/eval.hpp +17 -17
- data/ext/libsass/src/eval_selectors.cpp +3 -3
- data/ext/libsass/src/expand.cpp +70 -64
- data/ext/libsass/src/expand.hpp +12 -12
- data/ext/libsass/src/extender.cpp +55 -53
- data/ext/libsass/src/extender.hpp +14 -14
- data/ext/libsass/src/file.cpp +66 -58
- data/ext/libsass/src/file.hpp +23 -25
- data/ext/libsass/src/fn_colors.cpp +9 -9
- data/ext/libsass/src/fn_lists.cpp +18 -18
- data/ext/libsass/src/fn_maps.cpp +3 -3
- data/ext/libsass/src/fn_miscs.cpp +15 -15
- data/ext/libsass/src/fn_numbers.cpp +7 -7
- data/ext/libsass/src/fn_selectors.cpp +8 -8
- data/ext/libsass/src/fn_strings.cpp +34 -22
- data/ext/libsass/src/fn_utils.cpp +29 -26
- data/ext/libsass/src/fn_utils.hpp +10 -10
- data/ext/libsass/src/inspect.cpp +35 -34
- data/ext/libsass/src/inspect.hpp +21 -21
- data/ext/libsass/src/lexer.cpp +3 -1
- data/ext/libsass/src/listize.cpp +2 -2
- data/ext/libsass/src/mapping.hpp +1 -0
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/memory/allocator.cpp +48 -0
- data/ext/libsass/src/memory/allocator.hpp +138 -0
- data/ext/libsass/src/memory/config.hpp +20 -0
- data/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
- data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +18 -6
- data/ext/libsass/src/operation.hpp +44 -44
- data/ext/libsass/src/operators.cpp +18 -18
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +18 -18
- data/ext/libsass/src/output.cpp +16 -16
- data/ext/libsass/src/output.hpp +5 -5
- data/ext/libsass/src/parser.cpp +327 -345
- data/ext/libsass/src/parser.hpp +77 -87
- data/ext/libsass/src/parser_selectors.cpp +6 -6
- data/ext/libsass/src/permutate.hpp +39 -15
- data/ext/libsass/src/plugins.cpp +7 -7
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +7 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/remove_placeholders.cpp +4 -4
- data/ext/libsass/src/remove_placeholders.hpp +3 -3
- data/ext/libsass/src/sass.cpp +16 -15
- data/ext/libsass/src/sass.hpp +9 -5
- data/ext/libsass/src/sass_context.cpp +52 -34
- data/ext/libsass/src/sass_values.cpp +8 -10
- data/ext/libsass/src/settings.hpp +19 -0
- data/ext/libsass/src/source.cpp +69 -0
- data/ext/libsass/src/source.hpp +95 -0
- data/ext/libsass/src/source_data.hpp +32 -0
- data/ext/libsass/src/source_map.cpp +22 -18
- data/ext/libsass/src/source_map.hpp +12 -9
- data/ext/libsass/src/units.cpp +19 -19
- data/ext/libsass/src/units.hpp +8 -8
- data/ext/libsass/src/utf8_string.cpp +9 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +38 -38
- data/ext/libsass/src/util.hpp +18 -18
- data/ext/libsass/src/util_string.cpp +13 -13
- data/ext/libsass/src/util_string.hpp +9 -8
- data/ext/libsass/src/values.cpp +12 -12
- data/lib/sassc/native.rb +3 -5
- data/lib/sassc/version.rb +1 -1
- data/test/native_test.rb +4 -4
- metadata +14 -5
- data/lib/sassc/native/lib_c.rb +0 -21
@@ -10,12 +10,13 @@ namespace Sass {
|
|
10
10
|
|
11
11
|
Definition* make_native_function(Signature sig, Native_Function func, Context& ctx)
|
12
12
|
{
|
13
|
-
|
13
|
+
SourceFile* source = SASS_MEMORY_NEW(SourceFile, "[built-in function]", sig, std::string::npos);
|
14
|
+
Parser sig_parser(source, ctx, ctx.traces);
|
14
15
|
sig_parser.lex<Prelexer::identifier>();
|
15
|
-
|
16
|
+
sass::string name(Util::normalize_underscores(sig_parser.lexed));
|
16
17
|
Parameters_Obj params = sig_parser.parse_parameters();
|
17
18
|
return SASS_MEMORY_NEW(Definition,
|
18
|
-
|
19
|
+
SourceSpan(source),
|
19
20
|
sig,
|
20
21
|
name,
|
21
22
|
params,
|
@@ -26,19 +27,19 @@ namespace Sass {
|
|
26
27
|
Definition* make_c_function(Sass_Function_Entry c_func, Context& ctx)
|
27
28
|
{
|
28
29
|
using namespace Prelexer;
|
29
|
-
|
30
30
|
const char* sig = sass_function_get_signature(c_func);
|
31
|
-
|
31
|
+
SourceFile* source = SASS_MEMORY_NEW(SourceFile, "[c function]", sig, std::string::npos);
|
32
|
+
Parser sig_parser(source, ctx, ctx.traces);
|
32
33
|
// allow to overload generic callback plus @warn, @error and @debug with custom functions
|
33
34
|
sig_parser.lex < alternatives < identifier, exactly <'*'>,
|
34
35
|
exactly < Constants::warn_kwd >,
|
35
36
|
exactly < Constants::error_kwd >,
|
36
37
|
exactly < Constants::debug_kwd >
|
37
38
|
> >();
|
38
|
-
|
39
|
+
sass::string name(Util::normalize_underscores(sig_parser.lexed));
|
39
40
|
Parameters_Obj params = sig_parser.parse_parameters();
|
40
41
|
return SASS_MEMORY_NEW(Definition,
|
41
|
-
|
42
|
+
SourceSpan(source),
|
42
43
|
sig,
|
43
44
|
name,
|
44
45
|
params,
|
@@ -47,13 +48,13 @@ namespace Sass {
|
|
47
48
|
|
48
49
|
namespace Functions {
|
49
50
|
|
50
|
-
|
51
|
+
sass::string function_name(Signature sig)
|
51
52
|
{
|
52
|
-
|
53
|
+
sass::string str(sig);
|
53
54
|
return str.substr(0, str.find('('));
|
54
55
|
}
|
55
56
|
|
56
|
-
Map* get_arg_m(const
|
57
|
+
Map* get_arg_m(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
|
57
58
|
{
|
58
59
|
AST_Node* value = env[argname];
|
59
60
|
if (Map* map = Cast<Map>(value)) return map;
|
@@ -64,14 +65,14 @@ namespace Sass {
|
|
64
65
|
return get_arg<Map>(argname, env, sig, pstate, traces);
|
65
66
|
}
|
66
67
|
|
67
|
-
double get_arg_r(const
|
68
|
+
double get_arg_r(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, double lo, double hi)
|
68
69
|
{
|
69
70
|
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
70
71
|
Number tmpnr(val);
|
71
72
|
tmpnr.reduce();
|
72
73
|
double v = tmpnr.value();
|
73
74
|
if (!(lo <= v && v <= hi)) {
|
74
|
-
|
75
|
+
sass::ostream msg;
|
75
76
|
msg << "argument `" << argname << "` of `" << sig << "` must be between ";
|
76
77
|
msg << lo << " and " << hi;
|
77
78
|
error(msg.str(), pstate, traces);
|
@@ -79,7 +80,7 @@ namespace Sass {
|
|
79
80
|
return v;
|
80
81
|
}
|
81
82
|
|
82
|
-
Number* get_arg_n(const
|
83
|
+
Number* get_arg_n(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
|
83
84
|
{
|
84
85
|
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
85
86
|
val = SASS_MEMORY_COPY(val);
|
@@ -87,7 +88,7 @@ namespace Sass {
|
|
87
88
|
return val;
|
88
89
|
}
|
89
90
|
|
90
|
-
double get_arg_val(const
|
91
|
+
double get_arg_val(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
|
91
92
|
{
|
92
93
|
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
93
94
|
Number tmpnr(val);
|
@@ -95,7 +96,7 @@ namespace Sass {
|
|
95
96
|
return tmpnr.value();
|
96
97
|
}
|
97
98
|
|
98
|
-
double color_num(const
|
99
|
+
double color_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
|
99
100
|
{
|
100
101
|
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
101
102
|
Number tmpnr(val);
|
@@ -107,7 +108,7 @@ namespace Sass {
|
|
107
108
|
}
|
108
109
|
}
|
109
110
|
|
110
|
-
double alpha_num(const
|
111
|
+
double alpha_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces) {
|
111
112
|
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
112
113
|
Number tmpnr(val);
|
113
114
|
tmpnr.reduce();
|
@@ -118,10 +119,10 @@ namespace Sass {
|
|
118
119
|
}
|
119
120
|
}
|
120
121
|
|
121
|
-
SelectorListObj get_arg_sels(const
|
122
|
-
|
122
|
+
SelectorListObj get_arg_sels(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx) {
|
123
|
+
ExpressionObj exp = ARG(argname, Expression);
|
123
124
|
if (exp->concrete_type() == Expression::NULL_VAL) {
|
124
|
-
|
125
|
+
sass::ostream msg;
|
125
126
|
msg << argname << ": null is not a valid selector: it must be a string,\n";
|
126
127
|
msg << "a list of strings, or a list of lists of strings for `" << function_name(sig) << "'";
|
127
128
|
error(msg.str(), exp->pstate(), traces);
|
@@ -129,22 +130,24 @@ namespace Sass {
|
|
129
130
|
if (String_Constant* str = Cast<String_Constant>(exp)) {
|
130
131
|
str->quote_mark(0);
|
131
132
|
}
|
132
|
-
|
133
|
-
|
133
|
+
sass::string exp_src = exp->to_string(ctx.c_options);
|
134
|
+
ItplFile* source = SASS_MEMORY_NEW(ItplFile, exp_src.c_str(), exp->pstate());
|
135
|
+
return Parser::parse_selector(source, ctx, traces, false);
|
134
136
|
}
|
135
137
|
|
136
|
-
CompoundSelectorObj get_arg_sel(const
|
137
|
-
|
138
|
+
CompoundSelectorObj get_arg_sel(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx) {
|
139
|
+
ExpressionObj exp = ARG(argname, Expression);
|
138
140
|
if (exp->concrete_type() == Expression::NULL_VAL) {
|
139
|
-
|
141
|
+
sass::ostream msg;
|
140
142
|
msg << argname << ": null is not a string for `" << function_name(sig) << "'";
|
141
143
|
error(msg.str(), exp->pstate(), traces);
|
142
144
|
}
|
143
145
|
if (String_Constant* str = Cast<String_Constant>(exp)) {
|
144
146
|
str->quote_mark(0);
|
145
147
|
}
|
146
|
-
|
147
|
-
|
148
|
+
sass::string exp_src = exp->to_string(ctx.c_options);
|
149
|
+
ItplFile* source = SASS_MEMORY_NEW(ItplFile, exp_src.c_str(), exp->pstate());
|
150
|
+
SelectorListObj sel_list = Parser::parse_selector(source, ctx, traces, false);
|
148
151
|
if (sel_list->length() == 0) return {};
|
149
152
|
return sel_list->first()->first();
|
150
153
|
}
|
@@ -18,7 +18,7 @@ namespace Sass {
|
|
18
18
|
Env& d_env, \
|
19
19
|
Context& ctx, \
|
20
20
|
Signature sig, \
|
21
|
-
|
21
|
+
SourceSpan pstate, \
|
22
22
|
Backtraces& traces, \
|
23
23
|
SelectorStack selector_stack, \
|
24
24
|
SelectorStack original_stack \
|
@@ -37,7 +37,7 @@ namespace Sass {
|
|
37
37
|
namespace Functions {
|
38
38
|
|
39
39
|
template <typename T>
|
40
|
-
T* get_arg(const
|
40
|
+
T* get_arg(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
|
41
41
|
{
|
42
42
|
T* val = Cast<T>(env[argname]);
|
43
43
|
if (!val) {
|
@@ -46,14 +46,14 @@ namespace Sass {
|
|
46
46
|
return val;
|
47
47
|
}
|
48
48
|
|
49
|
-
Map* get_arg_m(const
|
50
|
-
Number* get_arg_n(const
|
51
|
-
double alpha_num(const
|
52
|
-
double color_num(const
|
53
|
-
double get_arg_r(const
|
54
|
-
double get_arg_val(const
|
55
|
-
SelectorListObj get_arg_sels(const
|
56
|
-
CompoundSelectorObj get_arg_sel(const
|
49
|
+
Map* get_arg_m(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // maps only
|
50
|
+
Number* get_arg_n(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // numbers only
|
51
|
+
double alpha_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // colors only
|
52
|
+
double color_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // colors only
|
53
|
+
double get_arg_r(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, double lo, double hi); // colors only
|
54
|
+
double get_arg_val(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // shared
|
55
|
+
SelectorListObj get_arg_sels(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx); // selectors only
|
56
|
+
CompoundSelectorObj get_arg_sel(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx); // selectors only
|
57
57
|
|
58
58
|
}
|
59
59
|
|
data/ext/libsass/src/inspect.cpp
CHANGED
@@ -42,7 +42,7 @@ namespace Sass {
|
|
42
42
|
|
43
43
|
}
|
44
44
|
|
45
|
-
void Inspect::operator()(
|
45
|
+
void Inspect::operator()(StyleRule* ruleset)
|
46
46
|
{
|
47
47
|
if (ruleset->selector()) {
|
48
48
|
ruleset->selector()->perform(this);
|
@@ -124,7 +124,7 @@ namespace Sass {
|
|
124
124
|
}
|
125
125
|
}
|
126
126
|
|
127
|
-
void Inspect::operator()(
|
127
|
+
void Inspect::operator()(SupportsRule* feature_block)
|
128
128
|
{
|
129
129
|
append_indentation();
|
130
130
|
append_token("@supports", feature_block);
|
@@ -133,7 +133,7 @@ namespace Sass {
|
|
133
133
|
feature_block->block()->perform(this);
|
134
134
|
}
|
135
135
|
|
136
|
-
void Inspect::operator()(
|
136
|
+
void Inspect::operator()(AtRootRule* at_root_block)
|
137
137
|
{
|
138
138
|
append_indentation();
|
139
139
|
append_token("@at-root ", at_root_block);
|
@@ -142,7 +142,7 @@ namespace Sass {
|
|
142
142
|
if(at_root_block->block()) at_root_block->block()->perform(this);
|
143
143
|
}
|
144
144
|
|
145
|
-
void Inspect::operator()(
|
145
|
+
void Inspect::operator()(AtRule* at_rule)
|
146
146
|
{
|
147
147
|
append_indentation();
|
148
148
|
append_token(at_rule->keyword(), at_rule);
|
@@ -180,7 +180,7 @@ namespace Sass {
|
|
180
180
|
append_colon_separator();
|
181
181
|
|
182
182
|
if (dec->value()->concrete_type() == Expression::SELECTOR) {
|
183
|
-
|
183
|
+
ExpressionObj ls = Listize::perform(dec->value());
|
184
184
|
ls->perform(this);
|
185
185
|
} else {
|
186
186
|
dec->value()->perform(this);
|
@@ -248,7 +248,7 @@ namespace Sass {
|
|
248
248
|
append_delimiter();
|
249
249
|
}
|
250
250
|
|
251
|
-
void Inspect::operator()(
|
251
|
+
void Inspect::operator()(WarningRule* warning)
|
252
252
|
{
|
253
253
|
append_indentation();
|
254
254
|
append_token("@warn", warning);
|
@@ -257,7 +257,7 @@ namespace Sass {
|
|
257
257
|
append_delimiter();
|
258
258
|
}
|
259
259
|
|
260
|
-
void Inspect::operator()(
|
260
|
+
void Inspect::operator()(ErrorRule* error)
|
261
261
|
{
|
262
262
|
append_indentation();
|
263
263
|
append_token("@error", error);
|
@@ -266,7 +266,7 @@ namespace Sass {
|
|
266
266
|
append_delimiter();
|
267
267
|
}
|
268
268
|
|
269
|
-
void Inspect::operator()(
|
269
|
+
void Inspect::operator()(DebugRule* debug)
|
270
270
|
{
|
271
271
|
append_indentation();
|
272
272
|
append_token("@debug", debug);
|
@@ -297,7 +297,7 @@ namespace Sass {
|
|
297
297
|
}
|
298
298
|
}
|
299
299
|
|
300
|
-
void Inspect::operator()(
|
300
|
+
void Inspect::operator()(ForRule* loop)
|
301
301
|
{
|
302
302
|
append_indentation();
|
303
303
|
append_token("@for", loop);
|
@@ -310,7 +310,7 @@ namespace Sass {
|
|
310
310
|
loop->block()->perform(this);
|
311
311
|
}
|
312
312
|
|
313
|
-
void Inspect::operator()(
|
313
|
+
void Inspect::operator()(EachRule* loop)
|
314
314
|
{
|
315
315
|
append_indentation();
|
316
316
|
append_token("@each", loop);
|
@@ -325,7 +325,7 @@ namespace Sass {
|
|
325
325
|
loop->block()->perform(this);
|
326
326
|
}
|
327
327
|
|
328
|
-
void Inspect::operator()(
|
328
|
+
void Inspect::operator()(WhileRule* loop)
|
329
329
|
{
|
330
330
|
append_indentation();
|
331
331
|
append_token("@while", loop);
|
@@ -412,11 +412,11 @@ namespace Sass {
|
|
412
412
|
append_string(")");
|
413
413
|
}
|
414
414
|
|
415
|
-
|
415
|
+
sass::string Inspect::lbracket(List* list) {
|
416
416
|
return list->is_bracketed() ? "[" : "(";
|
417
417
|
}
|
418
418
|
|
419
|
-
|
419
|
+
sass::string Inspect::rbracket(List* list) {
|
420
420
|
return list->is_bracketed() ? "]" : ")";
|
421
421
|
}
|
422
422
|
|
@@ -427,7 +427,7 @@ namespace Sass {
|
|
427
427
|
append_string(rbracket(list));
|
428
428
|
return;
|
429
429
|
}
|
430
|
-
|
430
|
+
sass::string sep(list->separator() == SASS_SPACE ? " " : ",");
|
431
431
|
if ((output_style() != COMPRESSED) && sep == ",") sep += " ";
|
432
432
|
else if (in_media_block && sep != " ") sep += " "; // verified
|
433
433
|
if (list->empty()) return;
|
@@ -461,7 +461,7 @@ namespace Sass {
|
|
461
461
|
for (size_t i = 0, L = list->size(); i < L; ++i) {
|
462
462
|
if (list->separator() == SASS_HASH)
|
463
463
|
{ sep[0] = i % 2 ? ':' : ','; }
|
464
|
-
|
464
|
+
ExpressionObj list_item = list->at(i);
|
465
465
|
if (output_style() != TO_SASS) {
|
466
466
|
if (list_item->is_invisible()) {
|
467
467
|
// this fixes an issue with "" in a list
|
@@ -570,11 +570,11 @@ namespace Sass {
|
|
570
570
|
// reduce units
|
571
571
|
n->reduce();
|
572
572
|
|
573
|
-
|
573
|
+
sass::ostream ss;
|
574
574
|
ss.precision(opt.precision);
|
575
575
|
ss << std::fixed << n->value();
|
576
576
|
|
577
|
-
|
577
|
+
sass::string res = ss.str();
|
578
578
|
size_t s = res.length();
|
579
579
|
|
580
580
|
// delete trailing zeros
|
@@ -627,14 +627,14 @@ namespace Sass {
|
|
627
627
|
void Inspect::operator()(Color_RGBA* c)
|
628
628
|
{
|
629
629
|
// output the final token
|
630
|
-
|
630
|
+
sass::ostream ss;
|
631
631
|
|
632
632
|
// original color name
|
633
633
|
// maybe an unknown token
|
634
|
-
|
634
|
+
sass::string name = c->disp();
|
635
635
|
|
636
636
|
// resolved color
|
637
|
-
|
637
|
+
sass::string res_name = name;
|
638
638
|
|
639
639
|
double r = Sass::round(cap_channel<0xff>(c->r()), opt.precision);
|
640
640
|
double g = Sass::round(cap_channel<0xff>(c->g()), opt.precision);
|
@@ -656,7 +656,7 @@ namespace Sass {
|
|
656
656
|
res_name = color_to_name(numval);
|
657
657
|
}
|
658
658
|
|
659
|
-
|
659
|
+
sass::ostream hexlet;
|
660
660
|
// dart sass compressed all colors in regular css always
|
661
661
|
// ruby sass and libsass does it only when not delayed
|
662
662
|
// since color math is going to be removed, this can go too
|
@@ -757,18 +757,18 @@ namespace Sass {
|
|
757
757
|
append_token(w->message(), w);
|
758
758
|
}
|
759
759
|
|
760
|
-
void Inspect::operator()(
|
760
|
+
void Inspect::operator()(SupportsOperation* so)
|
761
761
|
{
|
762
762
|
|
763
763
|
if (so->needs_parens(so->left())) append_string("(");
|
764
764
|
so->left()->perform(this);
|
765
765
|
if (so->needs_parens(so->left())) append_string(")");
|
766
766
|
|
767
|
-
if (so->operand() ==
|
767
|
+
if (so->operand() == SupportsOperation::AND) {
|
768
768
|
append_mandatory_space();
|
769
769
|
append_token("and", so);
|
770
770
|
append_mandatory_space();
|
771
|
-
} else if (so->operand() ==
|
771
|
+
} else if (so->operand() == SupportsOperation::OR) {
|
772
772
|
append_mandatory_space();
|
773
773
|
append_token("or", so);
|
774
774
|
append_mandatory_space();
|
@@ -779,7 +779,7 @@ namespace Sass {
|
|
779
779
|
if (so->needs_parens(so->right())) append_string(")");
|
780
780
|
}
|
781
781
|
|
782
|
-
void Inspect::operator()(
|
782
|
+
void Inspect::operator()(SupportsNegation* sn)
|
783
783
|
{
|
784
784
|
append_token("not", sn);
|
785
785
|
append_mandatory_space();
|
@@ -788,7 +788,7 @@ namespace Sass {
|
|
788
788
|
if (sn->needs_parens(sn->condition())) append_string(")");
|
789
789
|
}
|
790
790
|
|
791
|
-
void Inspect::operator()(
|
791
|
+
void Inspect::operator()(SupportsDeclaration* sd)
|
792
792
|
{
|
793
793
|
append_string("(");
|
794
794
|
sd->feature()->perform(this);
|
@@ -934,28 +934,28 @@ namespace Sass {
|
|
934
934
|
append_string("&");
|
935
935
|
}
|
936
936
|
|
937
|
-
void Inspect::operator()(
|
937
|
+
void Inspect::operator()(PlaceholderSelector* s)
|
938
938
|
{
|
939
939
|
append_token(s->name(), s);
|
940
940
|
|
941
941
|
}
|
942
942
|
|
943
|
-
void Inspect::operator()(
|
943
|
+
void Inspect::operator()(TypeSelector* s)
|
944
944
|
{
|
945
945
|
append_token(s->ns_name(), s);
|
946
946
|
}
|
947
947
|
|
948
|
-
void Inspect::operator()(
|
948
|
+
void Inspect::operator()(ClassSelector* s)
|
949
949
|
{
|
950
950
|
append_token(s->ns_name(), s);
|
951
951
|
}
|
952
952
|
|
953
|
-
void Inspect::operator()(
|
953
|
+
void Inspect::operator()(IDSelector* s)
|
954
954
|
{
|
955
955
|
append_token(s->ns_name(), s);
|
956
956
|
}
|
957
957
|
|
958
|
-
void Inspect::operator()(
|
958
|
+
void Inspect::operator()(AttributeSelector* s)
|
959
959
|
{
|
960
960
|
append_string("[");
|
961
961
|
add_open_mapping(s);
|
@@ -974,7 +974,7 @@ namespace Sass {
|
|
974
974
|
append_string("]");
|
975
975
|
}
|
976
976
|
|
977
|
-
void Inspect::operator()(
|
977
|
+
void Inspect::operator()(PseudoSelector* s)
|
978
978
|
{
|
979
979
|
|
980
980
|
if (s->name() != "") {
|
@@ -1033,6 +1033,7 @@ namespace Sass {
|
|
1033
1033
|
|
1034
1034
|
if (!in_wrapped && i == 0) append_indentation();
|
1035
1035
|
if ((*g)[i] == nullptr) continue;
|
1036
|
+
if (g->at(i)->length() == 0) continue;
|
1036
1037
|
schedule_mapping(g->at(i)->last());
|
1037
1038
|
// add_open_mapping((*g)[i]->last());
|
1038
1039
|
(*g)[i]->perform(this);
|
@@ -1066,8 +1067,7 @@ namespace Sass {
|
|
1066
1067
|
const SelectorComponent* prev = nullptr;
|
1067
1068
|
for (auto& item : sel->elements()) {
|
1068
1069
|
if (prev != nullptr) {
|
1069
|
-
if (
|
1070
|
-
typeid(*prev) == typeid(SelectorCombinator)) {
|
1070
|
+
if (item->getCombinator() || prev->getCombinator()) {
|
1071
1071
|
append_optional_space();
|
1072
1072
|
} else {
|
1073
1073
|
append_mandatory_space();
|
@@ -1091,6 +1091,7 @@ namespace Sass {
|
|
1091
1091
|
if (sel->hasRealParent()) {
|
1092
1092
|
append_string("&");
|
1093
1093
|
}
|
1094
|
+
sel->sortChildren();
|
1094
1095
|
for (auto& item : sel->elements()) {
|
1095
1096
|
item->perform(this);
|
1096
1097
|
}
|