sassc 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|