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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +18 -0
  4. data/Rakefile +1 -3
  5. data/ext/extconf.rb +13 -5
  6. data/ext/libsass/VERSION +1 -1
  7. data/ext/libsass/include/sass/base.h +2 -1
  8. data/ext/libsass/include/sass/context.h +4 -0
  9. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  10. data/ext/libsass/src/ast.cpp +158 -168
  11. data/ext/libsass/src/ast.hpp +389 -230
  12. data/ext/libsass/src/ast_def_macros.hpp +18 -10
  13. data/ext/libsass/src/ast_fwd_decl.cpp +4 -3
  14. data/ext/libsass/src/ast_fwd_decl.hpp +98 -165
  15. data/ext/libsass/src/ast_helpers.hpp +292 -0
  16. data/ext/libsass/src/ast_sel_cmp.cpp +219 -732
  17. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  18. data/ext/libsass/src/ast_sel_unify.cpp +207 -212
  19. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  20. data/ext/libsass/src/ast_selectors.cpp +594 -1026
  21. data/ext/libsass/src/ast_selectors.hpp +339 -385
  22. data/ext/libsass/src/ast_supports.cpp +36 -52
  23. data/ext/libsass/src/ast_supports.hpp +29 -29
  24. data/ext/libsass/src/ast_values.cpp +271 -84
  25. data/ext/libsass/src/ast_values.hpp +116 -107
  26. data/ext/libsass/src/backtrace.cpp +9 -9
  27. data/ext/libsass/src/backtrace.hpp +5 -5
  28. data/ext/libsass/src/base64vlq.cpp +2 -2
  29. data/ext/libsass/src/base64vlq.hpp +1 -1
  30. data/ext/libsass/src/bind.cpp +18 -18
  31. data/ext/libsass/src/bind.hpp +1 -1
  32. data/ext/libsass/src/c2ast.cpp +3 -3
  33. data/ext/libsass/src/c2ast.hpp +1 -1
  34. data/ext/libsass/src/cencode.c +4 -6
  35. data/ext/libsass/src/check_nesting.cpp +40 -41
  36. data/ext/libsass/src/check_nesting.hpp +6 -2
  37. data/ext/libsass/src/color_maps.cpp +14 -13
  38. data/ext/libsass/src/color_maps.hpp +1 -9
  39. data/ext/libsass/src/constants.cpp +5 -0
  40. data/ext/libsass/src/constants.hpp +6 -0
  41. data/ext/libsass/src/context.cpp +92 -119
  42. data/ext/libsass/src/context.hpp +41 -53
  43. data/ext/libsass/src/cssize.cpp +66 -149
  44. data/ext/libsass/src/cssize.hpp +17 -23
  45. data/ext/libsass/src/dart_helpers.hpp +199 -0
  46. data/ext/libsass/src/debugger.hpp +451 -295
  47. data/ext/libsass/src/emitter.cpp +15 -16
  48. data/ext/libsass/src/emitter.hpp +10 -12
  49. data/ext/libsass/src/environment.cpp +27 -27
  50. data/ext/libsass/src/environment.hpp +29 -24
  51. data/ext/libsass/src/error_handling.cpp +62 -41
  52. data/ext/libsass/src/error_handling.hpp +61 -51
  53. data/ext/libsass/src/eval.cpp +167 -281
  54. data/ext/libsass/src/eval.hpp +27 -29
  55. data/ext/libsass/src/eval_selectors.cpp +75 -0
  56. data/ext/libsass/src/expand.cpp +275 -222
  57. data/ext/libsass/src/expand.hpp +36 -16
  58. data/ext/libsass/src/extender.cpp +1188 -0
  59. data/ext/libsass/src/extender.hpp +399 -0
  60. data/ext/libsass/src/extension.cpp +43 -0
  61. data/ext/libsass/src/extension.hpp +89 -0
  62. data/ext/libsass/src/file.cpp +81 -72
  63. data/ext/libsass/src/file.hpp +28 -37
  64. data/ext/libsass/src/fn_colors.cpp +20 -18
  65. data/ext/libsass/src/fn_lists.cpp +30 -29
  66. data/ext/libsass/src/fn_maps.cpp +3 -3
  67. data/ext/libsass/src/fn_miscs.cpp +34 -46
  68. data/ext/libsass/src/fn_numbers.cpp +20 -13
  69. data/ext/libsass/src/fn_selectors.cpp +98 -128
  70. data/ext/libsass/src/fn_strings.cpp +47 -33
  71. data/ext/libsass/src/fn_utils.cpp +31 -29
  72. data/ext/libsass/src/fn_utils.hpp +17 -11
  73. data/ext/libsass/src/inspect.cpp +186 -148
  74. data/ext/libsass/src/inspect.hpp +31 -29
  75. data/ext/libsass/src/lexer.cpp +20 -82
  76. data/ext/libsass/src/lexer.hpp +5 -16
  77. data/ext/libsass/src/listize.cpp +23 -37
  78. data/ext/libsass/src/listize.hpp +8 -9
  79. data/ext/libsass/src/mapping.hpp +1 -0
  80. data/ext/libsass/src/memory/allocator.cpp +48 -0
  81. data/ext/libsass/src/memory/allocator.hpp +138 -0
  82. data/ext/libsass/src/memory/config.hpp +20 -0
  83. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  84. data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
  85. data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +55 -9
  86. data/ext/libsass/src/memory.hpp +12 -0
  87. data/ext/libsass/src/operation.hpp +71 -61
  88. data/ext/libsass/src/operators.cpp +19 -18
  89. data/ext/libsass/src/operators.hpp +11 -11
  90. data/ext/libsass/src/ordered_map.hpp +112 -0
  91. data/ext/libsass/src/output.cpp +45 -64
  92. data/ext/libsass/src/output.hpp +6 -6
  93. data/ext/libsass/src/parser.cpp +512 -700
  94. data/ext/libsass/src/parser.hpp +89 -97
  95. data/ext/libsass/src/parser_selectors.cpp +189 -0
  96. data/ext/libsass/src/permutate.hpp +164 -0
  97. data/ext/libsass/src/plugins.cpp +7 -7
  98. data/ext/libsass/src/plugins.hpp +8 -8
  99. data/ext/libsass/src/position.cpp +7 -26
  100. data/ext/libsass/src/position.hpp +44 -21
  101. data/ext/libsass/src/prelexer.cpp +6 -6
  102. data/ext/libsass/src/remove_placeholders.cpp +55 -56
  103. data/ext/libsass/src/remove_placeholders.hpp +21 -18
  104. data/ext/libsass/src/sass.cpp +16 -15
  105. data/ext/libsass/src/sass.hpp +10 -5
  106. data/ext/libsass/src/sass2scss.cpp +4 -4
  107. data/ext/libsass/src/sass_context.cpp +91 -122
  108. data/ext/libsass/src/sass_context.hpp +2 -2
  109. data/ext/libsass/src/sass_functions.cpp +1 -1
  110. data/ext/libsass/src/sass_values.cpp +8 -11
  111. data/ext/libsass/src/settings.hpp +19 -0
  112. data/ext/libsass/src/source.cpp +69 -0
  113. data/ext/libsass/src/source.hpp +95 -0
  114. data/ext/libsass/src/source_data.hpp +32 -0
  115. data/ext/libsass/src/source_map.cpp +22 -18
  116. data/ext/libsass/src/source_map.hpp +12 -9
  117. data/ext/libsass/src/stylesheet.cpp +22 -0
  118. data/ext/libsass/src/stylesheet.hpp +57 -0
  119. data/ext/libsass/src/to_value.cpp +2 -2
  120. data/ext/libsass/src/to_value.hpp +1 -1
  121. data/ext/libsass/src/units.cpp +24 -22
  122. data/ext/libsass/src/units.hpp +8 -8
  123. data/ext/libsass/src/utf8_string.cpp +9 -10
  124. data/ext/libsass/src/utf8_string.hpp +7 -6
  125. data/ext/libsass/src/util.cpp +48 -50
  126. data/ext/libsass/src/util.hpp +20 -21
  127. data/ext/libsass/src/util_string.cpp +111 -61
  128. data/ext/libsass/src/util_string.hpp +62 -8
  129. data/ext/libsass/src/values.cpp +12 -12
  130. data/lib/sassc/engine.rb +5 -3
  131. data/lib/sassc/functions_handler.rb +8 -8
  132. data/lib/sassc/native.rb +4 -6
  133. data/lib/sassc/script.rb +4 -4
  134. data/lib/sassc/version.rb +1 -1
  135. data/test/functions_test.rb +18 -1
  136. data/test/native_test.rb +4 -4
  137. metadata +29 -15
  138. data/ext/libsass/src/extend.cpp +0 -2132
  139. data/ext/libsass/src/extend.hpp +0 -86
  140. data/ext/libsass/src/node.cpp +0 -322
  141. data/ext/libsass/src/node.hpp +0 -118
  142. data/ext/libsass/src/paths.hpp +0 -71
  143. data/ext/libsass/src/sass_util.cpp +0 -152
  144. data/ext/libsass/src/sass_util.hpp +0 -256
  145. data/ext/libsass/src/subset_map.cpp +0 -58
  146. data/ext/libsass/src/subset_map.hpp +0 -76
  147. 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