sassc 0.0.10 → 0.0.11
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 +1 -1
- data/ext/libsass/.gitignore +6 -0
- data/ext/libsass/.travis.yml +5 -1
- data/ext/libsass/Makefile +12 -3
- data/ext/libsass/Makefile.am +16 -28
- data/ext/libsass/Readme.md +1 -0
- data/ext/libsass/appveyor.yml +1 -2
- data/ext/libsass/ast.cpp +9 -0
- data/ext/libsass/ast.hpp +152 -55
- data/ext/libsass/ast_factory.hpp +2 -0
- data/ext/libsass/ast_fwd_decl.hpp +1 -0
- data/ext/libsass/backtrace.hpp +2 -2
- data/ext/libsass/bind.cpp +15 -13
- data/ext/libsass/configure.ac +17 -5
- data/ext/libsass/constants.cpp +22 -2
- data/ext/libsass/constants.hpp +21 -2
- data/ext/libsass/context.cpp +79 -57
- data/ext/libsass/context.hpp +23 -9
- data/ext/libsass/contextualize.cpp +2 -28
- data/ext/libsass/contextualize.hpp +6 -10
- data/ext/libsass/contextualize_eval.cpp +93 -0
- data/ext/libsass/contextualize_eval.hpp +44 -0
- data/ext/libsass/contrib/plugin.cpp +57 -0
- data/ext/libsass/cssize.cpp +3 -1
- data/ext/libsass/debugger.hpp +242 -83
- data/ext/libsass/emitter.cpp +1 -1
- data/ext/libsass/emitter.hpp +1 -1
- data/ext/libsass/environment.hpp +109 -25
- data/ext/libsass/error_handling.cpp +3 -3
- data/ext/libsass/error_handling.hpp +0 -1
- data/ext/libsass/eval.cpp +145 -61
- data/ext/libsass/eval.hpp +9 -1
- data/ext/libsass/expand.cpp +134 -60
- data/ext/libsass/expand.hpp +5 -2
- data/ext/libsass/extend.cpp +7 -5
- data/ext/libsass/file.cpp +176 -123
- data/ext/libsass/file.hpp +44 -7
- data/ext/libsass/functions.cpp +36 -17
- data/ext/libsass/functions.hpp +2 -2
- data/ext/libsass/inspect.cpp +23 -14
- data/ext/libsass/inspect.hpp +1 -0
- data/ext/libsass/json.cpp +132 -135
- data/ext/libsass/lexer.cpp +133 -0
- data/ext/libsass/lexer.hpp +239 -0
- data/ext/libsass/listize.cpp +83 -0
- data/ext/libsass/listize.hpp +41 -0
- data/ext/libsass/operation.hpp +2 -0
- data/ext/libsass/output.cpp +5 -6
- data/ext/libsass/parser.cpp +426 -388
- data/ext/libsass/parser.hpp +97 -109
- data/ext/libsass/plugins.cpp +15 -2
- data/ext/libsass/plugins.hpp +6 -4
- data/ext/libsass/position.cpp +52 -17
- data/ext/libsass/position.hpp +19 -17
- data/ext/libsass/prelexer.cpp +202 -235
- data/ext/libsass/prelexer.hpp +73 -333
- data/ext/libsass/sass.cpp +21 -11
- data/ext/libsass/sass.h +6 -6
- data/ext/libsass/sass_context.cpp +167 -81
- data/ext/libsass/sass_context.h +26 -6
- data/ext/libsass/sass_functions.cpp +49 -40
- data/ext/libsass/sass_functions.h +55 -43
- data/ext/libsass/sass_interface.cpp +9 -8
- data/ext/libsass/sass_interface.h +3 -3
- data/ext/libsass/sass_version.h +8 -0
- data/ext/libsass/sass_version.h.in +8 -0
- data/ext/libsass/script/ci-build-libsass +3 -3
- data/ext/libsass/script/ci-report-coverage +2 -1
- data/ext/libsass/source_map.cpp +2 -2
- data/ext/libsass/util.cpp +60 -11
- data/ext/libsass/util.hpp +6 -1
- data/ext/libsass/win/libsass.filters +12 -0
- data/ext/libsass/win/libsass.vcxproj +10 -0
- data/lib/sassc.rb +3 -1
- data/lib/sassc/cache_stores/base.rb +2 -0
- data/lib/sassc/dependency.rb +3 -1
- data/lib/sassc/engine.rb +31 -16
- data/lib/sassc/error.rb +3 -2
- data/lib/sassc/functions_handler.rb +54 -0
- data/lib/sassc/import_handler.rb +41 -0
- data/lib/sassc/importer.rb +4 -31
- data/lib/sassc/native.rb +1 -1
- data/lib/sassc/native/native_context_api.rb +3 -2
- data/lib/sassc/script.rb +0 -51
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +1 -0
- data/test/custom_importer_test.rb +72 -69
- data/test/engine_test.rb +53 -54
- data/test/functions_test.rb +40 -39
- data/test/native_test.rb +145 -149
- data/test/output_style_test.rb +98 -0
- data/test/test_helper.rb +21 -7
- metadata +28 -2
@@ -14,9 +14,9 @@ if [ "x$SASS_SPEC_PATH" == "x" ]; then export SASS_SPEC_PATH=$(pwd)/sass-spec; f
|
|
14
14
|
|
15
15
|
if [ "x$COVERAGE" == "xyes" ]; then
|
16
16
|
COVERAGE_OPT="--enable-coverage"
|
17
|
-
export EXTRA_CFLAGS="
|
18
|
-
export EXTRA_CXXFLAGS="
|
19
|
-
export EXTRA_LDFLAGS="
|
17
|
+
export EXTRA_CFLAGS="--coverage"
|
18
|
+
export EXTRA_CXXFLAGS="--coverage"
|
19
|
+
export EXTRA_LDFLAGS="--coverage"
|
20
20
|
else
|
21
21
|
COVERAGE_OPT="--disable-coverage"
|
22
22
|
fi
|
@@ -10,7 +10,8 @@ if [ "x$COVERAGE" = "xyes" ]; then
|
|
10
10
|
--exclude utf8 --exclude utf8_string.hpp
|
11
11
|
--exclude utf8.h --exclude utf8_string.cpp
|
12
12
|
--exclude sass2scss.h --exclude sass2scss.cpp
|
13
|
-
--exclude test --exclude posix
|
13
|
+
--exclude test --exclude posix
|
14
|
+
--exclude debugger.hpp"
|
14
15
|
# debug via gcovr
|
15
16
|
gcov -v
|
16
17
|
gcovr -r .
|
data/ext/libsass/source_map.cpp
CHANGED
@@ -175,9 +175,9 @@ namespace Sass {
|
|
175
175
|
mappings[i].generated_position.file == pstate.file &&
|
176
176
|
mappings[i].generated_position.line == pstate.line &&
|
177
177
|
mappings[i].generated_position.column == pstate.column
|
178
|
-
) return ParserState(pstate.path, mappings[i].original_position, pstate.offset);
|
178
|
+
) return ParserState(pstate.path, pstate.src, mappings[i].original_position, pstate.offset);
|
179
179
|
}
|
180
|
-
return ParserState(pstate.path, Position(-1, -1, -1), Offset(0, 0));
|
180
|
+
return ParserState(pstate.path, pstate.src, Position(-1, -1, -1), Offset(0, 0));
|
181
181
|
|
182
182
|
}
|
183
183
|
|
data/ext/libsass/util.cpp
CHANGED
@@ -27,7 +27,7 @@ namespace Sass {
|
|
27
27
|
char separator = *(localeconv()->decimal_point);
|
28
28
|
if(separator != '.'){
|
29
29
|
// The current locale specifies another
|
30
|
-
// separator. convert the separator to the
|
30
|
+
// separator. convert the separator to the
|
31
31
|
// one understood by the locale if needed
|
32
32
|
const char *found = strchr(str, '.');
|
33
33
|
if(found != NULL){
|
@@ -79,6 +79,29 @@ namespace Sass {
|
|
79
79
|
return out;
|
80
80
|
}
|
81
81
|
|
82
|
+
// read css string (handle multiline DELIM)
|
83
|
+
string read_css_string(const string& str)
|
84
|
+
{
|
85
|
+
string out("");
|
86
|
+
bool esc = false;
|
87
|
+
for (auto i : str) {
|
88
|
+
if (i == '\\') {
|
89
|
+
esc = ! esc;
|
90
|
+
} else if (esc && i == '\r') {
|
91
|
+
continue;
|
92
|
+
} else if (esc && i == '\n') {
|
93
|
+
out.resize (out.size () - 1);
|
94
|
+
esc = false;
|
95
|
+
continue;
|
96
|
+
} else {
|
97
|
+
esc = false;
|
98
|
+
}
|
99
|
+
out.push_back(i);
|
100
|
+
}
|
101
|
+
if (esc) out += '\\';
|
102
|
+
return out;
|
103
|
+
}
|
104
|
+
|
82
105
|
// evacuate unescaped quoted
|
83
106
|
// leave everything else untouched
|
84
107
|
string evacuate_quotes(const string& str)
|
@@ -308,7 +331,7 @@ namespace Sass {
|
|
308
331
|
// don't be that strict
|
309
332
|
return s;
|
310
333
|
// this basically always means an internal error and not users fault
|
311
|
-
error("Unescaped delimiter in string to unquote found. [" + s + "]", ParserState("[UNQUOTE]"
|
334
|
+
error("Unescaped delimiter in string to unquote found. [" + s + "]", ParserState("[UNQUOTE]"));
|
312
335
|
}
|
313
336
|
else {
|
314
337
|
skipped = false;
|
@@ -325,12 +348,12 @@ namespace Sass {
|
|
325
348
|
string quote(const string& s, char q)
|
326
349
|
{
|
327
350
|
|
328
|
-
// return an empty quoted string
|
329
|
-
if (s.empty()) return string(2, q ? q : '"');
|
330
|
-
|
331
351
|
// autodetect with fallback to given quote
|
332
352
|
q = detect_best_quotemark(s.c_str(), q);
|
333
353
|
|
354
|
+
// return an empty quoted string
|
355
|
+
if (s.empty()) return string(2, q ? q : '"');
|
356
|
+
|
334
357
|
string quoted;
|
335
358
|
quoted.reserve(s.length()+2);
|
336
359
|
quoted.push_back(q);
|
@@ -380,10 +403,12 @@ namespace Sass {
|
|
380
403
|
|
381
404
|
bool peek_linefeed(const char* start)
|
382
405
|
{
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
406
|
+
while (*start) {
|
407
|
+
if (*start == '\n' || *start == '\r') return true;
|
408
|
+
if (*start != ' ' && *start != '\t') return false;
|
409
|
+
++ start;
|
410
|
+
}
|
411
|
+
return false;
|
387
412
|
}
|
388
413
|
|
389
414
|
namespace Util {
|
@@ -450,6 +475,8 @@ namespace Sass {
|
|
450
475
|
} else {
|
451
476
|
hasDeclarations = true;
|
452
477
|
}
|
478
|
+
} else if (Declaration* d = dynamic_cast<Declaration*>(stm)) {
|
479
|
+
return isPrintable(d, style);
|
453
480
|
} else {
|
454
481
|
hasDeclarations = true;
|
455
482
|
}
|
@@ -462,6 +489,28 @@ namespace Sass {
|
|
462
489
|
return false;
|
463
490
|
}
|
464
491
|
|
492
|
+
bool isPrintable(String_Constant* s, Output_Style style)
|
493
|
+
{
|
494
|
+
return ! s->value().empty();
|
495
|
+
}
|
496
|
+
|
497
|
+
bool isPrintable(String_Quoted* s, Output_Style style)
|
498
|
+
{
|
499
|
+
return true;
|
500
|
+
}
|
501
|
+
|
502
|
+
bool isPrintable(Declaration* d, Output_Style style)
|
503
|
+
{
|
504
|
+
Expression* val = d->value();
|
505
|
+
if (String_Quoted* sq = dynamic_cast<String_Quoted*>(val)) return isPrintable(sq, style);
|
506
|
+
if (String_Constant* sc = dynamic_cast<String_Constant*>(val)) return isPrintable(sc, style);
|
507
|
+
return true;
|
508
|
+
}
|
509
|
+
|
510
|
+
bool isPrintable(Expression* e, Output_Style style) {
|
511
|
+
return isPrintable(e, style);
|
512
|
+
}
|
513
|
+
|
465
514
|
bool isPrintable(Feature_Block* f, Output_Style style) {
|
466
515
|
if (f == NULL) {
|
467
516
|
return false;
|
@@ -593,8 +642,8 @@ namespace Sass {
|
|
593
642
|
}
|
594
643
|
}
|
595
644
|
|
596
|
-
bool isAscii(
|
597
|
-
|
645
|
+
bool isAscii(const char chr) {
|
646
|
+
return unsigned(chr) < 128;
|
598
647
|
}
|
599
648
|
|
600
649
|
}
|
data/ext/libsass/util.hpp
CHANGED
@@ -12,6 +12,7 @@ namespace Sass {
|
|
12
12
|
double sass_atof(const char* str);
|
13
13
|
string string_escape(const string& str);
|
14
14
|
string string_unescape(const string& str);
|
15
|
+
string read_css_string(const string& str);
|
15
16
|
string evacuate_quotes(const string& str);
|
16
17
|
string evacuate_escapes(const string& str);
|
17
18
|
string string_to_output(const string& str);
|
@@ -40,7 +41,11 @@ namespace Sass {
|
|
40
41
|
bool isPrintable(Feature_Block* r, Output_Style style = NESTED);
|
41
42
|
bool isPrintable(Media_Block* r, Output_Style style = NESTED);
|
42
43
|
bool isPrintable(Block* b, Output_Style style = NESTED);
|
43
|
-
bool
|
44
|
+
bool isPrintable(String_Constant* s, Output_Style style = NESTED);
|
45
|
+
bool isPrintable(String_Quoted* s, Output_Style style = NESTED);
|
46
|
+
bool isPrintable(Declaration* d, Output_Style style = NESTED);
|
47
|
+
bool isPrintable(Expression* e, Output_Style style = NESTED);
|
48
|
+
bool isAscii(const char chr);
|
44
49
|
|
45
50
|
}
|
46
51
|
}
|
@@ -51,6 +51,9 @@
|
|
51
51
|
<ClCompile Include="..\cssize.cpp">
|
52
52
|
<Filter>Source Files</Filter>
|
53
53
|
</ClCompile>
|
54
|
+
<ClCompile Include="..\listize.cpp">
|
55
|
+
<Filter>Source Files</Filter>
|
56
|
+
</ClCompile>
|
54
57
|
<ClCompile Include="..\extend.cpp">
|
55
58
|
<Filter>Source Files</Filter>
|
56
59
|
</ClCompile>
|
@@ -81,6 +84,9 @@
|
|
81
84
|
<ClCompile Include="..\position.cpp">
|
82
85
|
<Filter>Source Files</Filter>
|
83
86
|
</ClCompile>
|
87
|
+
<ClCompile Include="..\lexer.cpp">
|
88
|
+
<Filter>Source Files</Filter>
|
89
|
+
</ClCompile>
|
84
90
|
<ClCompile Include="..\prelexer.cpp">
|
85
91
|
<Filter>Source Files</Filter>
|
86
92
|
</ClCompile>
|
@@ -194,6 +200,9 @@
|
|
194
200
|
<ClInclude Include="..\cssize.hpp">
|
195
201
|
<Filter>Header Files</Filter>
|
196
202
|
</ClInclude>
|
203
|
+
<ClInclude Include="..\listize.hpp">
|
204
|
+
<Filter>Header Files</Filter>
|
205
|
+
</ClInclude>
|
197
206
|
<ClInclude Include="..\extend.hpp">
|
198
207
|
<Filter>Header Files</Filter>
|
199
208
|
</ClInclude>
|
@@ -239,6 +248,9 @@
|
|
239
248
|
<ClInclude Include="..\position.hpp">
|
240
249
|
<Filter>Header Files</Filter>
|
241
250
|
</ClInclude>
|
251
|
+
<ClInclude Include="..\lexer.hpp">
|
252
|
+
<Filter>Header Files</Filter>
|
253
|
+
</ClInclude>
|
242
254
|
<ClInclude Include="..\prelexer.hpp">
|
243
255
|
<Filter>Header Files</Filter>
|
244
256
|
</ClInclude>
|
@@ -102,6 +102,7 @@
|
|
102
102
|
<WarningLevel>Level3</WarningLevel>
|
103
103
|
<Optimization>Disabled</Optimization>
|
104
104
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
105
|
+
<ExceptionHandling>SyncCThrow</ExceptionHandling>
|
105
106
|
</ClCompile>
|
106
107
|
<Link>
|
107
108
|
<SubSystem>Console</SubSystem>
|
@@ -115,6 +116,7 @@
|
|
115
116
|
<WarningLevel>Level3</WarningLevel>
|
116
117
|
<Optimization>Disabled</Optimization>
|
117
118
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
119
|
+
<ExceptionHandling>SyncCThrow</ExceptionHandling>
|
118
120
|
</ClCompile>
|
119
121
|
<Link>
|
120
122
|
<SubSystem>Console</SubSystem>
|
@@ -130,6 +132,7 @@
|
|
130
132
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
131
133
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
132
134
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
135
|
+
<ExceptionHandling>SyncCThrow</ExceptionHandling>
|
133
136
|
</ClCompile>
|
134
137
|
<Link>
|
135
138
|
<SubSystem>Console</SubSystem>
|
@@ -147,6 +150,7 @@
|
|
147
150
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
148
151
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
149
152
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
153
|
+
<ExceptionHandling>SyncCThrow</ExceptionHandling>
|
150
154
|
</ClCompile>
|
151
155
|
<Link>
|
152
156
|
<SubSystem>Console</SubSystem>
|
@@ -164,10 +168,12 @@
|
|
164
168
|
<ClCompile Include="..\constants.cpp" />
|
165
169
|
<ClCompile Include="..\context.cpp" />
|
166
170
|
<ClCompile Include="..\contextualize.cpp" />
|
171
|
+
<ClCompile Include="..\contextualize_eval.cpp" />
|
167
172
|
<ClCompile Include="..\error_handling.cpp" />
|
168
173
|
<ClCompile Include="..\eval.cpp" />
|
169
174
|
<ClCompile Include="..\expand.cpp" />
|
170
175
|
<ClCompile Include="..\cssize.cpp" />
|
176
|
+
<ClCompile Include="..\listize.cpp" />
|
171
177
|
<ClCompile Include="..\extend.cpp" />
|
172
178
|
<ClCompile Include="..\file.cpp" />
|
173
179
|
<ClCompile Include="..\functions.cpp" />
|
@@ -179,6 +185,7 @@
|
|
179
185
|
<ClCompile Include="..\parser.cpp" />
|
180
186
|
<ClCompile Include="..\plugins.cpp" />
|
181
187
|
<ClCompile Include="..\position.cpp" />
|
188
|
+
<ClCompile Include="..\lexer.cpp" />
|
182
189
|
<ClCompile Include="..\prelexer.cpp" />
|
183
190
|
<ClCompile Include="..\remove_placeholders.cpp" />
|
184
191
|
<ClCompile Include="..\sass.cpp" />
|
@@ -208,12 +215,14 @@
|
|
208
215
|
<ClInclude Include="..\constants.hpp" />
|
209
216
|
<ClInclude Include="..\context.hpp" />
|
210
217
|
<ClInclude Include="..\contextualize.hpp" />
|
218
|
+
<ClInclude Include="..\contextualize_eval.hpp" />
|
211
219
|
<ClInclude Include="..\debug.hpp" />
|
212
220
|
<ClInclude Include="..\environment.hpp" />
|
213
221
|
<ClInclude Include="..\error_handling.hpp" />
|
214
222
|
<ClInclude Include="..\eval.hpp" />
|
215
223
|
<ClInclude Include="..\expand.hpp" />
|
216
224
|
<ClInclude Include="..\cssize.hpp" />
|
225
|
+
<ClInclude Include="..\listize.hpp" />
|
217
226
|
<ClInclude Include="..\extend.hpp" />
|
218
227
|
<ClInclude Include="..\file.hpp" />
|
219
228
|
<ClInclude Include="..\functions.hpp" />
|
@@ -230,6 +239,7 @@
|
|
230
239
|
<ClInclude Include="..\plugins.hpp" />
|
231
240
|
<ClInclude Include="..\paths.hpp" />
|
232
241
|
<ClInclude Include="..\position.hpp" />
|
242
|
+
<ClInclude Include="..\lexer.hpp" />
|
233
243
|
<ClInclude Include="..\prelexer.hpp" />
|
234
244
|
<ClInclude Include="..\remove_placeholders.hpp" />
|
235
245
|
<ClInclude Include="..\sass.h" />
|
data/lib/sassc.rb
CHANGED
@@ -3,9 +3,11 @@ end
|
|
3
3
|
|
4
4
|
require_relative "sassc/version"
|
5
5
|
require_relative "sassc/native"
|
6
|
-
require_relative "sassc/
|
6
|
+
require_relative "sassc/import_handler"
|
7
7
|
require_relative "sassc/importer"
|
8
8
|
require_relative "sassc/script"
|
9
|
+
require_relative "sassc/functions_handler"
|
9
10
|
require_relative "sassc/cache_stores"
|
10
11
|
require_relative "sassc/dependency"
|
11
12
|
require_relative "sassc/error"
|
13
|
+
require_relative "sassc/engine"
|
data/lib/sassc/dependency.rb
CHANGED
data/lib/sassc/engine.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
+
require_relative "error"
|
2
|
+
|
1
3
|
module SassC
|
2
4
|
class Engine
|
3
|
-
|
5
|
+
OUTPUT_STYLES = %i[
|
6
|
+
sass_style_nested
|
7
|
+
sass_style_expanded
|
8
|
+
sass_style_compact
|
9
|
+
sass_style_compressed
|
10
|
+
]
|
4
11
|
|
5
12
|
def initialize(template, options = {})
|
6
13
|
@template = template
|
@@ -15,20 +22,20 @@ module SassC
|
|
15
22
|
Native.option_set_is_indented_syntax_src(native_options, true) if sass?
|
16
23
|
Native.option_set_input_path(native_options, filename) if filename
|
17
24
|
Native.option_set_include_path(native_options, load_paths)
|
25
|
+
Native.option_set_output_style(native_options, output_style_enum)
|
18
26
|
|
19
|
-
|
20
|
-
|
21
|
-
status = Script.setup_custom_functions(native_options, @options) do
|
22
|
-
Native.compile_data_context(data_context)
|
23
|
-
end
|
27
|
+
import_handler.setup(native_options)
|
28
|
+
functions_handler.setup(native_options)
|
24
29
|
|
25
|
-
|
30
|
+
status = Native.compile_data_context(data_context)
|
26
31
|
|
27
32
|
if status != 0
|
28
|
-
message =
|
33
|
+
message = Native.context_get_error_message(context)
|
29
34
|
raise SyntaxError.new(message)
|
30
35
|
end
|
31
36
|
|
37
|
+
css = Native.context_get_output_string(context)
|
38
|
+
|
32
39
|
@dependencies = Native.context_get_included_files(context)
|
33
40
|
|
34
41
|
Native.delete_data_context(data_context)
|
@@ -55,14 +62,22 @@ module SassC
|
|
55
62
|
@options[:syntax] && @options[:syntax].to_sym == :sass
|
56
63
|
end
|
57
64
|
|
58
|
-
def
|
59
|
-
@
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
65
|
+
def import_handler
|
66
|
+
@import_handler ||= ImportHandler.new(@options)
|
67
|
+
end
|
68
|
+
|
69
|
+
def functions_handler
|
70
|
+
@functions_handler = FunctionsHandler.new(@options)
|
71
|
+
end
|
72
|
+
|
73
|
+
def output_style_enum
|
74
|
+
@output_style_enum ||= Native::SassOutputStyle[output_style]
|
75
|
+
end
|
76
|
+
|
77
|
+
def output_style
|
78
|
+
style = @options.fetch(:style, :sass_style_nested).to_sym
|
79
|
+
raise InvalidStyleError unless Native::SassOutputStyle.symbols.include?(style)
|
80
|
+
style
|
66
81
|
end
|
67
82
|
|
68
83
|
def load_paths
|
data/lib/sassc/error.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
module SassC
|
2
|
+
class FunctionsHandler
|
3
|
+
def initialize(options)
|
4
|
+
@options = options
|
5
|
+
end
|
6
|
+
|
7
|
+
def setup(native_options)
|
8
|
+
callbacks = {}
|
9
|
+
|
10
|
+
list = Native.make_function_list(Script.custom_functions.count)
|
11
|
+
|
12
|
+
functs = FunctionWrapper.extend(Script::Functions)
|
13
|
+
functs.options = @options
|
14
|
+
|
15
|
+
Script.custom_functions.each_with_index do |custom_function, i|
|
16
|
+
callbacks[custom_function] = FFI::Function.new(:pointer, [:pointer, :pointer]) do |s_args, cookie|
|
17
|
+
length = Native.list_get_length(s_args)
|
18
|
+
|
19
|
+
v = Native.list_get_value(s_args, 0)
|
20
|
+
v = Native.string_get_value(v).dup
|
21
|
+
|
22
|
+
s = Script::String.new(Script::String.unquote(v), Script::String.type(v))
|
23
|
+
|
24
|
+
value = functs.send(custom_function, s)
|
25
|
+
|
26
|
+
if value
|
27
|
+
value = Script::String.new(Script::String.unquote(value.to_s), value.type)
|
28
|
+
value.to_native
|
29
|
+
else
|
30
|
+
Script::String.new("").to_native
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
callback = Native.make_function(
|
35
|
+
Script.formatted_function_name(custom_function),
|
36
|
+
callbacks[custom_function],
|
37
|
+
nil
|
38
|
+
)
|
39
|
+
|
40
|
+
Native::function_set_list_entry(list, i, callback)
|
41
|
+
end
|
42
|
+
|
43
|
+
Native::option_set_c_functions(native_options, list)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
class FunctionWrapper
|
49
|
+
class << self
|
50
|
+
attr_accessor :options
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|