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
@@ -0,0 +1,199 @@
|
|
1
|
+
#ifndef SASS_DART_HELPERS_H
|
2
|
+
#define SASS_DART_HELPERS_H
|
3
|
+
|
4
|
+
#include <vector>
|
5
|
+
#include <utility>
|
6
|
+
#include <iterator>
|
7
|
+
#include <functional>
|
8
|
+
|
9
|
+
namespace Sass {
|
10
|
+
|
11
|
+
// ##########################################################################
|
12
|
+
// Flatten `vector<vector<T>>` to `vector<T>`
|
13
|
+
// ##########################################################################
|
14
|
+
template <class T>
|
15
|
+
T flatten(const sass::vector<T>& all)
|
16
|
+
{
|
17
|
+
T flattened;
|
18
|
+
for (const auto& sub : all) {
|
19
|
+
std::copy(std::begin(sub), std::end(sub),
|
20
|
+
std::back_inserter(flattened));
|
21
|
+
}
|
22
|
+
return flattened;
|
23
|
+
}
|
24
|
+
|
25
|
+
// ##########################################################################
|
26
|
+
// Expands each element of this Iterable into zero or more elements.
|
27
|
+
// Calls a function on every element and ads all results to flat array
|
28
|
+
// ##########################################################################
|
29
|
+
// Equivalent to dart `cnt.any`
|
30
|
+
// Pass additional closure variables to `fn`
|
31
|
+
template <class T, class U, typename ...Args>
|
32
|
+
T expand(const T& cnt, U fn, Args... args) {
|
33
|
+
T flattened;
|
34
|
+
for (const auto& sub : cnt) {
|
35
|
+
auto rv = fn(sub, args...);
|
36
|
+
flattened.insert(flattened.end(),
|
37
|
+
rv.begin(), rv.end());
|
38
|
+
}
|
39
|
+
return flattened;
|
40
|
+
}
|
41
|
+
|
42
|
+
// ##########################################################################
|
43
|
+
// ##########################################################################
|
44
|
+
template <class T>
|
45
|
+
T flattenInner(const sass::vector<T>& vec)
|
46
|
+
{
|
47
|
+
T outer;
|
48
|
+
for (const auto& sub : vec) {
|
49
|
+
outer.emplace_back(std::move(flatten(sub)));
|
50
|
+
}
|
51
|
+
return outer;
|
52
|
+
}
|
53
|
+
// EO flattenInner
|
54
|
+
|
55
|
+
// ##########################################################################
|
56
|
+
// Equivalent to dart `cnt.any`
|
57
|
+
// Pass additional closure variables to `fn`
|
58
|
+
// ##########################################################################
|
59
|
+
template <class T, class U, typename ...Args>
|
60
|
+
bool hasAny(const T& cnt, U fn, Args... args) {
|
61
|
+
for (const auto& sub : cnt) {
|
62
|
+
if (fn(sub, args...)) {
|
63
|
+
return true;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
return false;
|
67
|
+
}
|
68
|
+
// EO hasAny
|
69
|
+
|
70
|
+
// ##########################################################################
|
71
|
+
// Equivalent to dart `cnt.take(len).any`
|
72
|
+
// Pass additional closure variables to `fn`
|
73
|
+
// ##########################################################################
|
74
|
+
template <class T, class U, typename ...Args>
|
75
|
+
bool hasSubAny(const T& cnt, size_t len, U fn, Args... args) {
|
76
|
+
for (size_t i = 0; i < len; i++) {
|
77
|
+
if (fn(cnt[i], args...)) {
|
78
|
+
return true;
|
79
|
+
}
|
80
|
+
}
|
81
|
+
return false;
|
82
|
+
}
|
83
|
+
|
84
|
+
// ##########################################################################
|
85
|
+
// Default predicate for lcs algorithm
|
86
|
+
// ##########################################################################
|
87
|
+
template <class T>
|
88
|
+
inline bool lcsIdentityCmp(const T& X, const T& Y, T& result)
|
89
|
+
{
|
90
|
+
// Assert equality
|
91
|
+
if (!ObjEqualityFn(X, Y)) {
|
92
|
+
return false;
|
93
|
+
}
|
94
|
+
// Store in reference
|
95
|
+
result = X;
|
96
|
+
// Return success
|
97
|
+
return true;
|
98
|
+
}
|
99
|
+
// EO lcsIdentityCmp
|
100
|
+
|
101
|
+
// ##########################################################################
|
102
|
+
// Longest common subsequence with predicate
|
103
|
+
// ##########################################################################
|
104
|
+
template <class T>
|
105
|
+
sass::vector<T> lcs(
|
106
|
+
const sass::vector<T>& X, const sass::vector<T>& Y,
|
107
|
+
bool(*select)(const T&, const T&, T&) = lcsIdentityCmp<T>)
|
108
|
+
{
|
109
|
+
|
110
|
+
std::size_t m = X.size(), mm = X.size() + 1;
|
111
|
+
std::size_t n = Y.size(), nn = Y.size() + 1;
|
112
|
+
|
113
|
+
if (m == 0) return {};
|
114
|
+
if (n == 0) return {};
|
115
|
+
|
116
|
+
// MSVC does not support variable-length arrays
|
117
|
+
// To circumvent, allocate one array on the heap
|
118
|
+
// Then use a macro to access via double index
|
119
|
+
// e.g. `size_t L[m][n]` is supported by gcc
|
120
|
+
size_t* len = new size_t[mm * nn + 1];
|
121
|
+
bool* acc = new bool[mm * nn + 1];
|
122
|
+
T* res = new T[mm * nn + 1];
|
123
|
+
|
124
|
+
#define LEN(x, y) len[(x) * nn + (y)]
|
125
|
+
#define ACC(x, y) acc[(x) * nn + (y)]
|
126
|
+
#define RES(x, y) res[(x) * nn + (y)]
|
127
|
+
|
128
|
+
/* Following steps build L[m+1][n+1] in bottom up fashion. Note
|
129
|
+
that L[i][j] contains length of LCS of X[0..i-1] and Y[0..j-1] */
|
130
|
+
for (size_t i = 0; i <= m; i++) {
|
131
|
+
for (size_t j = 0; j <= n; j++) {
|
132
|
+
if (i == 0 || j == 0)
|
133
|
+
LEN(i, j) = 0;
|
134
|
+
else {
|
135
|
+
ACC(i - 1, j - 1) = select(X[i - 1], Y[j - 1], RES(i - 1, j - 1));
|
136
|
+
if (ACC(i - 1, j - 1))
|
137
|
+
LEN(i, j) = LEN(i - 1, j - 1) + 1;
|
138
|
+
else
|
139
|
+
LEN(i, j) = std::max(LEN(i - 1, j), LEN(i, j - 1));
|
140
|
+
}
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
// Following code is used to print LCS
|
145
|
+
sass::vector<T> lcs;
|
146
|
+
std::size_t index = LEN(m, n);
|
147
|
+
lcs.reserve(index);
|
148
|
+
|
149
|
+
// Start from the right-most-bottom-most corner
|
150
|
+
// and one by one store objects in lcs[]
|
151
|
+
std::size_t i = m, j = n;
|
152
|
+
while (i > 0 && j > 0) {
|
153
|
+
|
154
|
+
// If current objects in X[] and Y are same,
|
155
|
+
// then current object is part of LCS
|
156
|
+
if (ACC(i - 1, j - 1))
|
157
|
+
{
|
158
|
+
// Put the stored object in result
|
159
|
+
// Note: we push instead of unshift
|
160
|
+
// Note: reverse the vector later
|
161
|
+
// ToDo: is deque more performant?
|
162
|
+
lcs.push_back(RES(i - 1, j - 1));
|
163
|
+
// reduce values of i, j and index
|
164
|
+
i -= 1; j -= 1; index -= 1;
|
165
|
+
}
|
166
|
+
|
167
|
+
// If not same, then find the larger of two and
|
168
|
+
// go in the direction of larger value
|
169
|
+
else if (LEN(i - 1, j) > LEN(i, j - 1)) {
|
170
|
+
i--;
|
171
|
+
}
|
172
|
+
else {
|
173
|
+
j--;
|
174
|
+
}
|
175
|
+
|
176
|
+
}
|
177
|
+
|
178
|
+
// reverse now as we used push_back
|
179
|
+
std::reverse(lcs.begin(), lcs.end());
|
180
|
+
|
181
|
+
// Delete temp memory on heap
|
182
|
+
delete[] len;
|
183
|
+
delete[] acc;
|
184
|
+
delete[] res;
|
185
|
+
|
186
|
+
#undef LEN
|
187
|
+
#undef ACC
|
188
|
+
#undef RES
|
189
|
+
|
190
|
+
return lcs;
|
191
|
+
}
|
192
|
+
// EO lcs
|
193
|
+
|
194
|
+
// ##########################################################################
|
195
|
+
// ##########################################################################
|
196
|
+
|
197
|
+
}
|
198
|
+
|
199
|
+
#endif
|