sassc 1.8.1 → 1.8.2
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/README.md +3 -1
- data/ext/libsass/Makefile +10 -6
- data/ext/libsass/Readme.md +4 -4
- data/ext/libsass/appveyor.yml +16 -1
- data/ext/libsass/docs/README.md +1 -1
- data/ext/libsass/docs/api-context-example.md +1 -1
- data/ext/libsass/docs/api-context.md +1 -1
- data/ext/libsass/docs/api-doc.md +1 -1
- data/ext/libsass/docs/api-function-example.md +12 -3
- data/ext/libsass/docs/api-function-internal.md +4 -4
- data/ext/libsass/docs/api-function.md +15 -13
- data/ext/libsass/docs/api-importer-internal.md +9 -4
- data/ext/libsass/docs/api-value.md +1 -1
- data/ext/libsass/docs/build-shared-library.md +3 -3
- data/ext/libsass/docs/custom-functions-internal.md +1 -1
- data/ext/libsass/docs/{plugins.go → plugins.md} +0 -0
- data/ext/libsass/script/ci-build-libsass +25 -36
- data/ext/libsass/script/ci-install-deps +3 -8
- data/ext/libsass/script/ci-report-coverage +17 -13
- data/ext/libsass/src/ast.cpp +102 -7
- data/ext/libsass/src/ast.hpp +53 -27
- data/ext/libsass/src/ast_def_macros.hpp +8 -0
- data/ext/libsass/src/ast_fwd_decl.hpp +3 -2
- data/ext/libsass/src/backtrace.hpp +1 -1
- data/ext/libsass/src/bind.cpp +28 -17
- data/ext/libsass/src/bind.hpp +1 -1
- data/ext/libsass/src/context.cpp +441 -184
- data/ext/libsass/src/context.hpp +79 -82
- data/ext/libsass/src/debugger.hpp +3 -1
- data/ext/libsass/src/emitter.cpp +18 -17
- data/ext/libsass/src/emitter.hpp +5 -2
- data/ext/libsass/src/error_handling.cpp +78 -7
- data/ext/libsass/src/error_handling.hpp +50 -9
- data/ext/libsass/src/eval.cpp +100 -36
- data/ext/libsass/src/eval.hpp +5 -5
- data/ext/libsass/src/expand.cpp +32 -3
- data/ext/libsass/src/extend.cpp +1 -1
- data/ext/libsass/src/file.cpp +39 -27
- data/ext/libsass/src/file.hpp +67 -13
- data/ext/libsass/src/functions.cpp +39 -32
- data/ext/libsass/src/inspect.cpp +21 -21
- data/ext/libsass/src/json.cpp +1 -1
- data/ext/libsass/src/lexer.hpp +33 -4
- data/ext/libsass/src/output.cpp +11 -11
- data/ext/libsass/src/parser.cpp +28 -130
- data/ext/libsass/src/parser.hpp +0 -4
- data/ext/libsass/src/prelexer.cpp +8 -5
- data/ext/libsass/src/prelexer.hpp +1 -3
- data/ext/libsass/src/sass_context.cpp +52 -241
- data/ext/libsass/src/sass_context.hpp +156 -0
- data/ext/libsass/src/sass_functions.cpp +1 -26
- data/ext/libsass/src/sass_functions.hpp +32 -0
- data/ext/libsass/src/sass_interface.cpp +14 -48
- data/ext/libsass/src/sass_values.cpp +3 -77
- data/ext/libsass/src/sass_values.hpp +81 -0
- data/ext/libsass/src/source_map.cpp +7 -7
- data/ext/libsass/src/source_map.hpp +1 -4
- data/ext/libsass/src/to_string.cpp +4 -3
- data/ext/libsass/src/to_string.hpp +2 -1
- data/ext/libsass/src/util.cpp +34 -16
- data/ext/libsass/src/util.hpp +10 -8
- data/lib/sassc/version.rb +1 -1
- data/lib/tasks/libsass.rb +1 -1
- data/test/custom_importer_test.rb +6 -4
- data/test/engine_test.rb +5 -3
- data/test/functions_test.rb +1 -0
- data/test/native_test.rb +1 -1
- metadata +6 -4
- data/ext/libsass/script/coveralls-debug +0 -32
@@ -2,17 +2,11 @@
|
|
2
2
|
#include "util.hpp"
|
3
3
|
#include "context.hpp"
|
4
4
|
#include "sass/functions.h"
|
5
|
+
#include "sass_functions.hpp"
|
5
6
|
|
6
7
|
extern "C" {
|
7
8
|
using namespace Sass;
|
8
9
|
|
9
|
-
// Struct to hold custom function callback
|
10
|
-
struct Sass_Function {
|
11
|
-
const char* signature;
|
12
|
-
Sass_Function_Fn function;
|
13
|
-
void* cookie;
|
14
|
-
};
|
15
|
-
|
16
10
|
Sass_Function_List ADDCALL sass_make_function_list(size_t length)
|
17
11
|
{
|
18
12
|
return (Sass_Function_List) calloc(length + 1, sizeof(Sass_Function_Entry));
|
@@ -36,25 +30,6 @@ extern "C" {
|
|
36
30
|
Sass_Function_Fn ADDCALL sass_function_get_function(Sass_Function_Entry cb) { return cb->function; }
|
37
31
|
void* ADDCALL sass_function_get_cookie(Sass_Function_Entry cb) { return cb->cookie; }
|
38
32
|
|
39
|
-
// External import entry
|
40
|
-
struct Sass_Import {
|
41
|
-
char* imp_path; // path as found in the import statement
|
42
|
-
char *abs_path; // path after importer has resolved it
|
43
|
-
char* source;
|
44
|
-
char* srcmap;
|
45
|
-
// error handling
|
46
|
-
char* error;
|
47
|
-
size_t line;
|
48
|
-
size_t column;
|
49
|
-
};
|
50
|
-
|
51
|
-
// Struct to hold importer callback
|
52
|
-
struct Sass_Importer {
|
53
|
-
Sass_Importer_Fn importer;
|
54
|
-
double priority;
|
55
|
-
void* cookie;
|
56
|
-
};
|
57
|
-
|
58
33
|
Sass_Importer_Entry ADDCALL sass_make_importer(Sass_Importer_Fn importer, double priority, void* cookie)
|
59
34
|
{
|
60
35
|
Sass_Importer_Entry cb = (Sass_Importer_Entry) calloc(1, sizeof(Sass_Importer));
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#ifndef SASS_SASS_FUNCTIONS_H
|
2
|
+
#define SASS_SASS_FUNCTIONS_H
|
3
|
+
|
4
|
+
#include "sass.h"
|
5
|
+
|
6
|
+
// Struct to hold custom function callback
|
7
|
+
struct Sass_Function {
|
8
|
+
const char* signature;
|
9
|
+
Sass_Function_Fn function;
|
10
|
+
void* cookie;
|
11
|
+
};
|
12
|
+
|
13
|
+
// External import entry
|
14
|
+
struct Sass_Import {
|
15
|
+
char* imp_path; // path as found in the import statement
|
16
|
+
char *abs_path; // path after importer has resolved it
|
17
|
+
char* source;
|
18
|
+
char* srcmap;
|
19
|
+
// error handling
|
20
|
+
char* error;
|
21
|
+
size_t line;
|
22
|
+
size_t column;
|
23
|
+
};
|
24
|
+
|
25
|
+
// Struct to hold importer callback
|
26
|
+
struct Sass_Importer {
|
27
|
+
Sass_Importer_Fn importer;
|
28
|
+
double priority;
|
29
|
+
void* cookie;
|
30
|
+
};
|
31
|
+
|
32
|
+
#endif
|
@@ -69,26 +69,8 @@ extern "C" {
|
|
69
69
|
else {
|
70
70
|
output_path = c_ctx->output_path;
|
71
71
|
}
|
72
|
-
|
73
|
-
|
74
|
-
.output_path(output_path)
|
75
|
-
.output_style((Output_Style) c_ctx->options.output_style)
|
76
|
-
.is_indented_syntax_src(c_ctx->options.is_indented_syntax_src)
|
77
|
-
.source_comments(c_ctx->options.source_comments)
|
78
|
-
.source_map_file(safe_str(c_ctx->options.source_map_file))
|
79
|
-
.source_map_root(safe_str(c_ctx->options.source_map_root))
|
80
|
-
.source_map_embed(c_ctx->options.source_map_embed)
|
81
|
-
.source_map_contents(c_ctx->options.source_map_contents)
|
82
|
-
.omit_source_map_url(c_ctx->options.omit_source_map_url)
|
83
|
-
.include_paths_c_str(c_ctx->options.include_paths)
|
84
|
-
.plugin_paths_c_str(c_ctx->options.plugin_paths)
|
85
|
-
// .include_paths_array(0)
|
86
|
-
// .plugin_paths_array(0)
|
87
|
-
.include_paths(std::vector<std::string>())
|
88
|
-
.plugin_paths(std::vector<std::string>())
|
89
|
-
.precision(c_ctx->options.precision ? c_ctx->options.precision : 5)
|
90
|
-
.indent(c_ctx->options.indent ? c_ctx->options.indent : " ")
|
91
|
-
.linefeed(c_ctx->options.linefeed ? c_ctx->options.linefeed : LFEED)
|
72
|
+
Data_Context cpp_ctx(
|
73
|
+
(Sass_Data_Context*) 0
|
92
74
|
);
|
93
75
|
if (c_ctx->c_functions) {
|
94
76
|
Sass_Function_List this_func_data = c_ctx->c_functions;
|
@@ -97,17 +79,18 @@ extern "C" {
|
|
97
79
|
++this_func_data;
|
98
80
|
}
|
99
81
|
}
|
100
|
-
|
101
|
-
c_ctx->
|
82
|
+
Block* root = cpp_ctx.parse();
|
83
|
+
c_ctx->output_string = cpp_ctx.render(root);
|
84
|
+
c_ctx->source_map_string = cpp_ctx.render_srcmap();
|
102
85
|
c_ctx->error_message = 0;
|
103
86
|
c_ctx->error_status = 0;
|
104
87
|
|
105
88
|
if (copy_strings(cpp_ctx.get_included_files(true), &c_ctx->included_files, 1) == NULL)
|
106
89
|
throw(std::bad_alloc());
|
107
90
|
}
|
108
|
-
catch (
|
91
|
+
catch (Exception::InvalidSass& e) {
|
109
92
|
std::stringstream msg_stream;
|
110
|
-
msg_stream << e.pstate.path << ":" << e.pstate.line << ": " << e.
|
93
|
+
msg_stream << e.pstate.path << ":" << e.pstate.line << ": " << e.what() << std::endl;
|
111
94
|
c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
|
112
95
|
c_ctx->error_status = 1;
|
113
96
|
c_ctx->output_string = 0;
|
@@ -162,26 +145,8 @@ extern "C" {
|
|
162
145
|
else {
|
163
146
|
output_path = c_ctx->output_path;
|
164
147
|
}
|
165
|
-
|
166
|
-
|
167
|
-
.output_path(output_path)
|
168
|
-
.output_style((Output_Style) c_ctx->options.output_style)
|
169
|
-
.is_indented_syntax_src(c_ctx->options.is_indented_syntax_src)
|
170
|
-
.source_comments(c_ctx->options.source_comments)
|
171
|
-
.source_map_file(safe_str(c_ctx->options.source_map_file))
|
172
|
-
.source_map_root(safe_str(c_ctx->options.source_map_root))
|
173
|
-
.source_map_embed(c_ctx->options.source_map_embed)
|
174
|
-
.source_map_contents(c_ctx->options.source_map_contents)
|
175
|
-
.omit_source_map_url(c_ctx->options.omit_source_map_url)
|
176
|
-
.include_paths_c_str(c_ctx->options.include_paths)
|
177
|
-
.plugin_paths_c_str(c_ctx->options.plugin_paths)
|
178
|
-
// .include_paths_array(0)
|
179
|
-
// .plugin_paths_array(0)
|
180
|
-
.include_paths(std::vector<std::string>())
|
181
|
-
.plugin_paths(std::vector<std::string>())
|
182
|
-
.precision(c_ctx->options.precision ? c_ctx->options.precision : 5)
|
183
|
-
.indent(c_ctx->options.indent ? c_ctx->options.indent : " ")
|
184
|
-
.linefeed(c_ctx->options.linefeed ? c_ctx->options.linefeed : LFEED)
|
148
|
+
File_Context cpp_ctx(
|
149
|
+
(Sass_File_Context*) 0
|
185
150
|
);
|
186
151
|
if (c_ctx->c_functions) {
|
187
152
|
Sass_Function_List this_func_data = c_ctx->c_functions;
|
@@ -190,17 +155,18 @@ extern "C" {
|
|
190
155
|
++this_func_data;
|
191
156
|
}
|
192
157
|
}
|
193
|
-
|
194
|
-
c_ctx->
|
158
|
+
Block* root = cpp_ctx.parse();
|
159
|
+
c_ctx->output_string = cpp_ctx.render(root);
|
160
|
+
c_ctx->source_map_string = cpp_ctx.render_srcmap();
|
195
161
|
c_ctx->error_message = 0;
|
196
162
|
c_ctx->error_status = 0;
|
197
163
|
|
198
164
|
if (copy_strings(cpp_ctx.get_included_files(false), &c_ctx->included_files) == NULL)
|
199
165
|
throw(std::bad_alloc());
|
200
166
|
}
|
201
|
-
catch (
|
167
|
+
catch (Exception::InvalidSass& e) {
|
202
168
|
std::stringstream msg_stream;
|
203
|
-
msg_stream << e.pstate.path << ":" << e.pstate.line << ": " << e.
|
169
|
+
msg_stream << e.pstate.path << ":" << e.pstate.line << ": " << e.what() << std::endl;
|
204
170
|
c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
|
205
171
|
c_ctx->error_status = 1;
|
206
172
|
c_ctx->output_string = 0;
|
@@ -4,85 +4,11 @@
|
|
4
4
|
#include "eval.hpp"
|
5
5
|
#include "values.hpp"
|
6
6
|
#include "sass/values.h"
|
7
|
+
#include "sass_values.hpp"
|
7
8
|
|
8
9
|
extern "C" {
|
9
10
|
using namespace Sass;
|
10
11
|
|
11
|
-
struct Sass_Unknown {
|
12
|
-
enum Sass_Tag tag;
|
13
|
-
};
|
14
|
-
|
15
|
-
struct Sass_Boolean {
|
16
|
-
enum Sass_Tag tag;
|
17
|
-
bool value;
|
18
|
-
};
|
19
|
-
|
20
|
-
struct Sass_Number {
|
21
|
-
enum Sass_Tag tag;
|
22
|
-
double value;
|
23
|
-
char* unit;
|
24
|
-
};
|
25
|
-
|
26
|
-
struct Sass_Color {
|
27
|
-
enum Sass_Tag tag;
|
28
|
-
double r;
|
29
|
-
double g;
|
30
|
-
double b;
|
31
|
-
double a;
|
32
|
-
};
|
33
|
-
|
34
|
-
struct Sass_String {
|
35
|
-
enum Sass_Tag tag;
|
36
|
-
bool quoted;
|
37
|
-
char* value;
|
38
|
-
};
|
39
|
-
|
40
|
-
struct Sass_List {
|
41
|
-
enum Sass_Tag tag;
|
42
|
-
enum Sass_Separator separator;
|
43
|
-
size_t length;
|
44
|
-
// null terminated "array"
|
45
|
-
union Sass_Value** values;
|
46
|
-
};
|
47
|
-
|
48
|
-
struct Sass_Map {
|
49
|
-
enum Sass_Tag tag;
|
50
|
-
size_t length;
|
51
|
-
struct Sass_MapPair* pairs;
|
52
|
-
};
|
53
|
-
|
54
|
-
struct Sass_Null {
|
55
|
-
enum Sass_Tag tag;
|
56
|
-
};
|
57
|
-
|
58
|
-
struct Sass_Error {
|
59
|
-
enum Sass_Tag tag;
|
60
|
-
char* message;
|
61
|
-
};
|
62
|
-
|
63
|
-
struct Sass_Warning {
|
64
|
-
enum Sass_Tag tag;
|
65
|
-
char* message;
|
66
|
-
};
|
67
|
-
|
68
|
-
union Sass_Value {
|
69
|
-
struct Sass_Unknown unknown;
|
70
|
-
struct Sass_Boolean boolean;
|
71
|
-
struct Sass_Number number;
|
72
|
-
struct Sass_Color color;
|
73
|
-
struct Sass_String string;
|
74
|
-
struct Sass_List list;
|
75
|
-
struct Sass_Map map;
|
76
|
-
struct Sass_Null null;
|
77
|
-
struct Sass_Error error;
|
78
|
-
struct Sass_Warning warning;
|
79
|
-
};
|
80
|
-
|
81
|
-
struct Sass_MapPair {
|
82
|
-
union Sass_Value* key;
|
83
|
-
union Sass_Value* value;
|
84
|
-
};
|
85
|
-
|
86
12
|
// Return the sass tag for a generic sass value
|
87
13
|
enum Sass_Tag ADDCALL sass_value_get_tag(const union Sass_Value* v) { return v->unknown.tag; }
|
88
14
|
|
@@ -411,8 +337,8 @@ extern "C" {
|
|
411
337
|
}
|
412
338
|
|
413
339
|
// simply pass the error message back to the caller for now
|
414
|
-
catch (
|
415
|
-
catch (std::bad_alloc&
|
340
|
+
catch (Exception::InvalidSass& e) { return sass_make_error(e.what()); }
|
341
|
+
catch (std::bad_alloc&) { return sass_make_error("memory exhausted"); }
|
416
342
|
catch (std::exception& e) { return sass_make_error(e.what()); }
|
417
343
|
catch (std::string& e) { return sass_make_error(e.c_str()); }
|
418
344
|
catch (const char* e) { return sass_make_error(e); }
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#ifndef SASS_SASS_VALUES_H
|
2
|
+
#define SASS_SASS_VALUES_H
|
3
|
+
|
4
|
+
#include "sass.h"
|
5
|
+
|
6
|
+
struct Sass_Unknown {
|
7
|
+
enum Sass_Tag tag;
|
8
|
+
};
|
9
|
+
|
10
|
+
struct Sass_Boolean {
|
11
|
+
enum Sass_Tag tag;
|
12
|
+
bool value;
|
13
|
+
};
|
14
|
+
|
15
|
+
struct Sass_Number {
|
16
|
+
enum Sass_Tag tag;
|
17
|
+
double value;
|
18
|
+
char* unit;
|
19
|
+
};
|
20
|
+
|
21
|
+
struct Sass_Color {
|
22
|
+
enum Sass_Tag tag;
|
23
|
+
double r;
|
24
|
+
double g;
|
25
|
+
double b;
|
26
|
+
double a;
|
27
|
+
};
|
28
|
+
|
29
|
+
struct Sass_String {
|
30
|
+
enum Sass_Tag tag;
|
31
|
+
bool quoted;
|
32
|
+
char* value;
|
33
|
+
};
|
34
|
+
|
35
|
+
struct Sass_List {
|
36
|
+
enum Sass_Tag tag;
|
37
|
+
enum Sass_Separator separator;
|
38
|
+
size_t length;
|
39
|
+
// null terminated "array"
|
40
|
+
union Sass_Value** values;
|
41
|
+
};
|
42
|
+
|
43
|
+
struct Sass_Map {
|
44
|
+
enum Sass_Tag tag;
|
45
|
+
size_t length;
|
46
|
+
struct Sass_MapPair* pairs;
|
47
|
+
};
|
48
|
+
|
49
|
+
struct Sass_Null {
|
50
|
+
enum Sass_Tag tag;
|
51
|
+
};
|
52
|
+
|
53
|
+
struct Sass_Error {
|
54
|
+
enum Sass_Tag tag;
|
55
|
+
char* message;
|
56
|
+
};
|
57
|
+
|
58
|
+
struct Sass_Warning {
|
59
|
+
enum Sass_Tag tag;
|
60
|
+
char* message;
|
61
|
+
};
|
62
|
+
|
63
|
+
union Sass_Value {
|
64
|
+
struct Sass_Unknown unknown;
|
65
|
+
struct Sass_Boolean boolean;
|
66
|
+
struct Sass_Number number;
|
67
|
+
struct Sass_Color color;
|
68
|
+
struct Sass_String string;
|
69
|
+
struct Sass_List list;
|
70
|
+
struct Sass_Map map;
|
71
|
+
struct Sass_Null null;
|
72
|
+
struct Sass_Error error;
|
73
|
+
struct Sass_Warning warning;
|
74
|
+
};
|
75
|
+
|
76
|
+
struct Sass_MapPair {
|
77
|
+
union Sass_Value* key;
|
78
|
+
union Sass_Value* value;
|
79
|
+
};
|
80
|
+
|
81
|
+
#endif
|
@@ -14,11 +14,11 @@ namespace Sass {
|
|
14
14
|
SourceMap::SourceMap() : current_position(0, 0, 0), file("stdin") { }
|
15
15
|
SourceMap::SourceMap(const std::string& file) : current_position(0, 0, 0), file(file) { }
|
16
16
|
|
17
|
-
std::string SourceMap::
|
17
|
+
std::string SourceMap::render_srcmap(Context &ctx) {
|
18
18
|
|
19
|
-
const bool include_sources = ctx.source_map_contents;
|
20
|
-
const std::vector<std::string>
|
21
|
-
const std::vector<
|
19
|
+
const bool include_sources = ctx.c_options->source_map_contents;
|
20
|
+
const std::vector<std::string> links = ctx.srcmap_links;
|
21
|
+
const std::vector<Resource>& sources(ctx.resources);
|
22
22
|
|
23
23
|
JsonNode* json_srcmap = json_mkobject();
|
24
24
|
|
@@ -36,7 +36,7 @@ namespace Sass {
|
|
36
36
|
|
37
37
|
JsonNode *json_includes = json_mkarray();
|
38
38
|
for (size_t i = 0; i < source_index.size(); ++i) {
|
39
|
-
const char *include =
|
39
|
+
const char *include = links[source_index[i]].c_str();
|
40
40
|
JsonNode *json_include = json_mkstring(include);
|
41
41
|
json_append_element(json_includes, json_include);
|
42
42
|
}
|
@@ -45,8 +45,8 @@ namespace Sass {
|
|
45
45
|
if (include_sources) {
|
46
46
|
JsonNode *json_contents = json_mkarray();
|
47
47
|
for (size_t i = 0; i < source_index.size(); ++i) {
|
48
|
-
const
|
49
|
-
JsonNode *json_content = json_mkstring(
|
48
|
+
const Resource& resource(sources[source_index[i]]);
|
49
|
+
JsonNode *json_content = json_mkstring(resource.contents);
|
50
50
|
json_append_element(json_contents, json_content);
|
51
51
|
}
|
52
52
|
if (json_contents->children.head)
|
@@ -24,9 +24,6 @@ namespace Sass {
|
|
24
24
|
SourceMap();
|
25
25
|
SourceMap(const std::string& file);
|
26
26
|
|
27
|
-
void setFile(const std::string& str) {
|
28
|
-
file = str;
|
29
|
-
}
|
30
27
|
void append(const Offset& offset);
|
31
28
|
void prepend(const Offset& offset);
|
32
29
|
void append(const OutputBuffer& out);
|
@@ -34,7 +31,7 @@ namespace Sass {
|
|
34
31
|
void add_open_mapping(AST_Node* node);
|
35
32
|
void add_close_mapping(AST_Node* node);
|
36
33
|
|
37
|
-
std::string
|
34
|
+
std::string render_srcmap(Context &ctx);
|
38
35
|
ParserState remap(const ParserState& pstate);
|
39
36
|
|
40
37
|
private:
|
@@ -10,8 +10,8 @@
|
|
10
10
|
|
11
11
|
namespace Sass {
|
12
12
|
|
13
|
-
To_String::To_String(Context* ctx, bool in_declaration)
|
14
|
-
: ctx(ctx), in_declaration(in_declaration) { }
|
13
|
+
To_String::To_String(Context* ctx, bool in_declaration, bool in_debug)
|
14
|
+
: ctx(ctx), in_declaration(in_declaration), in_debug(in_debug) { }
|
15
15
|
To_String::~To_String() { }
|
16
16
|
|
17
17
|
inline std::string To_String::fallback_impl(AST_Node* n)
|
@@ -19,6 +19,7 @@ namespace Sass {
|
|
19
19
|
Emitter emitter(ctx);
|
20
20
|
Inspect i(emitter);
|
21
21
|
i.in_declaration = in_declaration;
|
22
|
+
i.in_debug = in_debug;
|
22
23
|
if (n) n->perform(&i);
|
23
24
|
return i.get_buffer();
|
24
25
|
}
|
@@ -43,5 +44,5 @@ namespace Sass {
|
|
43
44
|
}
|
44
45
|
|
45
46
|
inline std::string To_String::operator()(Null* n)
|
46
|
-
{ return ""; }
|
47
|
+
{ return in_debug ? "null" : ""; }
|
47
48
|
}
|
@@ -18,10 +18,11 @@ namespace Sass {
|
|
18
18
|
|
19
19
|
Context* ctx;
|
20
20
|
bool in_declaration;
|
21
|
+
bool in_debug;
|
21
22
|
|
22
23
|
public:
|
23
24
|
|
24
|
-
To_String(Context* ctx = 0, bool in_declaration = true);
|
25
|
+
To_String(Context* ctx = 0, bool in_declaration = true, bool in_debug = false);
|
25
26
|
virtual ~To_String();
|
26
27
|
|
27
28
|
std::string operator()(Null* n);
|