sassc 2.0.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -90,7 +90,7 @@ struct Sass_Context : Sass_Options
|
|
90
90
|
char* error_file;
|
91
91
|
size_t error_line;
|
92
92
|
size_t error_column;
|
93
|
-
|
93
|
+
char* error_src;
|
94
94
|
|
95
95
|
// report imported files
|
96
96
|
char** included_files;
|
@@ -126,4 +126,4 @@ struct Sass_Compiler {
|
|
126
126
|
Sass::Block_Obj root;
|
127
127
|
};
|
128
128
|
|
129
|
-
#endif
|
129
|
+
#endif
|
@@ -1,4 +1,7 @@
|
|
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 <cstring>
|
3
6
|
#include "util.hpp"
|
4
7
|
#include "context.hpp"
|
@@ -98,7 +101,7 @@ extern "C" {
|
|
98
101
|
}
|
99
102
|
|
100
103
|
// Creator for a single import entry returned by the custom importer inside the list
|
101
|
-
// We take ownership of the memory for source and srcmap (freed when context is
|
104
|
+
// We take ownership of the memory for source and srcmap (freed when context is destroyed)
|
102
105
|
Sass_Import_Entry ADDCALL sass_make_import(const char* imp_path, const char* abs_path, char* source, char* srcmap)
|
103
106
|
{
|
104
107
|
Sass_Import* v = (Sass_Import*) calloc(1, sizeof(Sass_Import));
|
@@ -167,21 +170,21 @@ extern "C" {
|
|
167
170
|
|
168
171
|
// Getters and Setters for environments (lexical, local and global)
|
169
172
|
union Sass_Value* ADDCALL sass_env_get_lexical (Sass_Env_Frame env, const char* name) {
|
170
|
-
|
173
|
+
Expression* ex = Cast<Expression>((*env->frame)[name]);
|
171
174
|
return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
|
172
175
|
}
|
173
176
|
void ADDCALL sass_env_set_lexical (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
|
174
177
|
(*env->frame)[name] = sass_value_to_ast_node(val);
|
175
178
|
}
|
176
179
|
union Sass_Value* ADDCALL sass_env_get_local (Sass_Env_Frame env, const char* name) {
|
177
|
-
|
180
|
+
Expression* ex = Cast<Expression>(env->frame->get_local(name));
|
178
181
|
return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
|
179
182
|
}
|
180
183
|
void ADDCALL sass_env_set_local (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
|
181
184
|
env->frame->set_local(name, sass_value_to_ast_node(val));
|
182
185
|
}
|
183
186
|
union Sass_Value* ADDCALL sass_env_get_global (Sass_Env_Frame env, const char* name) {
|
184
|
-
|
187
|
+
Expression* ex = Cast<Expression>(env->frame->get_global(name));
|
185
188
|
return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
|
186
189
|
}
|
187
190
|
void ADDCALL sass_env_set_global (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
|
@@ -1,9 +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 <cstdlib>
|
3
6
|
#include <cstring>
|
4
7
|
#include "util.hpp"
|
5
8
|
#include "eval.hpp"
|
6
|
-
#include "values.hpp"
|
7
9
|
#include "operators.hpp"
|
8
10
|
#include "sass/values.h"
|
9
11
|
#include "sass_values.hpp"
|
@@ -281,21 +283,21 @@ extern "C" {
|
|
281
283
|
|
282
284
|
union Sass_Value* ADDCALL sass_value_stringify (const union Sass_Value* v, bool compressed, int precision)
|
283
285
|
{
|
284
|
-
|
286
|
+
ValueObj val = sass_value_to_ast_node(v);
|
285
287
|
Sass_Inspect_Options options(compressed ? COMPRESSED : NESTED, precision);
|
286
|
-
|
288
|
+
sass::string str(val->to_string(options));
|
287
289
|
return sass_make_qstring(str.c_str());
|
288
290
|
}
|
289
291
|
|
290
292
|
union Sass_Value* ADDCALL sass_value_op (enum Sass_OP op, const union Sass_Value* a, const union Sass_Value* b)
|
291
293
|
{
|
292
294
|
|
293
|
-
Sass::
|
295
|
+
Sass::ValueObj rv;
|
294
296
|
|
295
297
|
try {
|
296
298
|
|
297
|
-
|
298
|
-
|
299
|
+
ValueObj lhs = sass_value_to_ast_node(a);
|
300
|
+
ValueObj rhs = sass_value_to_ast_node(b);
|
299
301
|
struct Sass_Inspect_Options options(NESTED, 5);
|
300
302
|
|
301
303
|
// see if it's a relational expression
|
@@ -312,44 +314,47 @@ extern "C" {
|
|
312
314
|
}
|
313
315
|
|
314
316
|
if (sass_value_is_number(a) && sass_value_is_number(b)) {
|
315
|
-
|
316
|
-
|
317
|
+
const Number* l_n = Cast<Number>(lhs);
|
318
|
+
const Number* r_n = Cast<Number>(rhs);
|
317
319
|
rv = Operators::op_numbers(op, *l_n, *r_n, options, l_n->pstate());
|
318
320
|
}
|
319
321
|
else if (sass_value_is_number(a) && sass_value_is_color(a)) {
|
320
|
-
|
321
|
-
|
322
|
+
const Number* l_n = Cast<Number>(lhs);
|
323
|
+
// Direct HSLA operations are not supported
|
324
|
+
// All color maths will be deprecated anyway
|
325
|
+
Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
|
322
326
|
rv = Operators::op_number_color(op, *l_n, *r_c, options, l_n->pstate());
|
323
327
|
}
|
324
328
|
else if (sass_value_is_color(a) && sass_value_is_number(b)) {
|
325
|
-
|
326
|
-
|
329
|
+
// Direct HSLA operations are not supported
|
330
|
+
// All color maths will be deprecated anyway
|
331
|
+
Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
|
332
|
+
const Number* r_n = Cast<Number>(rhs);
|
327
333
|
rv = Operators::op_color_number(op, *l_c, *r_n, options, l_c->pstate());
|
328
334
|
}
|
329
335
|
else if (sass_value_is_color(a) && sass_value_is_color(b)) {
|
330
|
-
|
331
|
-
|
336
|
+
// Direct HSLA operations are not supported
|
337
|
+
// All color maths will be deprecated anyway
|
338
|
+
Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
|
339
|
+
Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
|
332
340
|
rv = Operators::op_colors(op, *l_c, *r_c, options, l_c->pstate());
|
333
341
|
}
|
334
342
|
else /* convert other stuff to string and apply operation */ {
|
335
|
-
|
336
|
-
Value_Ptr r_v = Cast<Value>(rhs);
|
337
|
-
rv = Operators::op_strings(op, *l_v, *r_v, options, l_v->pstate());
|
343
|
+
rv = Operators::op_strings(op, *lhs, *rhs, options, lhs->pstate());
|
338
344
|
}
|
339
345
|
|
340
|
-
// ToDo: maybe we should
|
346
|
+
// ToDo: maybe we should return null value?
|
341
347
|
if (!rv) return sass_make_error("invalid return value");
|
342
348
|
|
343
349
|
// convert result back to ast node
|
344
|
-
return ast_node_to_sass_value(rv);
|
345
|
-
|
350
|
+
return ast_node_to_sass_value(rv.ptr());
|
346
351
|
}
|
347
352
|
|
348
353
|
// simply pass the error message back to the caller for now
|
349
354
|
catch (Exception::InvalidSass& e) { return sass_make_error(e.what()); }
|
350
355
|
catch (std::bad_alloc&) { return sass_make_error("memory exhausted"); }
|
351
356
|
catch (std::exception& e) { return sass_make_error(e.what()); }
|
352
|
-
catch (
|
357
|
+
catch (sass::string& e) { return sass_make_error(e.c_str()); }
|
353
358
|
catch (const char* e) { return sass_make_error(e); }
|
354
359
|
catch (...) { return sass_make_error("unknown"); }
|
355
360
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#ifndef SASS_SETTINGS_H
|
2
|
+
#define SASS_SETTINGS_H
|
3
|
+
|
4
|
+
// Global compile time settings should go here
|
5
|
+
|
6
|
+
// When enabled we use our custom memory pool allocator
|
7
|
+
// With intense workloads this can double the performance
|
8
|
+
// Max memory usage mostly only grows by a slight amount
|
9
|
+
// #define SASS_CUSTOM_ALLOCATOR
|
10
|
+
|
11
|
+
// How many buckets should we have for the free-list
|
12
|
+
// Determines when allocations go directly to malloc/free
|
13
|
+
// For maximum size of managed items multiply by alignment
|
14
|
+
#define SassAllocatorBuckets 512
|
15
|
+
|
16
|
+
// The size of the memory pool arenas in bytes.
|
17
|
+
#define SassAllocatorArenaSize (1024 * 256)
|
18
|
+
|
19
|
+
#endif
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <string.h>
|
3
|
+
#include "source.hpp"
|
4
|
+
#include "utf8/checked.h"
|
5
|
+
#include "position.hpp"
|
6
|
+
|
7
|
+
namespace Sass {
|
8
|
+
|
9
|
+
SourceData::SourceData()
|
10
|
+
: SharedObj()
|
11
|
+
{
|
12
|
+
}
|
13
|
+
|
14
|
+
SourceFile::SourceFile(
|
15
|
+
const char* path,
|
16
|
+
const char* data,
|
17
|
+
size_t srcid) :
|
18
|
+
SourceData(),
|
19
|
+
path(sass_copy_c_string(path)),
|
20
|
+
data(sass_copy_c_string(data)),
|
21
|
+
length(0),
|
22
|
+
srcid(srcid)
|
23
|
+
{
|
24
|
+
length = strlen(data);
|
25
|
+
}
|
26
|
+
|
27
|
+
SourceFile::~SourceFile() {
|
28
|
+
sass_free_memory(path);
|
29
|
+
sass_free_memory(data);
|
30
|
+
}
|
31
|
+
|
32
|
+
const char* SourceFile::end() const
|
33
|
+
{
|
34
|
+
return data + length;
|
35
|
+
}
|
36
|
+
|
37
|
+
const char* SourceFile::begin() const
|
38
|
+
{
|
39
|
+
return data;
|
40
|
+
}
|
41
|
+
|
42
|
+
const char* SourceFile::getRawData() const
|
43
|
+
{
|
44
|
+
return data;
|
45
|
+
}
|
46
|
+
|
47
|
+
SourceSpan SourceFile::getSourceSpan()
|
48
|
+
{
|
49
|
+
return SourceSpan(this);
|
50
|
+
}
|
51
|
+
|
52
|
+
ItplFile::ItplFile(const char* data, const SourceSpan& pstate) :
|
53
|
+
SourceFile(pstate.getPath(),
|
54
|
+
data, pstate.getSrcId()),
|
55
|
+
pstate(pstate)
|
56
|
+
{}
|
57
|
+
|
58
|
+
const char* ItplFile::getRawData() const
|
59
|
+
{
|
60
|
+
return pstate.getRawData();
|
61
|
+
}
|
62
|
+
|
63
|
+
SourceSpan ItplFile::getSourceSpan()
|
64
|
+
{
|
65
|
+
return SourceSpan(pstate);
|
66
|
+
}
|
67
|
+
|
68
|
+
}
|
69
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#ifndef SASS_SOURCE_H
|
2
|
+
#define SASS_SOURCE_H
|
3
|
+
|
4
|
+
#include "sass.hpp"
|
5
|
+
#include "memory.hpp"
|
6
|
+
#include "position.hpp"
|
7
|
+
#include "source_data.hpp"
|
8
|
+
|
9
|
+
namespace Sass {
|
10
|
+
|
11
|
+
class SourceFile :
|
12
|
+
public SourceData {
|
13
|
+
protected:
|
14
|
+
char* path;
|
15
|
+
char* data;
|
16
|
+
size_t length;
|
17
|
+
size_t srcid;
|
18
|
+
public:
|
19
|
+
|
20
|
+
SourceFile(
|
21
|
+
const char* path,
|
22
|
+
const char* data,
|
23
|
+
size_t srcid);
|
24
|
+
|
25
|
+
~SourceFile();
|
26
|
+
|
27
|
+
const char* end() const override final;
|
28
|
+
const char* begin() const override final;
|
29
|
+
virtual const char* getRawData() const override;
|
30
|
+
virtual SourceSpan getSourceSpan() override;
|
31
|
+
|
32
|
+
size_t size() const override final {
|
33
|
+
return length;
|
34
|
+
}
|
35
|
+
|
36
|
+
virtual const char* getPath() const override {
|
37
|
+
return path;
|
38
|
+
}
|
39
|
+
|
40
|
+
virtual size_t getSrcId() const override {
|
41
|
+
return srcid;
|
42
|
+
}
|
43
|
+
|
44
|
+
};
|
45
|
+
|
46
|
+
class SynthFile :
|
47
|
+
public SourceData {
|
48
|
+
protected:
|
49
|
+
const char* path;
|
50
|
+
public:
|
51
|
+
|
52
|
+
SynthFile(
|
53
|
+
const char* path) :
|
54
|
+
path(path)
|
55
|
+
{}
|
56
|
+
|
57
|
+
~SynthFile() {}
|
58
|
+
|
59
|
+
const char* end() const override final { return nullptr; }
|
60
|
+
const char* begin() const override final { return nullptr; };
|
61
|
+
virtual const char* getRawData() const override { return nullptr; };
|
62
|
+
virtual SourceSpan getSourceSpan() override { return SourceSpan(path); };
|
63
|
+
|
64
|
+
size_t size() const override final {
|
65
|
+
return 0;
|
66
|
+
}
|
67
|
+
|
68
|
+
virtual const char* getPath() const override {
|
69
|
+
return path;
|
70
|
+
}
|
71
|
+
|
72
|
+
virtual size_t getSrcId() const override {
|
73
|
+
return std::string::npos;
|
74
|
+
}
|
75
|
+
|
76
|
+
};
|
77
|
+
|
78
|
+
|
79
|
+
class ItplFile :
|
80
|
+
public SourceFile {
|
81
|
+
private:
|
82
|
+
SourceSpan pstate;
|
83
|
+
public:
|
84
|
+
|
85
|
+
ItplFile(const char* data,
|
86
|
+
const SourceSpan& pstate);
|
87
|
+
|
88
|
+
// Offset getPosition() const override final;
|
89
|
+
const char* getRawData() const override final;
|
90
|
+
SourceSpan getSourceSpan() override final;
|
91
|
+
};
|
92
|
+
|
93
|
+
}
|
94
|
+
|
95
|
+
#endif
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#ifndef SASS_SOURCE_DATA_H
|
2
|
+
#define SASS_SOURCE_DATA_H
|
3
|
+
|
4
|
+
#include "sass.hpp"
|
5
|
+
#include "memory.hpp"
|
6
|
+
|
7
|
+
namespace Sass {
|
8
|
+
|
9
|
+
class SourceSpan;
|
10
|
+
|
11
|
+
class SourceData :
|
12
|
+
public SharedObj {
|
13
|
+
public:
|
14
|
+
SourceData();
|
15
|
+
virtual size_t size() const = 0;
|
16
|
+
virtual size_t getSrcId() const = 0;
|
17
|
+
virtual const char* end() const = 0;
|
18
|
+
virtual const char* begin() const = 0;
|
19
|
+
virtual const char* getPath() const = 0;
|
20
|
+
// virtual Offset getPosition() const = 0;
|
21
|
+
virtual const char* getRawData() const = 0;
|
22
|
+
virtual SourceSpan getSourceSpan() = 0;
|
23
|
+
|
24
|
+
sass::string to_string() const override {
|
25
|
+
return sass::string{ begin(), end() };
|
26
|
+
}
|
27
|
+
~SourceData() {}
|
28
|
+
};
|
29
|
+
|
30
|
+
}
|
31
|
+
|
32
|
+
#endif
|
@@ -1,4 +1,7 @@
|
|
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 <string>
|
3
6
|
#include <sstream>
|
4
7
|
#include <iostream>
|
@@ -12,13 +15,13 @@
|
|
12
15
|
|
13
16
|
namespace Sass {
|
14
17
|
SourceMap::SourceMap() : current_position(0, 0, 0), file("stdin") { }
|
15
|
-
SourceMap::SourceMap(const
|
18
|
+
SourceMap::SourceMap(const sass::string& file) : current_position(0, 0, 0), file(file) { }
|
16
19
|
|
17
|
-
|
20
|
+
sass::string SourceMap::render_srcmap(Context &ctx) {
|
18
21
|
|
19
22
|
const bool include_sources = ctx.c_options.source_map_contents;
|
20
|
-
const
|
21
|
-
const
|
23
|
+
const sass::vector<sass::string> links = ctx.srcmap_links;
|
24
|
+
const sass::vector<Resource>& sources(ctx.resources);
|
22
25
|
|
23
26
|
JsonNode* json_srcmap = json_mkobject();
|
24
27
|
|
@@ -36,7 +39,7 @@ namespace Sass {
|
|
36
39
|
|
37
40
|
JsonNode *json_sources = json_mkarray();
|
38
41
|
for (size_t i = 0; i < source_index.size(); ++i) {
|
39
|
-
|
42
|
+
sass::string source(links[source_index[i]]);
|
40
43
|
if (ctx.c_options.source_map_file_urls) {
|
41
44
|
source = File::rel2abs(source);
|
42
45
|
// check for windows abs path
|
@@ -69,19 +72,19 @@ namespace Sass {
|
|
69
72
|
// no problem as we do not alter any identifiers
|
70
73
|
json_append_member(json_srcmap, "names", json_names);
|
71
74
|
|
72
|
-
|
75
|
+
sass::string mappings = serialize_mappings();
|
73
76
|
JsonNode *json_mappings = json_mkstring(mappings.c_str());
|
74
77
|
json_append_member(json_srcmap, "mappings", json_mappings);
|
75
78
|
|
76
79
|
char *str = json_stringify(json_srcmap, "\t");
|
77
|
-
|
80
|
+
sass::string result = sass::string(str);
|
78
81
|
free(str);
|
79
82
|
json_delete(json_srcmap);
|
80
83
|
return result;
|
81
84
|
}
|
82
85
|
|
83
|
-
|
84
|
-
|
86
|
+
sass::string SourceMap::serialize_mappings() {
|
87
|
+
sass::string result = "";
|
85
88
|
|
86
89
|
size_t previous_generated_line = 0;
|
87
90
|
size_t previous_generated_column = 0;
|
@@ -98,7 +101,7 @@ namespace Sass {
|
|
98
101
|
if (generated_line != previous_generated_line) {
|
99
102
|
previous_generated_column = 0;
|
100
103
|
if (generated_line > previous_generated_line) {
|
101
|
-
result +=
|
104
|
+
result += sass::string(generated_line - previous_generated_line, ';');
|
102
105
|
previous_generated_line = generated_line;
|
103
106
|
}
|
104
107
|
}
|
@@ -170,25 +173,29 @@ namespace Sass {
|
|
170
173
|
current_position += offset;
|
171
174
|
}
|
172
175
|
|
173
|
-
void SourceMap::add_open_mapping(const
|
176
|
+
void SourceMap::add_open_mapping(const AST_Node* node)
|
174
177
|
{
|
175
|
-
|
178
|
+
const SourceSpan& span(node->pstate());
|
179
|
+
Position from(span.getSrcId(), span.position);
|
180
|
+
mappings.push_back(Mapping(from, current_position));
|
176
181
|
}
|
177
182
|
|
178
|
-
void SourceMap::add_close_mapping(const
|
183
|
+
void SourceMap::add_close_mapping(const AST_Node* node)
|
179
184
|
{
|
180
|
-
|
185
|
+
const SourceSpan& span(node->pstate());
|
186
|
+
Position to(span.getSrcId(), span.position + span.offset);
|
187
|
+
mappings.push_back(Mapping(to, current_position));
|
181
188
|
}
|
182
189
|
|
183
|
-
|
190
|
+
SourceSpan SourceMap::remap(const SourceSpan& pstate) {
|
184
191
|
for (size_t i = 0; i < mappings.size(); ++i) {
|
185
192
|
if (
|
186
|
-
mappings[i].generated_position.file == pstate.
|
187
|
-
mappings[i].generated_position.line == pstate.line &&
|
188
|
-
mappings[i].generated_position.column == pstate.column
|
189
|
-
) return
|
193
|
+
mappings[i].generated_position.file == pstate.getSrcId() &&
|
194
|
+
mappings[i].generated_position.line == pstate.position.line &&
|
195
|
+
mappings[i].generated_position.column == pstate.position.column
|
196
|
+
) return SourceSpan(pstate.source, mappings[i].original_position, pstate.offset);
|
190
197
|
}
|
191
|
-
return
|
198
|
+
return SourceSpan(pstate.source, Position(-1, -1, -1), Offset(0, 0));
|
192
199
|
|
193
200
|
}
|
194
201
|
|