sassc 2.2.1 → 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 +2 -0
- data/CHANGELOG.md +18 -0
- data/Rakefile +1 -3
- data/ext/extconf.rb +13 -5
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/base.h +2 -1
- data/ext/libsass/include/sass/context.h +4 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +158 -168
- data/ext/libsass/src/ast.hpp +389 -230
- data/ext/libsass/src/ast_def_macros.hpp +18 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +4 -3
- data/ext/libsass/src/ast_fwd_decl.hpp +98 -165
- data/ext/libsass/src/ast_helpers.hpp +292 -0
- data/ext/libsass/src/ast_sel_cmp.cpp +219 -732
- data/ext/libsass/src/ast_sel_super.cpp +539 -0
- data/ext/libsass/src/ast_sel_unify.cpp +207 -212
- data/ext/libsass/src/ast_sel_weave.cpp +616 -0
- data/ext/libsass/src/ast_selectors.cpp +594 -1026
- data/ext/libsass/src/ast_selectors.hpp +339 -385
- data/ext/libsass/src/ast_supports.cpp +36 -52
- data/ext/libsass/src/ast_supports.hpp +29 -29
- data/ext/libsass/src/ast_values.cpp +271 -84
- data/ext/libsass/src/ast_values.hpp +116 -107
- 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 +18 -18
- 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/cencode.c +4 -6
- data/ext/libsass/src/check_nesting.cpp +40 -41
- data/ext/libsass/src/check_nesting.hpp +6 -2
- data/ext/libsass/src/color_maps.cpp +14 -13
- data/ext/libsass/src/color_maps.hpp +1 -9
- data/ext/libsass/src/constants.cpp +5 -0
- data/ext/libsass/src/constants.hpp +6 -0
- data/ext/libsass/src/context.cpp +92 -119
- data/ext/libsass/src/context.hpp +41 -53
- data/ext/libsass/src/cssize.cpp +66 -149
- data/ext/libsass/src/cssize.hpp +17 -23
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debugger.hpp +451 -295
- data/ext/libsass/src/emitter.cpp +15 -16
- data/ext/libsass/src/emitter.hpp +10 -12
- data/ext/libsass/src/environment.cpp +27 -27
- data/ext/libsass/src/environment.hpp +29 -24
- data/ext/libsass/src/error_handling.cpp +62 -41
- data/ext/libsass/src/error_handling.hpp +61 -51
- data/ext/libsass/src/eval.cpp +167 -281
- data/ext/libsass/src/eval.hpp +27 -29
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +275 -222
- data/ext/libsass/src/expand.hpp +36 -16
- data/ext/libsass/src/extender.cpp +1188 -0
- data/ext/libsass/src/extender.hpp +399 -0
- data/ext/libsass/src/extension.cpp +43 -0
- data/ext/libsass/src/extension.hpp +89 -0
- data/ext/libsass/src/file.cpp +81 -72
- data/ext/libsass/src/file.hpp +28 -37
- data/ext/libsass/src/fn_colors.cpp +20 -18
- data/ext/libsass/src/fn_lists.cpp +30 -29
- data/ext/libsass/src/fn_maps.cpp +3 -3
- data/ext/libsass/src/fn_miscs.cpp +34 -46
- data/ext/libsass/src/fn_numbers.cpp +20 -13
- data/ext/libsass/src/fn_selectors.cpp +98 -128
- data/ext/libsass/src/fn_strings.cpp +47 -33
- data/ext/libsass/src/fn_utils.cpp +31 -29
- data/ext/libsass/src/fn_utils.hpp +17 -11
- data/ext/libsass/src/inspect.cpp +186 -148
- data/ext/libsass/src/inspect.hpp +31 -29
- data/ext/libsass/src/lexer.cpp +20 -82
- data/ext/libsass/src/lexer.hpp +5 -16
- data/ext/libsass/src/listize.cpp +23 -37
- data/ext/libsass/src/listize.hpp +8 -9
- data/ext/libsass/src/mapping.hpp +1 -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} +55 -9
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/operation.hpp +71 -61
- data/ext/libsass/src/operators.cpp +19 -18
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +45 -64
- data/ext/libsass/src/output.hpp +6 -6
- data/ext/libsass/src/parser.cpp +512 -700
- data/ext/libsass/src/parser.hpp +89 -97
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +164 -0
- 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/prelexer.cpp +6 -6
- data/ext/libsass/src/remove_placeholders.cpp +55 -56
- data/ext/libsass/src/remove_placeholders.hpp +21 -18
- data/ext/libsass/src/sass.cpp +16 -15
- data/ext/libsass/src/sass.hpp +10 -5
- data/ext/libsass/src/sass2scss.cpp +4 -4
- data/ext/libsass/src/sass_context.cpp +91 -122
- data/ext/libsass/src/sass_context.hpp +2 -2
- data/ext/libsass/src/sass_functions.cpp +1 -1
- data/ext/libsass/src/sass_values.cpp +8 -11
- 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/stylesheet.cpp +22 -0
- data/ext/libsass/src/stylesheet.hpp +57 -0
- data/ext/libsass/src/to_value.cpp +2 -2
- data/ext/libsass/src/to_value.hpp +1 -1
- data/ext/libsass/src/units.cpp +24 -22
- 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 +48 -50
- data/ext/libsass/src/util.hpp +20 -21
- data/ext/libsass/src/util_string.cpp +111 -61
- data/ext/libsass/src/util_string.hpp +62 -8
- data/ext/libsass/src/values.cpp +12 -12
- data/lib/sassc/engine.rb +5 -3
- data/lib/sassc/functions_handler.rb +8 -8
- data/lib/sassc/native.rb +4 -6
- data/lib/sassc/script.rb +4 -4
- data/lib/sassc/version.rb +1 -1
- data/test/functions_test.rb +18 -1
- data/test/native_test.rb +4 -4
- metadata +29 -15
- data/ext/libsass/src/extend.cpp +0 -2132
- data/ext/libsass/src/extend.hpp +0 -86
- data/ext/libsass/src/node.cpp +0 -322
- data/ext/libsass/src/node.hpp +0 -118
- data/ext/libsass/src/paths.hpp +0 -71
- data/ext/libsass/src/sass_util.cpp +0 -152
- data/ext/libsass/src/sass_util.hpp +0 -256
- data/ext/libsass/src/subset_map.cpp +0 -58
- data/ext/libsass/src/subset_map.hpp +0 -76
- data/lib/sassc/native/lib_c.rb +0 -21
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);
|
@@ -67,18 +67,64 @@ namespace Sass {
|
|
67
67
|
append_scope_closer();
|
68
68
|
}
|
69
69
|
|
70
|
-
void Inspect::operator()(
|
70
|
+
void Inspect::operator()(MediaRule* rule)
|
71
71
|
{
|
72
72
|
append_indentation();
|
73
|
-
append_token("@media",
|
73
|
+
append_token("@media", rule);
|
74
|
+
append_mandatory_space();
|
75
|
+
if (rule->block()) {
|
76
|
+
rule->block()->perform(this);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
void Inspect::operator()(CssMediaRule* rule)
|
81
|
+
{
|
82
|
+
if (output_style() == NESTED)
|
83
|
+
indentation += rule->tabs();
|
84
|
+
append_indentation();
|
85
|
+
append_token("@media", rule);
|
74
86
|
append_mandatory_space();
|
75
87
|
in_media_block = true;
|
76
|
-
|
88
|
+
bool joinIt = false;
|
89
|
+
for (auto query : rule->elements()) {
|
90
|
+
if (joinIt) {
|
91
|
+
append_comma_separator();
|
92
|
+
append_optional_space();
|
93
|
+
}
|
94
|
+
operator()(query);
|
95
|
+
joinIt = true;
|
96
|
+
}
|
97
|
+
if (rule->block()) {
|
98
|
+
rule->block()->perform(this);
|
99
|
+
}
|
77
100
|
in_media_block = false;
|
78
|
-
|
101
|
+
if (output_style() == NESTED)
|
102
|
+
indentation -= rule->tabs();
|
79
103
|
}
|
80
104
|
|
81
|
-
void Inspect::operator()(
|
105
|
+
void Inspect::operator()(CssMediaQuery* query)
|
106
|
+
{
|
107
|
+
bool joinIt = false;
|
108
|
+
if (!query->modifier().empty()) {
|
109
|
+
append_string(query->modifier());
|
110
|
+
append_mandatory_space();
|
111
|
+
}
|
112
|
+
if (!query->type().empty()) {
|
113
|
+
append_string(query->type());
|
114
|
+
joinIt = true;
|
115
|
+
}
|
116
|
+
for (auto feature : query->features()) {
|
117
|
+
if (joinIt) {
|
118
|
+
append_mandatory_space();
|
119
|
+
append_string("and");
|
120
|
+
append_mandatory_space();
|
121
|
+
}
|
122
|
+
append_string(feature);
|
123
|
+
joinIt = true;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
void Inspect::operator()(SupportsRule* feature_block)
|
82
128
|
{
|
83
129
|
append_indentation();
|
84
130
|
append_token("@supports", feature_block);
|
@@ -87,7 +133,7 @@ namespace Sass {
|
|
87
133
|
feature_block->block()->perform(this);
|
88
134
|
}
|
89
135
|
|
90
|
-
void Inspect::operator()(
|
136
|
+
void Inspect::operator()(AtRootRule* at_root_block)
|
91
137
|
{
|
92
138
|
append_indentation();
|
93
139
|
append_token("@at-root ", at_root_block);
|
@@ -96,7 +142,7 @@ namespace Sass {
|
|
96
142
|
if(at_root_block->block()) at_root_block->block()->perform(this);
|
97
143
|
}
|
98
144
|
|
99
|
-
void Inspect::operator()(
|
145
|
+
void Inspect::operator()(AtRule* at_rule)
|
100
146
|
{
|
101
147
|
append_indentation();
|
102
148
|
append_token(at_rule->keyword(), at_rule);
|
@@ -134,8 +180,7 @@ namespace Sass {
|
|
134
180
|
append_colon_separator();
|
135
181
|
|
136
182
|
if (dec->value()->concrete_type() == Expression::SELECTOR) {
|
137
|
-
Listize
|
138
|
-
Expression_Obj ls = dec->value()->perform(&listize);
|
183
|
+
ExpressionObj ls = Listize::perform(dec->value());
|
139
184
|
ls->perform(this);
|
140
185
|
} else {
|
141
186
|
dec->value()->perform(this);
|
@@ -203,7 +248,7 @@ namespace Sass {
|
|
203
248
|
append_delimiter();
|
204
249
|
}
|
205
250
|
|
206
|
-
void Inspect::operator()(
|
251
|
+
void Inspect::operator()(WarningRule* warning)
|
207
252
|
{
|
208
253
|
append_indentation();
|
209
254
|
append_token("@warn", warning);
|
@@ -212,7 +257,7 @@ namespace Sass {
|
|
212
257
|
append_delimiter();
|
213
258
|
}
|
214
259
|
|
215
|
-
void Inspect::operator()(
|
260
|
+
void Inspect::operator()(ErrorRule* error)
|
216
261
|
{
|
217
262
|
append_indentation();
|
218
263
|
append_token("@error", error);
|
@@ -221,7 +266,7 @@ namespace Sass {
|
|
221
266
|
append_delimiter();
|
222
267
|
}
|
223
268
|
|
224
|
-
void Inspect::operator()(
|
269
|
+
void Inspect::operator()(DebugRule* debug)
|
225
270
|
{
|
226
271
|
append_indentation();
|
227
272
|
append_token("@debug", debug);
|
@@ -252,7 +297,7 @@ namespace Sass {
|
|
252
297
|
}
|
253
298
|
}
|
254
299
|
|
255
|
-
void Inspect::operator()(
|
300
|
+
void Inspect::operator()(ForRule* loop)
|
256
301
|
{
|
257
302
|
append_indentation();
|
258
303
|
append_token("@for", loop);
|
@@ -265,7 +310,7 @@ namespace Sass {
|
|
265
310
|
loop->block()->perform(this);
|
266
311
|
}
|
267
312
|
|
268
|
-
void Inspect::operator()(
|
313
|
+
void Inspect::operator()(EachRule* loop)
|
269
314
|
{
|
270
315
|
append_indentation();
|
271
316
|
append_token("@each", loop);
|
@@ -280,7 +325,7 @@ namespace Sass {
|
|
280
325
|
loop->block()->perform(this);
|
281
326
|
}
|
282
327
|
|
283
|
-
void Inspect::operator()(
|
328
|
+
void Inspect::operator()(WhileRule* loop)
|
284
329
|
{
|
285
330
|
append_indentation();
|
286
331
|
append_token("@while", loop);
|
@@ -298,7 +343,7 @@ namespace Sass {
|
|
298
343
|
append_delimiter();
|
299
344
|
}
|
300
345
|
|
301
|
-
void Inspect::operator()(
|
346
|
+
void Inspect::operator()(ExtendRule* extend)
|
302
347
|
{
|
303
348
|
append_indentation();
|
304
349
|
append_token("@extend", extend);
|
@@ -367,11 +412,11 @@ namespace Sass {
|
|
367
412
|
append_string(")");
|
368
413
|
}
|
369
414
|
|
370
|
-
|
415
|
+
sass::string Inspect::lbracket(List* list) {
|
371
416
|
return list->is_bracketed() ? "[" : "(";
|
372
417
|
}
|
373
418
|
|
374
|
-
|
419
|
+
sass::string Inspect::rbracket(List* list) {
|
375
420
|
return list->is_bracketed() ? "]" : ")";
|
376
421
|
}
|
377
422
|
|
@@ -382,7 +427,7 @@ namespace Sass {
|
|
382
427
|
append_string(rbracket(list));
|
383
428
|
return;
|
384
429
|
}
|
385
|
-
|
430
|
+
sass::string sep(list->separator() == SASS_SPACE ? " " : ",");
|
386
431
|
if ((output_style() != COMPRESSED) && sep == ",") sep += " ";
|
387
432
|
else if (in_media_block && sep != " ") sep += " "; // verified
|
388
433
|
if (list->empty()) return;
|
@@ -399,7 +444,7 @@ namespace Sass {
|
|
399
444
|
list->length() == 1 &&
|
400
445
|
!list->from_selector() &&
|
401
446
|
!Cast<List>(list->at(0)) &&
|
402
|
-
!Cast<
|
447
|
+
!Cast<SelectorList>(list->at(0))
|
403
448
|
) {
|
404
449
|
append_string(lbracket(list));
|
405
450
|
}
|
@@ -416,7 +461,7 @@ namespace Sass {
|
|
416
461
|
for (size_t i = 0, L = list->size(); i < L; ++i) {
|
417
462
|
if (list->separator() == SASS_HASH)
|
418
463
|
{ sep[0] = i % 2 ? ':' : ','; }
|
419
|
-
|
464
|
+
ExpressionObj list_item = list->at(i);
|
420
465
|
if (output_style() != TO_SASS) {
|
421
466
|
if (list_item->is_invisible()) {
|
422
467
|
// this fixes an issue with "" in a list
|
@@ -449,7 +494,7 @@ namespace Sass {
|
|
449
494
|
list->length() == 1 &&
|
450
495
|
!list->from_selector() &&
|
451
496
|
!Cast<List>(list->at(0)) &&
|
452
|
-
!Cast<
|
497
|
+
!Cast<SelectorList>(list->at(0))
|
453
498
|
) {
|
454
499
|
append_string(",");
|
455
500
|
append_string(rbracket(list));
|
@@ -525,12 +570,12 @@ namespace Sass {
|
|
525
570
|
// reduce units
|
526
571
|
n->reduce();
|
527
572
|
|
528
|
-
|
573
|
+
sass::ostream ss;
|
529
574
|
ss.precision(opt.precision);
|
530
575
|
ss << std::fixed << n->value();
|
531
576
|
|
532
|
-
|
533
|
-
|
577
|
+
sass::string res = ss.str();
|
578
|
+
size_t s = res.length();
|
534
579
|
|
535
580
|
// delete trailing zeros
|
536
581
|
for(s = s - 1; s > 0; --s)
|
@@ -562,6 +607,11 @@ namespace Sass {
|
|
562
607
|
// add unit now
|
563
608
|
res += n->unit();
|
564
609
|
|
610
|
+
if (opt.output_style == TO_CSS && !n->is_valid_css_unit()) {
|
611
|
+
// traces.push_back(Backtrace(nr->pstate()));
|
612
|
+
throw Exception::InvalidValue({}, *n);
|
613
|
+
}
|
614
|
+
|
565
615
|
// output the final token
|
566
616
|
append_token(res, n);
|
567
617
|
}
|
@@ -577,14 +627,14 @@ namespace Sass {
|
|
577
627
|
void Inspect::operator()(Color_RGBA* c)
|
578
628
|
{
|
579
629
|
// output the final token
|
580
|
-
|
630
|
+
sass::ostream ss;
|
581
631
|
|
582
632
|
// original color name
|
583
633
|
// maybe an unknown token
|
584
|
-
|
634
|
+
sass::string name = c->disp();
|
585
635
|
|
586
636
|
// resolved color
|
587
|
-
|
637
|
+
sass::string res_name = name;
|
588
638
|
|
589
639
|
double r = Sass::round(cap_channel<0xff>(c->r()), opt.precision);
|
590
640
|
double g = Sass::round(cap_channel<0xff>(c->g()), opt.precision);
|
@@ -606,7 +656,7 @@ namespace Sass {
|
|
606
656
|
res_name = color_to_name(numval);
|
607
657
|
}
|
608
658
|
|
609
|
-
|
659
|
+
sass::ostream hexlet;
|
610
660
|
// dart sass compressed all colors in regular css always
|
611
661
|
// ruby sass and libsass does it only when not delayed
|
612
662
|
// since color math is going to be removed, this can go too
|
@@ -707,18 +757,18 @@ namespace Sass {
|
|
707
757
|
append_token(w->message(), w);
|
708
758
|
}
|
709
759
|
|
710
|
-
void Inspect::operator()(
|
760
|
+
void Inspect::operator()(SupportsOperation* so)
|
711
761
|
{
|
712
762
|
|
713
763
|
if (so->needs_parens(so->left())) append_string("(");
|
714
764
|
so->left()->perform(this);
|
715
765
|
if (so->needs_parens(so->left())) append_string(")");
|
716
766
|
|
717
|
-
if (so->operand() ==
|
767
|
+
if (so->operand() == SupportsOperation::AND) {
|
718
768
|
append_mandatory_space();
|
719
769
|
append_token("and", so);
|
720
770
|
append_mandatory_space();
|
721
|
-
} else if (so->operand() ==
|
771
|
+
} else if (so->operand() == SupportsOperation::OR) {
|
722
772
|
append_mandatory_space();
|
723
773
|
append_token("or", so);
|
724
774
|
append_mandatory_space();
|
@@ -729,7 +779,7 @@ namespace Sass {
|
|
729
779
|
if (so->needs_parens(so->right())) append_string(")");
|
730
780
|
}
|
731
781
|
|
732
|
-
void Inspect::operator()(
|
782
|
+
void Inspect::operator()(SupportsNegation* sn)
|
733
783
|
{
|
734
784
|
append_token("not", sn);
|
735
785
|
append_mandatory_space();
|
@@ -738,7 +788,7 @@ namespace Sass {
|
|
738
788
|
if (sn->needs_parens(sn->condition())) append_string(")");
|
739
789
|
}
|
740
790
|
|
741
|
-
void Inspect::operator()(
|
791
|
+
void Inspect::operator()(SupportsDeclaration* sd)
|
742
792
|
{
|
743
793
|
append_string("(");
|
744
794
|
sd->feature()->perform(this);
|
@@ -879,39 +929,33 @@ namespace Sass {
|
|
879
929
|
s->contents()->perform(this);
|
880
930
|
}
|
881
931
|
|
882
|
-
void Inspect::operator()(
|
932
|
+
void Inspect::operator()(Parent_Reference* p)
|
883
933
|
{
|
884
|
-
|
934
|
+
append_string("&");
|
885
935
|
}
|
886
936
|
|
887
|
-
void Inspect::operator()(
|
937
|
+
void Inspect::operator()(PlaceholderSelector* s)
|
888
938
|
{
|
889
939
|
append_token(s->name(), s);
|
890
|
-
if (s->has_line_break()) append_optional_linefeed();
|
891
|
-
if (s->has_line_break()) append_indentation();
|
892
940
|
|
893
941
|
}
|
894
942
|
|
895
|
-
void Inspect::operator()(
|
943
|
+
void Inspect::operator()(TypeSelector* s)
|
896
944
|
{
|
897
945
|
append_token(s->ns_name(), s);
|
898
946
|
}
|
899
947
|
|
900
|
-
void Inspect::operator()(
|
948
|
+
void Inspect::operator()(ClassSelector* s)
|
901
949
|
{
|
902
950
|
append_token(s->ns_name(), s);
|
903
|
-
if (s->has_line_break()) append_optional_linefeed();
|
904
|
-
if (s->has_line_break()) append_indentation();
|
905
951
|
}
|
906
952
|
|
907
|
-
void Inspect::operator()(
|
953
|
+
void Inspect::operator()(IDSelector* s)
|
908
954
|
{
|
909
955
|
append_token(s->ns_name(), s);
|
910
|
-
if (s->has_line_break()) append_optional_linefeed();
|
911
|
-
if (s->has_line_break()) append_indentation();
|
912
956
|
}
|
913
957
|
|
914
|
-
void Inspect::operator()(
|
958
|
+
void Inspect::operator()(AttributeSelector* s)
|
915
959
|
{
|
916
960
|
append_string("[");
|
917
961
|
add_open_mapping(s);
|
@@ -930,111 +974,38 @@ namespace Sass {
|
|
930
974
|
append_string("]");
|
931
975
|
}
|
932
976
|
|
933
|
-
void Inspect::operator()(
|
977
|
+
void Inspect::operator()(PseudoSelector* s)
|
934
978
|
{
|
935
|
-
append_token(s->ns_name(), s);
|
936
|
-
if (s->expression()) {
|
937
|
-
append_string("(");
|
938
|
-
s->expression()->perform(this);
|
939
|
-
append_string(")");
|
940
|
-
}
|
941
|
-
}
|
942
|
-
|
943
|
-
void Inspect::operator()(Wrapped_Selector* s)
|
944
|
-
{
|
945
|
-
if (s->name() == " ") {
|
946
|
-
append_string("");
|
947
|
-
} else {
|
948
|
-
bool was = in_wrapped;
|
949
|
-
in_wrapped = true;
|
950
|
-
append_token(s->name(), s);
|
951
|
-
append_string("(");
|
952
|
-
bool was_comma_array = in_comma_array;
|
953
|
-
in_comma_array = false;
|
954
|
-
s->selector()->perform(this);
|
955
|
-
in_comma_array = was_comma_array;
|
956
|
-
append_string(")");
|
957
|
-
in_wrapped = was;
|
958
|
-
}
|
959
|
-
}
|
960
|
-
|
961
|
-
void Inspect::operator()(Compound_Selector* s)
|
962
|
-
{
|
963
|
-
for (size_t i = 0, L = s->length(); i < L; ++i) {
|
964
|
-
(*s)[i]->perform(this);
|
965
|
-
}
|
966
|
-
if (s->has_line_break()) {
|
967
|
-
if (output_style() != COMPACT) {
|
968
|
-
append_optional_linefeed();
|
969
|
-
}
|
970
|
-
}
|
971
|
-
}
|
972
|
-
|
973
|
-
void Inspect::operator()(Complex_Selector* c)
|
974
|
-
{
|
975
|
-
Compound_Selector_Obj head = c->head();
|
976
|
-
Complex_Selector_Obj tail = c->tail();
|
977
|
-
Complex_Selector::Combinator comb = c->combinator();
|
978
|
-
|
979
|
-
if (comb == Complex_Selector::ANCESTOR_OF && (!head || head->empty())) {
|
980
|
-
if (tail) tail->perform(this);
|
981
|
-
return;
|
982
|
-
}
|
983
979
|
|
984
|
-
if (
|
985
|
-
|
986
|
-
|
987
|
-
|
980
|
+
if (s->name() != "") {
|
981
|
+
append_string(":");
|
982
|
+
if (s->isSyntacticElement()) {
|
983
|
+
append_string(":");
|
988
984
|
}
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
append_optional_space();
|
1009
|
-
break;
|
1010
|
-
case Complex_Selector::REFERENCE:
|
1011
|
-
append_mandatory_space();
|
1012
|
-
append_string("/");
|
1013
|
-
if (c->reference()) c->reference()->perform(this);
|
1014
|
-
append_string("/");
|
1015
|
-
append_mandatory_space();
|
1016
|
-
break;
|
1017
|
-
case Complex_Selector::PRECEDES:
|
1018
|
-
if (is_empty) append_optional_space();
|
1019
|
-
else append_mandatory_space();
|
1020
|
-
append_string("~");
|
1021
|
-
if (tail) append_mandatory_space();
|
1022
|
-
else append_optional_space();
|
1023
|
-
break;
|
1024
|
-
default: break;
|
1025
|
-
}
|
1026
|
-
if (tail && comb != Complex_Selector::ANCESTOR_OF) {
|
1027
|
-
if (c->has_line_break()) append_optional_linefeed();
|
1028
|
-
}
|
1029
|
-
if (tail) tail->perform(this);
|
1030
|
-
if (!tail && c->has_line_break()) {
|
1031
|
-
if (output_style() == COMPACT) {
|
1032
|
-
append_mandatory_space();
|
985
|
+
append_token(s->ns_name(), s);
|
986
|
+
if (s->selector() || s->argument()) {
|
987
|
+
bool was = in_wrapped;
|
988
|
+
in_wrapped = true;
|
989
|
+
append_string("(");
|
990
|
+
if (s->argument()) {
|
991
|
+
s->argument()->perform(this);
|
992
|
+
}
|
993
|
+
if (s->selector() && s->argument()) {
|
994
|
+
append_mandatory_space();
|
995
|
+
}
|
996
|
+
bool was_comma_array = in_comma_array;
|
997
|
+
in_comma_array = false;
|
998
|
+
if (s->selector()) {
|
999
|
+
s->selector()->perform(this);
|
1000
|
+
}
|
1001
|
+
in_comma_array = was_comma_array;
|
1002
|
+
append_string(")");
|
1003
|
+
in_wrapped = was;
|
1033
1004
|
}
|
1034
1005
|
}
|
1035
1006
|
}
|
1036
1007
|
|
1037
|
-
void Inspect::operator()(
|
1008
|
+
void Inspect::operator()(SelectorList* g)
|
1038
1009
|
{
|
1039
1010
|
|
1040
1011
|
if (g->empty()) {
|
@@ -1049,7 +1020,7 @@ namespace Sass {
|
|
1049
1020
|
// probably ruby sass eqivalent of element_needs_parens
|
1050
1021
|
if (output_style() == TO_SASS && g->length() == 1 &&
|
1051
1022
|
(!Cast<List>((*g)[0]) &&
|
1052
|
-
|
1023
|
+
!Cast<SelectorList>((*g)[0]))) {
|
1053
1024
|
append_string("(");
|
1054
1025
|
}
|
1055
1026
|
else if (!in_declaration && in_comma_array) {
|
@@ -1059,8 +1030,10 @@ namespace Sass {
|
|
1059
1030
|
if (in_declaration) in_comma_array = true;
|
1060
1031
|
|
1061
1032
|
for (size_t i = 0, L = g->length(); i < L; ++i) {
|
1033
|
+
|
1062
1034
|
if (!in_wrapped && i == 0) append_indentation();
|
1063
1035
|
if ((*g)[i] == nullptr) continue;
|
1036
|
+
if (g->at(i)->length() == 0) continue;
|
1064
1037
|
schedule_mapping(g->at(i)->last());
|
1065
1038
|
// add_open_mapping((*g)[i]->last());
|
1066
1039
|
(*g)[i]->perform(this);
|
@@ -1075,7 +1048,7 @@ namespace Sass {
|
|
1075
1048
|
// probably ruby sass eqivalent of element_needs_parens
|
1076
1049
|
if (output_style() == TO_SASS && g->length() == 1 &&
|
1077
1050
|
(!Cast<List>((*g)[0]) &&
|
1078
|
-
|
1051
|
+
!Cast<SelectorList>((*g)[0]))) {
|
1079
1052
|
append_string(",)");
|
1080
1053
|
}
|
1081
1054
|
else if (!in_declaration && in_comma_array) {
|
@@ -1083,5 +1056,70 @@ namespace Sass {
|
|
1083
1056
|
}
|
1084
1057
|
|
1085
1058
|
}
|
1059
|
+
void Inspect::operator()(ComplexSelector* sel)
|
1060
|
+
{
|
1061
|
+
if (sel->hasPreLineFeed()) {
|
1062
|
+
append_optional_linefeed();
|
1063
|
+
if (!in_wrapped && output_style() == NESTED) {
|
1064
|
+
append_indentation();
|
1065
|
+
}
|
1066
|
+
}
|
1067
|
+
const SelectorComponent* prev = nullptr;
|
1068
|
+
for (auto& item : sel->elements()) {
|
1069
|
+
if (prev != nullptr) {
|
1070
|
+
if (item->getCombinator() || prev->getCombinator()) {
|
1071
|
+
append_optional_space();
|
1072
|
+
} else {
|
1073
|
+
append_mandatory_space();
|
1074
|
+
}
|
1075
|
+
}
|
1076
|
+
item->perform(this);
|
1077
|
+
prev = item.ptr();
|
1078
|
+
}
|
1079
|
+
}
|
1080
|
+
|
1081
|
+
void Inspect::operator()(SelectorComponent* sel)
|
1082
|
+
{
|
1083
|
+
// You should probably never call this method directly
|
1084
|
+
// But in case anyone does, we will do the upcasting
|
1085
|
+
if (auto comp = Cast<CompoundSelector>(sel)) operator()(comp);
|
1086
|
+
if (auto comb = Cast<SelectorCombinator>(sel)) operator()(comb);
|
1087
|
+
}
|
1088
|
+
|
1089
|
+
void Inspect::operator()(CompoundSelector* sel)
|
1090
|
+
{
|
1091
|
+
if (sel->hasRealParent()) {
|
1092
|
+
append_string("&");
|
1093
|
+
}
|
1094
|
+
sel->sortChildren();
|
1095
|
+
for (auto& item : sel->elements()) {
|
1096
|
+
item->perform(this);
|
1097
|
+
}
|
1098
|
+
// Add the post line break (from ruby sass)
|
1099
|
+
// Dart sass uses another logic for newlines
|
1100
|
+
if (sel->hasPostLineBreak()) {
|
1101
|
+
if (output_style() != COMPACT) {
|
1102
|
+
append_optional_linefeed();
|
1103
|
+
}
|
1104
|
+
}
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
void Inspect::operator()(SelectorCombinator* sel)
|
1108
|
+
{
|
1109
|
+
append_optional_space();
|
1110
|
+
switch (sel->combinator()) {
|
1111
|
+
case SelectorCombinator::Combinator::CHILD: append_string(">"); break;
|
1112
|
+
case SelectorCombinator::Combinator::GENERAL: append_string("~"); break;
|
1113
|
+
case SelectorCombinator::Combinator::ADJACENT: append_string("+"); break;
|
1114
|
+
}
|
1115
|
+
append_optional_space();
|
1116
|
+
// Add the post line break (from ruby sass)
|
1117
|
+
// Dart sass uses another logic for newlines
|
1118
|
+
if (sel->hasPostLineBreak()) {
|
1119
|
+
if (output_style() != COMPACT) {
|
1120
|
+
// append_optional_linefeed();
|
1121
|
+
}
|
1122
|
+
}
|
1123
|
+
}
|
1086
1124
|
|
1087
1125
|
}
|
data/ext/libsass/src/inspect.hpp
CHANGED
@@ -20,27 +20,26 @@ namespace Sass {
|
|
20
20
|
|
21
21
|
// statements
|
22
22
|
virtual void operator()(Block*);
|
23
|
-
virtual void operator()(
|
23
|
+
virtual void operator()(StyleRule*);
|
24
24
|
virtual void operator()(Bubble*);
|
25
|
-
virtual void operator()(
|
26
|
-
virtual void operator()(
|
27
|
-
virtual void operator()(
|
28
|
-
virtual void operator()(Directive*);
|
25
|
+
virtual void operator()(SupportsRule*);
|
26
|
+
virtual void operator()(AtRootRule*);
|
27
|
+
virtual void operator()(AtRule*);
|
29
28
|
virtual void operator()(Keyframe_Rule*);
|
30
29
|
virtual void operator()(Declaration*);
|
31
30
|
virtual void operator()(Assignment*);
|
32
31
|
virtual void operator()(Import*);
|
33
32
|
virtual void operator()(Import_Stub*);
|
34
|
-
virtual void operator()(
|
35
|
-
virtual void operator()(
|
36
|
-
virtual void operator()(
|
33
|
+
virtual void operator()(WarningRule*);
|
34
|
+
virtual void operator()(ErrorRule*);
|
35
|
+
virtual void operator()(DebugRule*);
|
37
36
|
virtual void operator()(Comment*);
|
38
37
|
virtual void operator()(If*);
|
39
|
-
virtual void operator()(
|
40
|
-
virtual void operator()(
|
41
|
-
virtual void operator()(
|
38
|
+
virtual void operator()(ForRule*);
|
39
|
+
virtual void operator()(EachRule*);
|
40
|
+
virtual void operator()(WhileRule*);
|
42
41
|
virtual void operator()(Return*);
|
43
|
-
virtual void operator()(
|
42
|
+
virtual void operator()(ExtendRule*);
|
44
43
|
virtual void operator()(Definition*);
|
45
44
|
virtual void operator()(Mixin_Call*);
|
46
45
|
virtual void operator()(Content*);
|
@@ -63,15 +62,18 @@ namespace Sass {
|
|
63
62
|
virtual void operator()(String_Quoted*);
|
64
63
|
virtual void operator()(Custom_Error*);
|
65
64
|
virtual void operator()(Custom_Warning*);
|
66
|
-
virtual void operator()(
|
67
|
-
virtual void operator()(
|
68
|
-
virtual void operator()(
|
65
|
+
virtual void operator()(SupportsOperation*);
|
66
|
+
virtual void operator()(SupportsNegation*);
|
67
|
+
virtual void operator()(SupportsDeclaration*);
|
69
68
|
virtual void operator()(Supports_Interpolation*);
|
69
|
+
virtual void operator()(MediaRule*);
|
70
|
+
virtual void operator()(CssMediaRule*);
|
71
|
+
virtual void operator()(CssMediaQuery*);
|
70
72
|
virtual void operator()(Media_Query*);
|
71
73
|
virtual void operator()(Media_Query_Expression*);
|
72
74
|
virtual void operator()(At_Root_Query*);
|
73
75
|
virtual void operator()(Null*);
|
74
|
-
virtual void operator()(
|
76
|
+
virtual void operator()(Parent_Reference* p);
|
75
77
|
// parameters and arguments
|
76
78
|
virtual void operator()(Parameter*);
|
77
79
|
virtual void operator()(Parameters*);
|
@@ -79,19 +81,19 @@ namespace Sass {
|
|
79
81
|
virtual void operator()(Arguments*);
|
80
82
|
// selectors
|
81
83
|
virtual void operator()(Selector_Schema*);
|
82
|
-
virtual void operator()(
|
83
|
-
virtual void operator()(
|
84
|
-
virtual void operator()(
|
85
|
-
virtual void operator()(
|
86
|
-
virtual void operator()(
|
87
|
-
virtual void operator()(
|
88
|
-
virtual void operator()(
|
89
|
-
virtual void operator()(
|
90
|
-
virtual void operator()(
|
91
|
-
virtual void operator()(
|
92
|
-
|
93
|
-
virtual
|
94
|
-
virtual
|
84
|
+
virtual void operator()(PlaceholderSelector*);
|
85
|
+
virtual void operator()(TypeSelector*);
|
86
|
+
virtual void operator()(ClassSelector*);
|
87
|
+
virtual void operator()(IDSelector*);
|
88
|
+
virtual void operator()(AttributeSelector*);
|
89
|
+
virtual void operator()(PseudoSelector*);
|
90
|
+
virtual void operator()(SelectorComponent*);
|
91
|
+
virtual void operator()(SelectorCombinator*);
|
92
|
+
virtual void operator()(CompoundSelector*);
|
93
|
+
virtual void operator()(ComplexSelector*);
|
94
|
+
virtual void operator()(SelectorList*);
|
95
|
+
virtual sass::string lbracket(List*);
|
96
|
+
virtual sass::string rbracket(List*);
|
95
97
|
|
96
98
|
};
|
97
99
|
|