sassc 2.0.0 → 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/.gitignore +2 -0
- data/.gitmodules +1 -1
- data/.travis.yml +9 -3
- data/CHANGELOG.md +36 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +1 -1
- data/Rakefile +43 -7
- data/ext/depend +4 -0
- data/ext/extconf.rb +92 -0
- data/ext/libsass/VERSION +1 -0
- data/ext/libsass/include/sass/base.h +9 -1
- data/ext/libsass/include/sass/context.h +5 -1
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +755 -2028
- data/ext/libsass/src/ast.hpp +492 -2477
- data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
- data/ext/libsass/src/ast2c.hpp +39 -0
- data/ext/libsass/src/ast_def_macros.hpp +70 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
- data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
- data/ext/libsass/src/ast_helpers.hpp +292 -0
- data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
- data/ext/libsass/src/ast_sel_super.cpp +539 -0
- data/ext/libsass/src/ast_sel_unify.cpp +275 -0
- data/ext/libsass/src/ast_sel_weave.cpp +616 -0
- data/ext/libsass/src/ast_selectors.cpp +1043 -0
- data/ext/libsass/src/ast_selectors.hpp +522 -0
- data/ext/libsass/src/ast_supports.cpp +114 -0
- data/ext/libsass/src/ast_supports.hpp +121 -0
- data/ext/libsass/src/ast_values.cpp +1154 -0
- data/ext/libsass/src/ast_values.hpp +498 -0
- data/ext/libsass/src/backtrace.cpp +11 -7
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +5 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +35 -34
- data/ext/libsass/src/bind.hpp +3 -1
- data/ext/libsass/src/c2ast.cpp +64 -0
- data/ext/libsass/src/c2ast.hpp +14 -0
- data/ext/libsass/src/cencode.c +4 -6
- data/ext/libsass/src/check_nesting.cpp +83 -88
- data/ext/libsass/src/check_nesting.hpp +39 -34
- data/ext/libsass/src/color_maps.cpp +168 -164
- data/ext/libsass/src/color_maps.hpp +152 -160
- data/ext/libsass/src/constants.cpp +20 -0
- data/ext/libsass/src/constants.hpp +19 -0
- data/ext/libsass/src/context.cpp +104 -121
- data/ext/libsass/src/context.hpp +43 -55
- data/ext/libsass/src/cssize.cpp +103 -188
- data/ext/libsass/src/cssize.hpp +45 -51
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debugger.hpp +524 -361
- data/ext/libsass/src/emitter.cpp +26 -26
- data/ext/libsass/src/emitter.hpp +20 -18
- data/ext/libsass/src/environment.cpp +41 -27
- data/ext/libsass/src/environment.hpp +33 -22
- data/ext/libsass/src/error_handling.cpp +92 -94
- data/ext/libsass/src/error_handling.hpp +73 -50
- data/ext/libsass/src/eval.cpp +380 -515
- data/ext/libsass/src/eval.hpp +64 -57
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +322 -263
- data/ext/libsass/src/expand.hpp +55 -39
- 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 +134 -88
- data/ext/libsass/src/file.hpp +28 -37
- data/ext/libsass/src/fn_colors.cpp +596 -0
- data/ext/libsass/src/fn_colors.hpp +85 -0
- data/ext/libsass/src/fn_lists.cpp +285 -0
- data/ext/libsass/src/fn_lists.hpp +34 -0
- data/ext/libsass/src/fn_maps.cpp +94 -0
- data/ext/libsass/src/fn_maps.hpp +30 -0
- data/ext/libsass/src/fn_miscs.cpp +244 -0
- data/ext/libsass/src/fn_miscs.hpp +40 -0
- data/ext/libsass/src/fn_numbers.cpp +227 -0
- data/ext/libsass/src/fn_numbers.hpp +45 -0
- data/ext/libsass/src/fn_selectors.cpp +205 -0
- data/ext/libsass/src/fn_selectors.hpp +35 -0
- data/ext/libsass/src/fn_strings.cpp +268 -0
- data/ext/libsass/src/fn_strings.hpp +34 -0
- data/ext/libsass/src/fn_utils.cpp +158 -0
- data/ext/libsass/src/fn_utils.hpp +62 -0
- data/ext/libsass/src/inspect.cpp +253 -266
- data/ext/libsass/src/inspect.hpp +72 -74
- data/ext/libsass/src/json.cpp +2 -2
- data/ext/libsass/src/lexer.cpp +25 -84
- data/ext/libsass/src/lexer.hpp +5 -16
- data/ext/libsass/src/listize.cpp +27 -43
- data/ext/libsass/src/listize.hpp +14 -11
- 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/shared_ptr.cpp +33 -0
- data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
- data/ext/libsass/src/operation.hpp +193 -143
- data/ext/libsass/src/operators.cpp +56 -29
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +59 -75
- data/ext/libsass/src/output.hpp +15 -22
- data/ext/libsass/src/parser.cpp +662 -818
- data/ext/libsass/src/parser.hpp +96 -100
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +164 -0
- data/ext/libsass/src/plugins.cpp +12 -8
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +10 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/prelexer.cpp +14 -8
- data/ext/libsass/src/prelexer.hpp +9 -9
- data/ext/libsass/src/remove_placeholders.cpp +59 -57
- data/ext/libsass/src/remove_placeholders.hpp +20 -18
- data/ext/libsass/src/sass.cpp +25 -18
- data/ext/libsass/src/sass.hpp +22 -14
- data/ext/libsass/src/sass2scss.cpp +49 -18
- data/ext/libsass/src/sass_context.cpp +104 -132
- data/ext/libsass/src/sass_context.hpp +2 -2
- data/ext/libsass/src/sass_functions.cpp +7 -4
- data/ext/libsass/src/sass_functions.hpp +1 -1
- data/ext/libsass/src/sass_values.cpp +26 -21
- 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 +27 -20
- data/ext/libsass/src/source_map.hpp +14 -11
- data/ext/libsass/src/stylesheet.cpp +22 -0
- data/ext/libsass/src/stylesheet.hpp +57 -0
- data/ext/libsass/src/to_value.cpp +24 -22
- data/ext/libsass/src/to_value.hpp +18 -22
- data/ext/libsass/src/units.cpp +28 -22
- data/ext/libsass/src/units.hpp +9 -8
- data/ext/libsass/src/utf8/checked.h +12 -10
- data/ext/libsass/src/utf8/core.h +3 -0
- data/ext/libsass/src/utf8_string.cpp +12 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +97 -107
- data/ext/libsass/src/util.hpp +74 -30
- data/ext/libsass/src/util_string.cpp +125 -0
- data/ext/libsass/src/util_string.hpp +73 -0
- data/ext/libsass/src/values.cpp +33 -24
- data/ext/libsass/src/values.hpp +2 -2
- data/lib/sassc.rb +24 -0
- data/lib/sassc/engine.rb +7 -5
- data/lib/sassc/functions_handler.rb +11 -13
- data/lib/sassc/native.rb +10 -9
- data/lib/sassc/native/native_functions_api.rb +0 -5
- data/lib/sassc/script.rb +4 -6
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +32 -12
- data/test/engine_test.rb +32 -2
- data/test/functions_test.rb +38 -1
- data/test/native_test.rb +4 -4
- metadata +95 -109
- data/ext/Rakefile +0 -3
- data/ext/libsass/.editorconfig +0 -15
- data/ext/libsass/.gitattributes +0 -2
- data/ext/libsass/.github/CONTRIBUTING.md +0 -65
- data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
- data/ext/libsass/.gitignore +0 -85
- data/ext/libsass/.travis.yml +0 -64
- data/ext/libsass/COPYING +0 -25
- data/ext/libsass/GNUmakefile.am +0 -88
- data/ext/libsass/INSTALL +0 -1
- data/ext/libsass/LICENSE +0 -25
- data/ext/libsass/Makefile +0 -351
- data/ext/libsass/Makefile.conf +0 -55
- data/ext/libsass/Readme.md +0 -104
- data/ext/libsass/SECURITY.md +0 -10
- data/ext/libsass/appveyor.yml +0 -91
- data/ext/libsass/configure.ac +0 -138
- data/ext/libsass/contrib/libsass.spec +0 -66
- data/ext/libsass/docs/README.md +0 -20
- data/ext/libsass/docs/api-context-example.md +0 -45
- data/ext/libsass/docs/api-context-internal.md +0 -163
- data/ext/libsass/docs/api-context.md +0 -295
- data/ext/libsass/docs/api-doc.md +0 -215
- data/ext/libsass/docs/api-function-example.md +0 -67
- data/ext/libsass/docs/api-function-internal.md +0 -8
- data/ext/libsass/docs/api-function.md +0 -74
- data/ext/libsass/docs/api-importer-example.md +0 -112
- data/ext/libsass/docs/api-importer-internal.md +0 -20
- data/ext/libsass/docs/api-importer.md +0 -86
- data/ext/libsass/docs/api-value-example.md +0 -55
- data/ext/libsass/docs/api-value-internal.md +0 -76
- data/ext/libsass/docs/api-value.md +0 -154
- data/ext/libsass/docs/build-on-darwin.md +0 -27
- data/ext/libsass/docs/build-on-gentoo.md +0 -55
- data/ext/libsass/docs/build-on-windows.md +0 -139
- data/ext/libsass/docs/build-shared-library.md +0 -35
- data/ext/libsass/docs/build-with-autotools.md +0 -78
- data/ext/libsass/docs/build-with-makefiles.md +0 -68
- data/ext/libsass/docs/build-with-mingw.md +0 -107
- data/ext/libsass/docs/build-with-visual-studio.md +0 -90
- data/ext/libsass/docs/build.md +0 -97
- data/ext/libsass/docs/compatibility-plan.md +0 -48
- data/ext/libsass/docs/contributing.md +0 -17
- data/ext/libsass/docs/custom-functions-internal.md +0 -122
- data/ext/libsass/docs/dev-ast-memory.md +0 -223
- data/ext/libsass/docs/implementations.md +0 -56
- data/ext/libsass/docs/plugins.md +0 -47
- data/ext/libsass/docs/setup-environment.md +0 -68
- data/ext/libsass/docs/source-map-internals.md +0 -51
- data/ext/libsass/docs/trace.md +0 -26
- data/ext/libsass/docs/triage.md +0 -17
- data/ext/libsass/docs/unicode.md +0 -39
- data/ext/libsass/extconf.rb +0 -6
- data/ext/libsass/include/sass/version.h.in +0 -12
- data/ext/libsass/m4/.gitkeep +0 -0
- data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
- data/ext/libsass/res/resource.rc +0 -35
- data/ext/libsass/script/bootstrap +0 -13
- data/ext/libsass/script/branding +0 -10
- data/ext/libsass/script/ci-build-libsass +0 -134
- data/ext/libsass/script/ci-build-plugin +0 -62
- data/ext/libsass/script/ci-install-compiler +0 -6
- data/ext/libsass/script/ci-install-deps +0 -20
- data/ext/libsass/script/ci-report-coverage +0 -42
- data/ext/libsass/script/spec +0 -5
- data/ext/libsass/script/tap-driver +0 -652
- data/ext/libsass/script/tap-runner +0 -1
- data/ext/libsass/script/test-leaks.pl +0 -103
- data/ext/libsass/src/GNUmakefile.am +0 -54
- data/ext/libsass/src/extend.cpp +0 -2130
- data/ext/libsass/src/extend.hpp +0 -86
- data/ext/libsass/src/functions.cpp +0 -2234
- data/ext/libsass/src/functions.hpp +0 -198
- data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
- data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
- data/ext/libsass/src/node.cpp +0 -319
- data/ext/libsass/src/node.hpp +0 -118
- data/ext/libsass/src/paths.hpp +0 -71
- data/ext/libsass/src/sass_util.cpp +0 -149
- data/ext/libsass/src/sass_util.hpp +0 -256
- data/ext/libsass/src/subset_map.cpp +0 -55
- data/ext/libsass/src/subset_map.hpp +0 -76
- data/ext/libsass/src/support/libsass.pc.in +0 -11
- data/ext/libsass/src/to_c.hpp +0 -39
- data/ext/libsass/test/test_node.cpp +0 -94
- data/ext/libsass/test/test_paths.cpp +0 -28
- data/ext/libsass/test/test_selector_difference.cpp +0 -25
- data/ext/libsass/test/test_specificity.cpp +0 -25
- data/ext/libsass/test/test_subset_map.cpp +0 -472
- data/ext/libsass/test/test_superselector.cpp +0 -69
- data/ext/libsass/test/test_unification.cpp +0 -31
- data/ext/libsass/version.sh +0 -10
- data/ext/libsass/win/libsass.sln +0 -39
- data/ext/libsass/win/libsass.sln.DotSettings +0 -9
- data/ext/libsass/win/libsass.targets +0 -118
- data/ext/libsass/win/libsass.vcxproj +0 -188
- data/ext/libsass/win/libsass.vcxproj.filters +0 -357
- data/lib/sassc/native/lib_c.rb +0 -21
- data/lib/tasks/libsass.rb +0 -33
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#ifndef SASS_PATHS_H
|
|
2
|
+
#define SASS_PATHS_H
|
|
3
|
+
|
|
4
|
+
#include <vector>
|
|
5
|
+
|
|
6
|
+
namespace Sass {
|
|
7
|
+
|
|
8
|
+
// Returns a list of all possible paths through the given lists.
|
|
9
|
+
//
|
|
10
|
+
// For example, given `[[1, 2], [3, 4], [5, 6]]`, this returns:
|
|
11
|
+
//
|
|
12
|
+
// ```
|
|
13
|
+
// [[1, 3, 5],
|
|
14
|
+
// [2, 3, 5],
|
|
15
|
+
// [1, 4, 5],
|
|
16
|
+
// [2, 4, 5],
|
|
17
|
+
// [1, 3, 6],
|
|
18
|
+
// [2, 3, 6],
|
|
19
|
+
// [1, 4, 6],
|
|
20
|
+
// [2, 4, 6]]
|
|
21
|
+
// ```
|
|
22
|
+
//
|
|
23
|
+
// Note: called `paths` in dart-sass
|
|
24
|
+
template <class T>
|
|
25
|
+
sass::vector<sass::vector<T>> permutate(
|
|
26
|
+
const sass::vector<sass::vector<T>>& in)
|
|
27
|
+
{
|
|
28
|
+
|
|
29
|
+
size_t L = in.size(), n = 0;
|
|
30
|
+
|
|
31
|
+
if (L == 0) return {};
|
|
32
|
+
// Exit early if any entry is empty
|
|
33
|
+
for (size_t i = 0; i < L; i += 1) {
|
|
34
|
+
if (in[i].size() == 0) return {};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
size_t* state = new size_t[L + 1];
|
|
38
|
+
sass::vector<sass::vector<T>> out;
|
|
39
|
+
|
|
40
|
+
// First initialize all states for every permutation group
|
|
41
|
+
for (size_t i = 0; i < L; i += 1) {
|
|
42
|
+
state[i] = in[i].size() - 1;
|
|
43
|
+
}
|
|
44
|
+
while (true) {
|
|
45
|
+
sass::vector<T> perm;
|
|
46
|
+
// Create one permutation for state
|
|
47
|
+
for (size_t i = 0; i < L; i += 1) {
|
|
48
|
+
perm.push_back(in.at(i).at(in[i].size() - state[i] - 1));
|
|
49
|
+
}
|
|
50
|
+
// Current group finished
|
|
51
|
+
if (state[n] == 0) {
|
|
52
|
+
// Find position of next decrement
|
|
53
|
+
while (n < L && state[++n] == 0) {}
|
|
54
|
+
|
|
55
|
+
if (n == L) {
|
|
56
|
+
out.push_back(perm);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
state[n] -= 1;
|
|
61
|
+
|
|
62
|
+
for (size_t p = 0; p < n; p += 1) {
|
|
63
|
+
state[p] = in[p].size() - 1;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Restart from front
|
|
67
|
+
n = 0;
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
state[n] -= 1;
|
|
72
|
+
}
|
|
73
|
+
out.push_back(perm);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
delete[] state;
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
// EO permutate
|
|
80
|
+
|
|
81
|
+
// ToDo: this variant is used in resolveParentSelectors
|
|
82
|
+
// Returns a list of all possible paths through the given lists.
|
|
83
|
+
//
|
|
84
|
+
// For example, given `[[1, 2], [3, 4], [5, 6]]`, this returns:
|
|
85
|
+
//
|
|
86
|
+
// ```
|
|
87
|
+
// [[1, 3, 5],
|
|
88
|
+
// [1, 3, 6],
|
|
89
|
+
// [1, 4, 5],
|
|
90
|
+
// [1, 4, 6],
|
|
91
|
+
// [2, 3, 5],
|
|
92
|
+
// [2, 3, 6],
|
|
93
|
+
// [2, 4, 5],
|
|
94
|
+
// [2, 4, 6]]
|
|
95
|
+
// ```
|
|
96
|
+
//
|
|
97
|
+
template <class T>
|
|
98
|
+
sass::vector<sass::vector<T>>
|
|
99
|
+
permutateAlt(const sass::vector<sass::vector<T>>& in) {
|
|
100
|
+
|
|
101
|
+
size_t L = in.size();
|
|
102
|
+
size_t n = in.size() - 1;
|
|
103
|
+
|
|
104
|
+
if (L == 0) return {};
|
|
105
|
+
// Exit early if any entry is empty
|
|
106
|
+
for (size_t i = 0; i < L; i += 1) {
|
|
107
|
+
if (in[i].size() == 0) return {};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
size_t* state = new size_t[L];
|
|
111
|
+
sass::vector<sass::vector<T>> out;
|
|
112
|
+
|
|
113
|
+
// First initialize all states for every permutation group
|
|
114
|
+
for (size_t i = 0; i < L; i += 1) {
|
|
115
|
+
state[i] = in[i].size() - 1;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
while (true) {
|
|
119
|
+
/*
|
|
120
|
+
// std::cerr << "PERM: ";
|
|
121
|
+
for (size_t p = 0; p < L; p++)
|
|
122
|
+
{ // std::cerr << state[p] << " "; }
|
|
123
|
+
// std::cerr << "\n";
|
|
124
|
+
*/
|
|
125
|
+
sass::vector<T> perm;
|
|
126
|
+
// Create one permutation for state
|
|
127
|
+
for (size_t i = 0; i < L; i += 1) {
|
|
128
|
+
perm.push_back(in.at(i).at(in[i].size() - state[i] - 1));
|
|
129
|
+
}
|
|
130
|
+
// Current group finished
|
|
131
|
+
if (state[n] == 0) {
|
|
132
|
+
// Find position of next decrement
|
|
133
|
+
while (n > 0 && state[--n] == 0) {}
|
|
134
|
+
|
|
135
|
+
// Check for end condition
|
|
136
|
+
if (state[n] != 0) {
|
|
137
|
+
// Decrease next on the left side
|
|
138
|
+
state[n] -= 1;
|
|
139
|
+
// Reset all counters to the right
|
|
140
|
+
for (size_t p = n + 1; p < L; p += 1) {
|
|
141
|
+
state[p] = in[p].size() - 1;
|
|
142
|
+
}
|
|
143
|
+
// Restart from end
|
|
144
|
+
n = L - 1;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
out.push_back(perm);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
state[n] -= 1;
|
|
153
|
+
}
|
|
154
|
+
out.push_back(perm);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
delete[] state;
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
// EO permutateAlt
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
#endif
|
data/ext/libsass/src/plugins.cpp
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
1
3
|
#include "sass.hpp"
|
|
4
|
+
|
|
2
5
|
#include <iostream>
|
|
3
6
|
#include "output.hpp"
|
|
4
7
|
#include "plugins.hpp"
|
|
8
|
+
#include "util.hpp"
|
|
5
9
|
|
|
6
10
|
#ifdef _WIN32
|
|
7
11
|
#include <windows.h>
|
|
@@ -40,18 +44,18 @@ namespace Sass {
|
|
|
40
44
|
if (!strcmp(our_version, "[na]")) return false;
|
|
41
45
|
|
|
42
46
|
// find the position of the second dot
|
|
43
|
-
size_t pos =
|
|
44
|
-
if (pos !=
|
|
47
|
+
size_t pos = sass::string(our_version).find('.', 0);
|
|
48
|
+
if (pos != sass::string::npos) pos = sass::string(our_version).find('.', pos + 1);
|
|
45
49
|
|
|
46
50
|
// if we do not have two dots we fallback to compare complete string
|
|
47
|
-
if (pos ==
|
|
51
|
+
if (pos == sass::string::npos) { return strcmp(their_version, our_version) ? 0 : 1; }
|
|
48
52
|
// otherwise only compare up to the second dot (major versions)
|
|
49
53
|
else { return strncmp(their_version, our_version, pos) ? 0 : 1; }
|
|
50
54
|
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
// load one specific plugin
|
|
54
|
-
bool Plugins::load_plugin (const
|
|
58
|
+
bool Plugins::load_plugin (const sass::string& path)
|
|
55
59
|
{
|
|
56
60
|
|
|
57
61
|
typedef const char* (*__plugin_version__)(void);
|
|
@@ -108,7 +112,7 @@ namespace Sass {
|
|
|
108
112
|
|
|
109
113
|
}
|
|
110
114
|
|
|
111
|
-
size_t Plugins::load_plugins(const
|
|
115
|
+
size_t Plugins::load_plugins(const sass::string& path)
|
|
112
116
|
{
|
|
113
117
|
|
|
114
118
|
// count plugins
|
|
@@ -122,7 +126,7 @@ namespace Sass {
|
|
|
122
126
|
// use wchar (utf16)
|
|
123
127
|
WIN32_FIND_DATAW data;
|
|
124
128
|
// trailing slash is guaranteed
|
|
125
|
-
|
|
129
|
+
sass::string globsrch(path + "*.dll");
|
|
126
130
|
// convert to wide chars (utf16) for system call
|
|
127
131
|
std::wstring wglobsrch(UTF_8::convert_to_utf16(globsrch));
|
|
128
132
|
HANDLE hFile = FindFirstFileW(wglobsrch.c_str(), &data);
|
|
@@ -136,7 +140,7 @@ namespace Sass {
|
|
|
136
140
|
try
|
|
137
141
|
{
|
|
138
142
|
// the system will report the filenames with wide chars (utf16)
|
|
139
|
-
|
|
143
|
+
sass::string entry = UTF_8::convert_from_utf16(data.cFileName);
|
|
140
144
|
// check if file ending matches exactly
|
|
141
145
|
if (!ends_with(entry, ".dll")) continue;
|
|
142
146
|
// load the plugin and increase counter
|
|
@@ -154,7 +158,7 @@ namespace Sass {
|
|
|
154
158
|
}
|
|
155
159
|
}
|
|
156
160
|
}
|
|
157
|
-
catch (utf8::invalid_utf8)
|
|
161
|
+
catch (utf8::invalid_utf8&)
|
|
158
162
|
{
|
|
159
163
|
// report the error to the console (should not happen)
|
|
160
164
|
// implementors should make sure to provide valid utf8
|
data/ext/libsass/src/plugins.hpp
CHANGED
|
@@ -36,19 +36,19 @@ namespace Sass {
|
|
|
36
36
|
|
|
37
37
|
public: // methods
|
|
38
38
|
// load one specific plugin
|
|
39
|
-
bool load_plugin(const
|
|
39
|
+
bool load_plugin(const sass::string& path);
|
|
40
40
|
// load all plugins from a directory
|
|
41
|
-
size_t load_plugins(const
|
|
41
|
+
size_t load_plugins(const sass::string& path);
|
|
42
42
|
|
|
43
43
|
public: // public accessors
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
44
|
+
const sass::vector<Sass_Importer_Entry> get_headers(void) { return headers; }
|
|
45
|
+
const sass::vector<Sass_Importer_Entry> get_importers(void) { return importers; }
|
|
46
|
+
const sass::vector<Sass_Function_Entry> get_functions(void) { return functions; }
|
|
47
47
|
|
|
48
48
|
private: // private vars
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
sass::vector<Sass_Importer_Entry> headers;
|
|
50
|
+
sass::vector<Sass_Importer_Entry> importers;
|
|
51
|
+
sass::vector<Sass_Function_Entry> functions;
|
|
52
52
|
|
|
53
53
|
};
|
|
54
54
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
1
3
|
#include "sass.hpp"
|
|
4
|
+
|
|
2
5
|
#include "position.hpp"
|
|
6
|
+
#include "source.hpp"
|
|
3
7
|
|
|
4
8
|
namespace Sass {
|
|
5
9
|
|
|
@@ -15,7 +19,7 @@ namespace Sass {
|
|
|
15
19
|
*this = inc(string, string + strlen(string));
|
|
16
20
|
}
|
|
17
21
|
|
|
18
|
-
Offset::Offset(const
|
|
22
|
+
Offset::Offset(const sass::string& text)
|
|
19
23
|
: line(0), column(0)
|
|
20
24
|
{
|
|
21
25
|
*this = inc(text.c_str(), text.c_str() + text.size());
|
|
@@ -53,7 +57,7 @@ namespace Sass {
|
|
|
53
57
|
// skip over 10xxxxxx
|
|
54
58
|
// is 1st bit not set
|
|
55
59
|
if ((chr & 128) == 0) {
|
|
56
|
-
// regular
|
|
60
|
+
// regular ASCII char
|
|
57
61
|
column += 1;
|
|
58
62
|
}
|
|
59
63
|
// is 2nd bit not set
|
|
@@ -114,14 +118,11 @@ namespace Sass {
|
|
|
114
118
|
: Offset(line, column), file(file) { }
|
|
115
119
|
|
|
116
120
|
|
|
117
|
-
|
|
118
|
-
:
|
|
119
|
-
|
|
120
|
-
ParserState::ParserState(const char* path, const char* src, const Position& position, Offset offset)
|
|
121
|
-
: Position(position), path(path), src(src), offset(offset), token() { }
|
|
121
|
+
SourceSpan::SourceSpan(const char* path)
|
|
122
|
+
: source(SASS_MEMORY_NEW(SynthFile, path)), position(0, 0), offset(0, 0) { }
|
|
122
123
|
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
SourceSpan::SourceSpan(SourceDataObj source, const Offset& position, const Offset& offset)
|
|
125
|
+
: source(source), position(position), offset(offset) { }
|
|
125
126
|
|
|
126
127
|
Position Position::add(const char* begin, const char* end)
|
|
127
128
|
{
|
|
@@ -161,21 +162,4 @@ namespace Sass {
|
|
|
161
162
|
return Offset(line - off.line, off.line == line ? column - off.column : column);
|
|
162
163
|
}
|
|
163
164
|
|
|
164
|
-
/* not used anymore - remove?
|
|
165
|
-
std::ostream& operator<<(std::ostream& strm, const Offset& off)
|
|
166
|
-
{
|
|
167
|
-
if (off.line == string::npos) strm << "-1:"; else strm << off.line << ":";
|
|
168
|
-
if (off.column == string::npos) strm << "-1"; else strm << off.column;
|
|
169
|
-
return strm;
|
|
170
|
-
} */
|
|
171
|
-
|
|
172
|
-
/* not used anymore - remove?
|
|
173
|
-
std::ostream& operator<<(std::ostream& strm, const Position& pos)
|
|
174
|
-
{
|
|
175
|
-
if (pos.file != string::npos) strm << pos.file << ":";
|
|
176
|
-
if (pos.line == string::npos) strm << "-1:"; else strm << pos.line << ":";
|
|
177
|
-
if (pos.column == string::npos) strm << "-1"; else strm << pos.column;
|
|
178
|
-
return strm;
|
|
179
|
-
} */
|
|
180
|
-
|
|
181
165
|
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
#include <string>
|
|
5
5
|
#include <cstring>
|
|
6
|
-
|
|
6
|
+
#include "source_data.hpp"
|
|
7
|
+
#include "ast_fwd_decl.hpp"
|
|
7
8
|
|
|
8
9
|
namespace Sass {
|
|
9
10
|
|
|
@@ -13,7 +14,7 @@ namespace Sass {
|
|
|
13
14
|
public: // c-tor
|
|
14
15
|
Offset(const char chr);
|
|
15
16
|
Offset(const char* string);
|
|
16
|
-
Offset(const
|
|
17
|
+
Offset(const sass::string& text);
|
|
17
18
|
Offset(const size_t line, const size_t column);
|
|
18
19
|
|
|
19
20
|
// return new position, incremented by the given string
|
|
@@ -85,37 +86,59 @@ namespace Sass {
|
|
|
85
86
|
: prefix(p), begin(b), end(e) { }
|
|
86
87
|
|
|
87
88
|
size_t length() const { return end - begin; }
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
sass::string ws_before() const { return sass::string(prefix, begin); }
|
|
90
|
+
sass::string to_string() const { return sass::string(begin, end); }
|
|
91
|
+
sass::string time_wspace() const {
|
|
92
|
+
sass::string str(to_string());
|
|
93
|
+
sass::string whitespaces(" \t\f\v\n\r");
|
|
93
94
|
return str.erase(str.find_last_not_of(whitespaces)+1);
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
operator bool() { return begin && end && begin >= end; }
|
|
97
|
-
operator
|
|
98
|
+
operator sass::string() { return to_string(); }
|
|
98
99
|
|
|
99
100
|
bool operator==(Token t) { return to_string() == t.to_string(); }
|
|
100
101
|
};
|
|
101
102
|
|
|
102
|
-
class
|
|
103
|
+
class SourceSpan {
|
|
103
104
|
|
|
104
|
-
public:
|
|
105
|
-
ParserState(const char* path, const char* src = 0, const size_t file = std::string::npos);
|
|
106
|
-
ParserState(const char* path, const char* src, const Position& position, Offset offset = Offset(0, 0));
|
|
107
|
-
ParserState(const char* path, const char* src, const Token& token, const Position& position, Offset offset = Offset(0, 0));
|
|
105
|
+
public:
|
|
108
106
|
|
|
109
|
-
|
|
110
|
-
Offset off() { return *this; }
|
|
111
|
-
Position pos() { return *this; }
|
|
112
|
-
ParserState pstate() { return *this; }
|
|
107
|
+
SourceSpan(const char* path);
|
|
113
108
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
109
|
+
SourceSpan(SourceDataObj source,
|
|
110
|
+
const Offset& position = Offset(0, 0),
|
|
111
|
+
const Offset& offset = Offset(0, 0));
|
|
112
|
+
|
|
113
|
+
const char* getPath() const {
|
|
114
|
+
return source->getPath();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const char* getRawData() const {
|
|
118
|
+
return source->getRawData();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
Offset getPosition() const {
|
|
122
|
+
return position;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
size_t getLine() const {
|
|
126
|
+
return position.line + 1;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
size_t getColumn() const {
|
|
130
|
+
return position.column + 1;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
size_t getSrcId() const {
|
|
134
|
+
return source == nullptr
|
|
135
|
+
? std::string::npos
|
|
136
|
+
: source->getSrcId();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
SourceDataObj source;
|
|
140
|
+
Offset position;
|
|
117
141
|
Offset offset;
|
|
118
|
-
Token token;
|
|
119
142
|
|
|
120
143
|
};
|
|
121
144
|
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
1
3
|
#include "sass.hpp"
|
|
2
|
-
|
|
4
|
+
|
|
3
5
|
#include <iostream>
|
|
4
6
|
#include <iomanip>
|
|
5
7
|
#include "util.hpp"
|
|
8
|
+
#include "util_string.hpp"
|
|
6
9
|
#include "position.hpp"
|
|
7
10
|
#include "prelexer.hpp"
|
|
8
11
|
#include "constants.hpp"
|
|
@@ -260,7 +263,7 @@ namespace Sass {
|
|
|
260
263
|
>(src);
|
|
261
264
|
}
|
|
262
265
|
|
|
263
|
-
// Match a line comment (/.*?(?=\n|\r\n?|\Z)/.
|
|
266
|
+
// Match a line comment (/.*?(?=\n|\r\n?|\f|\Z)/.
|
|
264
267
|
const char* line_comment(const char* src)
|
|
265
268
|
{
|
|
266
269
|
return sequence<
|
|
@@ -333,7 +336,7 @@ namespace Sass {
|
|
|
333
336
|
return alternatives<
|
|
334
337
|
unicode_seq,
|
|
335
338
|
alpha,
|
|
336
|
-
|
|
339
|
+
nonascii,
|
|
337
340
|
exactly<'-'>,
|
|
338
341
|
exactly<'_'>,
|
|
339
342
|
NONASCII,
|
|
@@ -348,7 +351,7 @@ namespace Sass {
|
|
|
348
351
|
return alternatives<
|
|
349
352
|
unicode_seq,
|
|
350
353
|
alnum,
|
|
351
|
-
|
|
354
|
+
nonascii,
|
|
352
355
|
exactly<'-'>,
|
|
353
356
|
exactly<'_'>,
|
|
354
357
|
NONASCII,
|
|
@@ -382,7 +385,7 @@ namespace Sass {
|
|
|
382
385
|
{
|
|
383
386
|
return alternatives <
|
|
384
387
|
alpha,
|
|
385
|
-
|
|
388
|
+
nonascii,
|
|
386
389
|
escape_seq,
|
|
387
390
|
exactly<'_'>
|
|
388
391
|
>(src);
|
|
@@ -392,7 +395,7 @@ namespace Sass {
|
|
|
392
395
|
{
|
|
393
396
|
return alternatives <
|
|
394
397
|
alnum,
|
|
395
|
-
|
|
398
|
+
nonascii,
|
|
396
399
|
escape_seq,
|
|
397
400
|
exactly<'_'>
|
|
398
401
|
>(src);
|
|
@@ -1260,6 +1263,9 @@ namespace Sass {
|
|
|
1260
1263
|
const char* kwd_lte(const char* src) {
|
|
1261
1264
|
return exactly<lte>(src);
|
|
1262
1265
|
}
|
|
1266
|
+
const char* kwd_using(const char* src) {
|
|
1267
|
+
return keyword<using_kwd>(src);
|
|
1268
|
+
}
|
|
1263
1269
|
|
|
1264
1270
|
// match specific IE syntax
|
|
1265
1271
|
const char* ie_progid(const char* src) {
|
|
@@ -1394,7 +1400,7 @@ namespace Sass {
|
|
|
1394
1400
|
}*/
|
|
1395
1401
|
|
|
1396
1402
|
const char* H(const char* src) {
|
|
1397
|
-
return
|
|
1403
|
+
return Util::ascii_isxdigit(static_cast<unsigned char>(*src)) ? src+1 : 0;
|
|
1398
1404
|
}
|
|
1399
1405
|
|
|
1400
1406
|
const char* W(const char* src) {
|
|
@@ -1606,7 +1612,7 @@ namespace Sass {
|
|
|
1606
1612
|
>(src);
|
|
1607
1613
|
}
|
|
1608
1614
|
|
|
1609
|
-
extern const char css_variable_url_top_level_negates[] = "()[]{}\"'
|
|
1615
|
+
extern const char css_variable_url_top_level_negates[] = "()[]{}\"'#/;";
|
|
1610
1616
|
const char* css_variable_top_level_value(const char* src) {
|
|
1611
1617
|
return sequence<
|
|
1612
1618
|
alternatives<
|