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/cssize.cpp
CHANGED
@@ -12,10 +12,9 @@
|
|
12
12
|
namespace Sass {
|
13
13
|
|
14
14
|
Cssize::Cssize(Context& ctx)
|
15
|
-
:
|
16
|
-
traces(ctx.traces),
|
15
|
+
: traces(ctx.traces),
|
17
16
|
block_stack(BlockStack()),
|
18
|
-
p_stack(
|
17
|
+
p_stack(sass::vector<Statement*>())
|
19
18
|
{ }
|
20
19
|
|
21
20
|
Statement* Cssize::parent()
|
@@ -81,17 +80,17 @@ namespace Sass {
|
|
81
80
|
return 0;
|
82
81
|
}
|
83
82
|
|
84
|
-
Statement* Cssize::operator()(
|
83
|
+
Statement* Cssize::operator()(AtRule* r)
|
85
84
|
{
|
86
85
|
if (!r->block() || !r->block()->length()) return r;
|
87
86
|
|
88
87
|
if (parent()->statement_type() == Statement::RULESET)
|
89
88
|
{
|
90
|
-
return
|
89
|
+
return r->is_keyframes() ? SASS_MEMORY_NEW(Bubble, r->pstate(), r) : bubble(r);
|
91
90
|
}
|
92
91
|
|
93
92
|
p_stack.push_back(r);
|
94
|
-
|
93
|
+
AtRuleObj rr = SASS_MEMORY_NEW(AtRule,
|
95
94
|
r->pstate(),
|
96
95
|
r->keyword(),
|
97
96
|
r->selector(),
|
@@ -108,7 +107,7 @@ namespace Sass {
|
|
108
107
|
Bubble_Obj s_obj = Cast<Bubble>(s);
|
109
108
|
s = s_obj->node();
|
110
109
|
if (s->statement_type() != Statement::DIRECTIVE) directive_exists = false;
|
111
|
-
else directive_exists = (Cast<
|
110
|
+
else directive_exists = (Cast<AtRule>(s)->keyword() == rr->keyword());
|
112
111
|
}
|
113
112
|
|
114
113
|
}
|
@@ -116,7 +115,7 @@ namespace Sass {
|
|
116
115
|
Block* result = SASS_MEMORY_NEW(Block, rr->pstate());
|
117
116
|
if (!(directive_exists || rr->is_keyframes()))
|
118
117
|
{
|
119
|
-
|
118
|
+
AtRule* empty_node = Cast<AtRule>(rr);
|
120
119
|
empty_node->block(SASS_MEMORY_NEW(Block, rr->block() ? rr->block()->pstate() : rr->pstate()));
|
121
120
|
result->append(empty_node);
|
122
121
|
}
|
@@ -143,20 +142,20 @@ namespace Sass {
|
|
143
142
|
return debubble(rr->block(), rr);
|
144
143
|
}
|
145
144
|
|
146
|
-
Statement* Cssize::operator()(
|
145
|
+
Statement* Cssize::operator()(StyleRule* r)
|
147
146
|
{
|
148
147
|
p_stack.push_back(r);
|
149
148
|
// this can return a string schema
|
150
149
|
// string schema is not a statement!
|
151
150
|
// r->block() is already a string schema
|
152
|
-
// and that is
|
151
|
+
// and that is coming from propset expand
|
153
152
|
Block* bb = operator()(r->block());
|
154
153
|
// this should protect us (at least a bit) from our mess
|
155
154
|
// fixing this properly is harder that it should be ...
|
156
155
|
if (Cast<Statement>(bb) == NULL) {
|
157
156
|
error("Illegal nesting: Only properties may be nested beneath properties.", r->block()->pstate(), traces);
|
158
157
|
}
|
159
|
-
|
158
|
+
StyleRuleObj rr = SASS_MEMORY_NEW(StyleRule,
|
160
159
|
r->pstate(),
|
161
160
|
r->selector(),
|
162
161
|
bb);
|
@@ -215,20 +214,23 @@ namespace Sass {
|
|
215
214
|
return 0;
|
216
215
|
}
|
217
216
|
|
218
|
-
Statement* Cssize::operator()(
|
217
|
+
Statement* Cssize::operator()(CssMediaRule* m)
|
219
218
|
{
|
220
219
|
if (parent()->statement_type() == Statement::RULESET)
|
221
|
-
{
|
220
|
+
{
|
221
|
+
return bubble(m);
|
222
|
+
}
|
222
223
|
|
223
224
|
if (parent()->statement_type() == Statement::MEDIA)
|
224
|
-
{
|
225
|
+
{
|
226
|
+
return SASS_MEMORY_NEW(Bubble, m->pstate(), m);
|
227
|
+
}
|
225
228
|
|
226
229
|
p_stack.push_back(m);
|
227
230
|
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
operator()(m->block()));
|
231
|
+
CssMediaRuleObj mm = SASS_MEMORY_NEW(CssMediaRule, m->pstate(), m->block());
|
232
|
+
mm->concat(m->elements());
|
233
|
+
mm->block(operator()(m->block()));
|
232
234
|
mm->tabs(m->tabs());
|
233
235
|
|
234
236
|
p_stack.pop_back();
|
@@ -236,7 +238,7 @@ namespace Sass {
|
|
236
238
|
return debubble(mm->block(), mm);
|
237
239
|
}
|
238
240
|
|
239
|
-
Statement* Cssize::operator()(
|
241
|
+
Statement* Cssize::operator()(SupportsRule* m)
|
240
242
|
{
|
241
243
|
if (!m->block()->length())
|
242
244
|
{ return m; }
|
@@ -246,7 +248,7 @@ namespace Sass {
|
|
246
248
|
|
247
249
|
p_stack.push_back(m);
|
248
250
|
|
249
|
-
|
251
|
+
SupportsRuleObj mm = SASS_MEMORY_NEW(SupportsRule,
|
250
252
|
m->pstate(),
|
251
253
|
m->condition(),
|
252
254
|
operator()(m->block()));
|
@@ -257,7 +259,7 @@ namespace Sass {
|
|
257
259
|
return debubble(mm->block(), mm);
|
258
260
|
}
|
259
261
|
|
260
|
-
Statement* Cssize::operator()(
|
262
|
+
Statement* Cssize::operator()(AtRootRule* m)
|
261
263
|
{
|
262
264
|
bool tmp = false;
|
263
265
|
for (size_t i = 0, L = p_stack.size(); i < L; ++i) {
|
@@ -285,17 +287,17 @@ namespace Sass {
|
|
285
287
|
return bubble(m);
|
286
288
|
}
|
287
289
|
|
288
|
-
Statement* Cssize::bubble(
|
290
|
+
Statement* Cssize::bubble(AtRule* m)
|
289
291
|
{
|
290
292
|
Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
|
291
|
-
|
293
|
+
ParentStatementObj new_rule = Cast<ParentStatement>(SASS_MEMORY_COPY(this->parent()));
|
292
294
|
new_rule->block(bb);
|
293
295
|
new_rule->tabs(this->parent()->tabs());
|
294
296
|
new_rule->block()->concat(m->block());
|
295
297
|
|
296
298
|
Block_Obj wrapper_block = SASS_MEMORY_NEW(Block, m->block() ? m->block()->pstate() : m->pstate());
|
297
299
|
wrapper_block->append(new_rule);
|
298
|
-
|
300
|
+
AtRuleObj mm = SASS_MEMORY_NEW(AtRule,
|
299
301
|
m->pstate(),
|
300
302
|
m->keyword(),
|
301
303
|
m->selector(),
|
@@ -306,11 +308,11 @@ namespace Sass {
|
|
306
308
|
return bubble;
|
307
309
|
}
|
308
310
|
|
309
|
-
Statement* Cssize::bubble(
|
311
|
+
Statement* Cssize::bubble(AtRootRule* m)
|
310
312
|
{
|
311
313
|
if (!m || !m->block()) return NULL;
|
312
314
|
Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
|
313
|
-
|
315
|
+
ParentStatementObj new_rule = Cast<ParentStatement>(SASS_MEMORY_COPY(this->parent()));
|
314
316
|
Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
|
315
317
|
if (new_rule) {
|
316
318
|
new_rule->block(bb);
|
@@ -319,7 +321,7 @@ namespace Sass {
|
|
319
321
|
wrapper_block->append(new_rule);
|
320
322
|
}
|
321
323
|
|
322
|
-
|
324
|
+
AtRootRule* mm = SASS_MEMORY_NEW(AtRootRule,
|
323
325
|
m->pstate(),
|
324
326
|
wrapper_block,
|
325
327
|
m->expression());
|
@@ -327,12 +329,12 @@ namespace Sass {
|
|
327
329
|
return bubble;
|
328
330
|
}
|
329
331
|
|
330
|
-
Statement* Cssize::bubble(
|
332
|
+
Statement* Cssize::bubble(SupportsRule* m)
|
331
333
|
{
|
332
|
-
|
334
|
+
StyleRuleObj parent = Cast<StyleRule>(SASS_MEMORY_COPY(this->parent()));
|
333
335
|
|
334
336
|
Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
|
335
|
-
|
337
|
+
StyleRule* new_rule = SASS_MEMORY_NEW(StyleRule,
|
336
338
|
parent->pstate(),
|
337
339
|
parent->selector(),
|
338
340
|
bb);
|
@@ -341,7 +343,7 @@ namespace Sass {
|
|
341
343
|
|
342
344
|
Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
|
343
345
|
wrapper_block->append(new_rule);
|
344
|
-
|
346
|
+
SupportsRule* mm = SASS_MEMORY_NEW(SupportsRule,
|
345
347
|
m->pstate(),
|
346
348
|
m->condition(),
|
347
349
|
wrapper_block);
|
@@ -352,24 +354,24 @@ namespace Sass {
|
|
352
354
|
return bubble;
|
353
355
|
}
|
354
356
|
|
355
|
-
Statement* Cssize::bubble(
|
357
|
+
Statement* Cssize::bubble(CssMediaRule* m)
|
356
358
|
{
|
357
|
-
|
359
|
+
StyleRuleObj parent = Cast<StyleRule>(SASS_MEMORY_COPY(this->parent()));
|
358
360
|
|
359
361
|
Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
362
|
+
StyleRule* new_rule = SASS_MEMORY_NEW(StyleRule,
|
363
|
+
parent->pstate(),
|
364
|
+
parent->selector(),
|
365
|
+
bb);
|
364
366
|
new_rule->tabs(parent->tabs());
|
365
367
|
new_rule->block()->concat(m->block());
|
366
368
|
|
367
369
|
Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
|
368
370
|
wrapper_block->append(new_rule);
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
371
|
+
CssMediaRuleObj mm = SASS_MEMORY_NEW(CssMediaRule,
|
372
|
+
m->pstate(),
|
373
|
+
wrapper_block);
|
374
|
+
mm->concat(m->elements());
|
373
375
|
|
374
376
|
mm->tabs(m->tabs());
|
375
377
|
|
@@ -378,15 +380,15 @@ namespace Sass {
|
|
378
380
|
|
379
381
|
bool Cssize::bubblable(Statement* s)
|
380
382
|
{
|
381
|
-
return Cast<
|
383
|
+
return Cast<StyleRule>(s) || (s && s->bubbles());
|
382
384
|
}
|
383
385
|
|
384
|
-
Block* Cssize::flatten(Block* b)
|
386
|
+
Block* Cssize::flatten(const Block* b)
|
385
387
|
{
|
386
388
|
Block* result = SASS_MEMORY_NEW(Block, b->pstate(), 0, b->is_root());
|
387
389
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
388
390
|
Statement* ss = b->at(i);
|
389
|
-
if (Block* bb = Cast<Block>(ss)) {
|
391
|
+
if (const Block* bb = Cast<Block>(ss)) {
|
390
392
|
Block_Obj bs = flatten(bb);
|
391
393
|
for (size_t j = 0, K = bs->length(); j < K; ++j) {
|
392
394
|
result->append(bs->at(j));
|
@@ -399,9 +401,9 @@ namespace Sass {
|
|
399
401
|
return result;
|
400
402
|
}
|
401
403
|
|
402
|
-
|
404
|
+
sass::vector<std::pair<bool, Block_Obj>> Cssize::slice_by_bubble(Block* b)
|
403
405
|
{
|
404
|
-
|
406
|
+
sass::vector<std::pair<bool, Block_Obj>> results;
|
405
407
|
|
406
408
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
407
409
|
Statement_Obj value = b->at(i);
|
@@ -424,8 +426,8 @@ namespace Sass {
|
|
424
426
|
|
425
427
|
Block* Cssize::debubble(Block* children, Statement* parent)
|
426
428
|
{
|
427
|
-
|
428
|
-
|
429
|
+
ParentStatementObj previous_parent;
|
430
|
+
sass::vector<std::pair<bool, Block_Obj>> baz = slice_by_bubble(children);
|
429
431
|
Block_Obj result = SASS_MEMORY_NEW(Block, children->pstate());
|
430
432
|
|
431
433
|
for (size_t i = 0, L = baz.size(); i < L; ++i) {
|
@@ -440,7 +442,7 @@ namespace Sass {
|
|
440
442
|
previous_parent->block()->concat(slice);
|
441
443
|
}
|
442
444
|
else {
|
443
|
-
previous_parent =
|
445
|
+
previous_parent = SASS_MEMORY_COPY(parent);
|
444
446
|
previous_parent->block(slice);
|
445
447
|
previous_parent->tabs(parent->tabs());
|
446
448
|
|
@@ -451,36 +453,24 @@ namespace Sass {
|
|
451
453
|
|
452
454
|
for (size_t j = 0, K = slice->length(); j < K; ++j)
|
453
455
|
{
|
454
|
-
|
456
|
+
Statement_Obj ss;
|
455
457
|
Statement_Obj stm = slice->at(j);
|
456
458
|
// this has to go now here (too bad)
|
457
459
|
Bubble_Obj node = Cast<Bubble>(stm);
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
if (
|
462
|
-
if (
|
463
|
-
|
464
|
-
node->node()->statement_type() != Statement::MEDIA ||
|
465
|
-
(m1 && m2 && *m1->media_queries() == *m2->media_queries())
|
466
|
-
)
|
467
|
-
{
|
468
|
-
ss = node->node();
|
469
|
-
}
|
470
|
-
else
|
471
|
-
{
|
472
|
-
List_Obj mq = merge_media_queries(
|
473
|
-
Cast<Media_Block>(node->node()),
|
474
|
-
Cast<Media_Block>(parent)
|
475
|
-
);
|
476
|
-
if (!mq->length()) continue;
|
477
|
-
if (Media_Block* b = Cast<Media_Block>(node->node())) {
|
478
|
-
b->media_queries(mq);
|
479
|
-
}
|
460
|
+
|
461
|
+
CssMediaRule* rule1 = NULL;
|
462
|
+
CssMediaRule* rule2 = NULL;
|
463
|
+
if (parent) rule1 = Cast<CssMediaRule>(parent);
|
464
|
+
if (node) rule2 = Cast<CssMediaRule>(node->node());
|
465
|
+
if (rule1 || rule2) {
|
480
466
|
ss = node->node();
|
481
467
|
}
|
482
468
|
|
483
|
-
|
469
|
+
ss = node->node();
|
470
|
+
|
471
|
+
if (!ss) {
|
472
|
+
continue;
|
473
|
+
}
|
484
474
|
|
485
475
|
ss->tabs(ss->tabs() + node->tabs());
|
486
476
|
ss->group_end(node->group_end());
|
@@ -489,7 +479,8 @@ namespace Sass {
|
|
489
479
|
children->pstate(),
|
490
480
|
children->length(),
|
491
481
|
children->is_root());
|
492
|
-
|
482
|
+
auto evaled = ss->perform(this);
|
483
|
+
if (evaled) bb->append(evaled);
|
493
484
|
|
494
485
|
Block_Obj wrapper_block = SASS_MEMORY_NEW(Block,
|
495
486
|
children->pstate(),
|
@@ -516,7 +507,7 @@ namespace Sass {
|
|
516
507
|
{
|
517
508
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
518
509
|
Statement_Obj ith = b->at(i)->perform(this);
|
519
|
-
if (
|
510
|
+
if (Block_Obj bb = Cast<Block>(ith)) {
|
520
511
|
for (size_t j = 0, K = bb->length(); j < K; ++j) {
|
521
512
|
cur->append(bb->at(j));
|
522
513
|
}
|
@@ -527,78 +518,4 @@ namespace Sass {
|
|
527
518
|
}
|
528
519
|
}
|
529
520
|
|
530
|
-
List* Cssize::merge_media_queries(Media_Block* m1, Media_Block* m2)
|
531
|
-
{
|
532
|
-
List* qq = SASS_MEMORY_NEW(List,
|
533
|
-
m1->media_queries()->pstate(),
|
534
|
-
m1->media_queries()->length(),
|
535
|
-
SASS_COMMA);
|
536
|
-
|
537
|
-
for (size_t i = 0, L = m1->media_queries()->length(); i < L; i++) {
|
538
|
-
for (size_t j = 0, K = m2->media_queries()->length(); j < K; j++) {
|
539
|
-
Expression_Obj l1 = m1->media_queries()->at(i);
|
540
|
-
Expression_Obj l2 = m2->media_queries()->at(j);
|
541
|
-
Media_Query* mq1 = Cast<Media_Query>(l1);
|
542
|
-
Media_Query* mq2 = Cast<Media_Query>(l2);
|
543
|
-
Media_Query* mq = merge_media_query(mq1, mq2);
|
544
|
-
if (mq) qq->append(mq);
|
545
|
-
}
|
546
|
-
}
|
547
|
-
|
548
|
-
return qq;
|
549
|
-
}
|
550
|
-
|
551
|
-
|
552
|
-
Media_Query* Cssize::merge_media_query(Media_Query* mq1, Media_Query* mq2)
|
553
|
-
{
|
554
|
-
|
555
|
-
std::string type;
|
556
|
-
std::string mod;
|
557
|
-
|
558
|
-
std::string m1 = std::string(mq1->is_restricted() ? "only" : mq1->is_negated() ? "not" : "");
|
559
|
-
std::string t1 = mq1->media_type() ? mq1->media_type()->to_string(ctx.c_options) : "";
|
560
|
-
std::string m2 = std::string(mq2->is_restricted() ? "only" : mq2->is_negated() ? "not" : "");
|
561
|
-
std::string t2 = mq2->media_type() ? mq2->media_type()->to_string(ctx.c_options) : "";
|
562
|
-
|
563
|
-
|
564
|
-
if (t1.empty()) t1 = t2;
|
565
|
-
if (t2.empty()) t2 = t1;
|
566
|
-
|
567
|
-
if ((m1 == "not") ^ (m2 == "not")) {
|
568
|
-
if (t1 == t2) {
|
569
|
-
return 0;
|
570
|
-
}
|
571
|
-
type = m1 == "not" ? t2 : t1;
|
572
|
-
mod = m1 == "not" ? m2 : m1;
|
573
|
-
}
|
574
|
-
else if (m1 == "not" && m2 == "not") {
|
575
|
-
if (t1 != t2) {
|
576
|
-
return 0;
|
577
|
-
}
|
578
|
-
type = t1;
|
579
|
-
mod = "not";
|
580
|
-
}
|
581
|
-
else if (t1 != t2) {
|
582
|
-
return 0;
|
583
|
-
} else {
|
584
|
-
type = t1;
|
585
|
-
mod = m1.empty() ? m2 : m1;
|
586
|
-
}
|
587
|
-
|
588
|
-
Media_Query* mm = SASS_MEMORY_NEW(Media_Query,
|
589
|
-
mq1->pstate(),
|
590
|
-
{},
|
591
|
-
mq1->length() + mq2->length(),
|
592
|
-
mod == "not",
|
593
|
-
mod == "only");
|
594
|
-
|
595
|
-
if (!type.empty()) {
|
596
|
-
mm->media_type(SASS_MEMORY_NEW(String_Quoted, mq1->pstate(), type));
|
597
|
-
}
|
598
|
-
|
599
|
-
mm->concat(mq2);
|
600
|
-
mm->concat(mq1);
|
601
|
-
|
602
|
-
return mm;
|
603
|
-
}
|
604
521
|
}
|
data/ext/libsass/src/cssize.hpp
CHANGED
@@ -12,58 +12,52 @@ namespace Sass {
|
|
12
12
|
|
13
13
|
class Cssize : public Operation_CRTP<Statement*, Cssize> {
|
14
14
|
|
15
|
-
Context& ctx;
|
16
15
|
Backtraces& traces;
|
17
16
|
BlockStack block_stack;
|
18
|
-
|
17
|
+
sass::vector<Statement*> p_stack;
|
19
18
|
|
20
19
|
public:
|
21
20
|
Cssize(Context&);
|
22
21
|
~Cssize() { }
|
23
22
|
|
24
|
-
Selector_List* selector();
|
25
|
-
|
26
23
|
Block* operator()(Block*);
|
27
|
-
Statement* operator()(
|
24
|
+
Statement* operator()(StyleRule*);
|
28
25
|
// Statement* operator()(Bubble*);
|
29
|
-
Statement* operator()(
|
30
|
-
Statement* operator()(
|
31
|
-
Statement* operator()(
|
32
|
-
Statement* operator()(
|
26
|
+
Statement* operator()(CssMediaRule*);
|
27
|
+
Statement* operator()(SupportsRule*);
|
28
|
+
Statement* operator()(AtRootRule*);
|
29
|
+
Statement* operator()(AtRule*);
|
33
30
|
Statement* operator()(Keyframe_Rule*);
|
34
31
|
Statement* operator()(Trace*);
|
35
32
|
Statement* operator()(Declaration*);
|
36
33
|
// Statement* operator()(Assignment*);
|
37
34
|
// Statement* operator()(Import*);
|
38
35
|
// Statement* operator()(Import_Stub*);
|
39
|
-
// Statement* operator()(
|
36
|
+
// Statement* operator()(WarningRule*);
|
40
37
|
// Statement* operator()(Error*);
|
41
38
|
// Statement* operator()(Comment*);
|
42
39
|
// Statement* operator()(If*);
|
43
|
-
// Statement* operator()(
|
44
|
-
// Statement* operator()(
|
45
|
-
// Statement* operator()(
|
40
|
+
// Statement* operator()(ForRule*);
|
41
|
+
// Statement* operator()(EachRule*);
|
42
|
+
// Statement* operator()(WhileRule*);
|
46
43
|
// Statement* operator()(Return*);
|
47
|
-
// Statement* operator()(
|
44
|
+
// Statement* operator()(ExtendRule*);
|
48
45
|
// Statement* operator()(Definition*);
|
49
46
|
// Statement* operator()(Mixin_Call*);
|
50
47
|
// Statement* operator()(Content*);
|
51
48
|
Statement* operator()(Null*);
|
52
49
|
|
53
50
|
Statement* parent();
|
54
|
-
|
55
|
-
Statement* bubble(
|
56
|
-
Statement* bubble(
|
57
|
-
Statement* bubble(
|
58
|
-
Statement* bubble(
|
51
|
+
sass::vector<std::pair<bool, Block_Obj>> slice_by_bubble(Block*);
|
52
|
+
Statement* bubble(AtRule*);
|
53
|
+
Statement* bubble(AtRootRule*);
|
54
|
+
Statement* bubble(CssMediaRule*);
|
55
|
+
Statement* bubble(SupportsRule*);
|
59
56
|
|
60
57
|
Block* debubble(Block* children, Statement* parent = 0);
|
61
|
-
Block* flatten(Block*);
|
58
|
+
Block* flatten(const Block*);
|
62
59
|
bool bubblable(Statement*);
|
63
60
|
|
64
|
-
List* merge_media_queries(Media_Block*, Media_Block*);
|
65
|
-
Media_Query* merge_media_query(Media_Query*, Media_Query*);
|
66
|
-
|
67
61
|
// generic fallback
|
68
62
|
template <typename U>
|
69
63
|
Statement* fallback(U x)
|