sassc 1.7.1 → 1.8.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/ext/libsass/.gitignore +10 -6
- data/ext/libsass/.travis.yml +4 -1
- data/ext/libsass/GNUmakefile.am +88 -0
- data/ext/libsass/Makefile +157 -76
- data/ext/libsass/Makefile.conf +47 -0
- data/ext/libsass/Readme.md +13 -14
- data/ext/libsass/appveyor.yml +25 -41
- data/ext/libsass/configure.ac +20 -7
- data/ext/libsass/contrib/plugin.cpp +1 -1
- data/ext/libsass/include/sass.h +15 -0
- data/ext/libsass/{sass.h → include/sass/base.h} +17 -9
- data/ext/libsass/{sass_context.h → include/sass/context.h} +3 -1
- data/ext/libsass/{sass_functions.h → include/sass/functions.h} +4 -4
- data/ext/libsass/{sass_interface.h → include/sass/interface.h} +5 -2
- data/ext/libsass/{sass_values.h → include/sass/values.h} +15 -1
- data/ext/libsass/{sass_version.h → include/sass/version.h} +0 -0
- data/ext/libsass/{sass_version.h.in → include/sass/version.h.in} +0 -0
- data/ext/libsass/{sass2scss.h → include/sass2scss.h} +6 -7
- data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +167 -0
- data/ext/libsass/script/ci-build-libsass +67 -23
- data/ext/libsass/src/GNUmakefile.am +54 -0
- data/ext/libsass/src/ast.cpp +2029 -0
- data/ext/libsass/{ast.hpp → src/ast.hpp} +832 -660
- data/ext/libsass/src/ast_def_macros.hpp +47 -0
- data/ext/libsass/src/ast_factory.hpp +93 -0
- data/ext/libsass/{ast_fwd_decl.hpp → src/ast_fwd_decl.hpp} +9 -4
- data/ext/libsass/{b64 → src/b64}/cencode.h +1 -1
- data/ext/libsass/{b64 → src/b64}/encode.h +0 -0
- data/ext/libsass/{backtrace.hpp → src/backtrace.hpp} +9 -10
- data/ext/libsass/{base64vlq.cpp → src/base64vlq.cpp} +2 -2
- data/ext/libsass/{base64vlq.hpp → src/base64vlq.hpp} +1 -2
- data/ext/libsass/{bind.cpp → src/bind.cpp} +96 -59
- data/ext/libsass/{bind.hpp → src/bind.hpp} +1 -1
- data/ext/libsass/src/c99func.c +54 -0
- data/ext/libsass/{cencode.c → src/cencode.c} +5 -5
- data/ext/libsass/src/color_maps.cpp +643 -0
- data/ext/libsass/src/color_maps.hpp +333 -0
- data/ext/libsass/{constants.cpp → src/constants.cpp} +10 -1
- data/ext/libsass/{constants.hpp → src/constants.hpp} +7 -0
- data/ext/libsass/{context.cpp → src/context.cpp} +152 -122
- data/ext/libsass/src/context.hpp +150 -0
- data/ext/libsass/{cssize.cpp → src/cssize.cpp} +123 -109
- data/ext/libsass/{cssize.hpp → src/cssize.hpp} +9 -13
- data/ext/libsass/{debug.hpp → src/debug.hpp} +9 -9
- data/ext/libsass/src/debugger.hpp +683 -0
- data/ext/libsass/{emitter.cpp → src/emitter.cpp} +13 -13
- data/ext/libsass/{emitter.hpp → src/emitter.hpp} +10 -11
- data/ext/libsass/src/environment.cpp +184 -0
- data/ext/libsass/src/environment.hpp +92 -0
- data/ext/libsass/src/error_handling.cpp +46 -0
- data/ext/libsass/src/error_handling.hpp +34 -0
- data/ext/libsass/src/eval.cpp +1462 -0
- data/ext/libsass/src/eval.hpp +107 -0
- data/ext/libsass/src/expand.cpp +653 -0
- data/ext/libsass/{expand.hpp → src/expand.hpp} +17 -16
- data/ext/libsass/{extend.cpp → src/extend.cpp} +198 -139
- data/ext/libsass/{extend.hpp → src/extend.hpp} +7 -8
- data/ext/libsass/{file.cpp → src/file.cpp} +103 -57
- data/ext/libsass/{file.hpp → src/file.hpp} +23 -14
- data/ext/libsass/{functions.cpp → src/functions.cpp} +642 -333
- data/ext/libsass/{functions.hpp → src/functions.hpp} +17 -4
- data/ext/libsass/{inspect.cpp → src/inspect.cpp} +147 -260
- data/ext/libsass/{inspect.hpp → src/inspect.hpp} +7 -7
- data/ext/libsass/{json.cpp → src/json.cpp} +33 -43
- data/ext/libsass/{json.hpp → src/json.hpp} +1 -1
- data/ext/libsass/{kwd_arg_macros.hpp → src/kwd_arg_macros.hpp} +0 -0
- data/ext/libsass/{lexer.cpp → src/lexer.cpp} +28 -0
- data/ext/libsass/{lexer.hpp → src/lexer.hpp} +25 -10
- data/ext/libsass/{listize.cpp → src/listize.cpp} +17 -13
- data/ext/libsass/{listize.hpp → src/listize.hpp} +0 -2
- data/ext/libsass/{mapping.hpp → src/mapping.hpp} +0 -0
- data/ext/libsass/src/memory_manager.cpp +76 -0
- data/ext/libsass/src/memory_manager.hpp +48 -0
- data/ext/libsass/{node.cpp → src/node.cpp} +89 -18
- data/ext/libsass/{node.hpp → src/node.hpp} +5 -6
- data/ext/libsass/{operation.hpp → src/operation.hpp} +18 -12
- data/ext/libsass/{output.cpp → src/output.cpp} +47 -55
- data/ext/libsass/{output.hpp → src/output.hpp} +5 -4
- data/ext/libsass/src/parser.cpp +2529 -0
- data/ext/libsass/{parser.hpp → src/parser.hpp} +84 -60
- data/ext/libsass/{paths.hpp → src/paths.hpp} +10 -13
- data/ext/libsass/{plugins.cpp → src/plugins.cpp} +14 -17
- data/ext/libsass/{plugins.hpp → src/plugins.hpp} +10 -11
- data/ext/libsass/{position.cpp → src/position.cpp} +5 -6
- data/ext/libsass/{position.hpp → src/position.hpp} +19 -22
- data/ext/libsass/{prelexer.cpp → src/prelexer.cpp} +401 -53
- data/ext/libsass/{prelexer.hpp → src/prelexer.hpp} +50 -10
- data/ext/libsass/{remove_placeholders.cpp → src/remove_placeholders.cpp} +12 -16
- data/ext/libsass/{remove_placeholders.hpp → src/remove_placeholders.hpp} +1 -7
- data/ext/libsass/{sass.cpp → src/sass.cpp} +3 -5
- data/ext/libsass/{sass2scss.cpp → src/sass2scss.cpp} +51 -46
- data/ext/libsass/{sass_context.cpp → src/sass_context.cpp} +114 -112
- data/ext/libsass/{sass_functions.cpp → src/sass_functions.cpp} +11 -18
- data/ext/libsass/{sass_interface.cpp → src/sass_interface.cpp} +44 -81
- data/ext/libsass/{sass_util.cpp → src/sass_util.cpp} +26 -8
- data/ext/libsass/{sass_util.hpp → src/sass_util.hpp} +14 -18
- data/ext/libsass/{sass_values.cpp → src/sass_values.cpp} +91 -20
- data/ext/libsass/{source_map.cpp → src/source_map.cpp} +13 -13
- data/ext/libsass/{source_map.hpp → src/source_map.hpp} +9 -9
- data/ext/libsass/{subset_map.hpp → src/subset_map.hpp} +29 -31
- data/ext/libsass/{support → src/support}/libsass.pc.in +0 -0
- data/ext/libsass/src/to_c.cpp +73 -0
- data/ext/libsass/src/to_c.hpp +41 -0
- data/ext/libsass/src/to_string.cpp +47 -0
- data/ext/libsass/{to_string.hpp → src/to_string.hpp} +9 -7
- data/ext/libsass/src/to_value.cpp +109 -0
- data/ext/libsass/src/to_value.hpp +50 -0
- data/ext/libsass/{units.cpp → src/units.cpp} +56 -51
- data/ext/libsass/{units.hpp → src/units.hpp} +8 -9
- data/ext/libsass/{utf8.h → src/utf8.h} +0 -0
- data/ext/libsass/{utf8 → src/utf8}/checked.h +0 -0
- data/ext/libsass/{utf8 → src/utf8}/core.h +12 -12
- data/ext/libsass/{utf8 → src/utf8}/unchecked.h +0 -0
- data/ext/libsass/{utf8_string.cpp → src/utf8_string.cpp} +0 -0
- data/ext/libsass/{utf8_string.hpp → src/utf8_string.hpp} +6 -6
- data/ext/libsass/{util.cpp → src/util.cpp} +144 -86
- data/ext/libsass/src/util.hpp +59 -0
- data/ext/libsass/src/values.cpp +137 -0
- data/ext/libsass/src/values.hpp +12 -0
- data/ext/libsass/test/test_node.cpp +33 -33
- data/ext/libsass/test/test_paths.cpp +5 -6
- data/ext/libsass/test/test_selector_difference.cpp +4 -5
- data/ext/libsass/test/test_specificity.cpp +4 -5
- data/ext/libsass/test/test_subset_map.cpp +91 -91
- data/ext/libsass/test/test_superselector.cpp +11 -11
- data/ext/libsass/test/test_unification.cpp +4 -4
- data/ext/libsass/win/libsass.targets +101 -0
- data/ext/libsass/win/libsass.vcxproj +45 -127
- data/ext/libsass/win/libsass.vcxproj.filters +303 -0
- data/lib/sassc/import_handler.rb +1 -1
- data/lib/sassc/native/native_functions_api.rb +3 -3
- data/lib/sassc/version.rb +1 -1
- data/test/custom_importer_test.rb +1 -4
- data/test/functions_test.rb +3 -2
- data/test/native_test.rb +4 -3
- metadata +117 -110
- data/ext/libsass/Makefile.am +0 -146
- data/ext/libsass/ast.cpp +0 -945
- data/ext/libsass/ast_def_macros.hpp +0 -21
- data/ext/libsass/ast_factory.hpp +0 -92
- data/ext/libsass/color_names.hpp +0 -327
- data/ext/libsass/context.hpp +0 -157
- data/ext/libsass/contextualize.cpp +0 -148
- data/ext/libsass/contextualize.hpp +0 -46
- data/ext/libsass/contextualize_eval.cpp +0 -93
- data/ext/libsass/contextualize_eval.hpp +0 -44
- data/ext/libsass/debugger.hpp +0 -558
- data/ext/libsass/environment.hpp +0 -163
- data/ext/libsass/error_handling.cpp +0 -35
- data/ext/libsass/error_handling.hpp +0 -32
- data/ext/libsass/eval.cpp +0 -1392
- data/ext/libsass/eval.hpp +0 -88
- data/ext/libsass/expand.cpp +0 -575
- data/ext/libsass/memory_manager.hpp +0 -57
- data/ext/libsass/parser.cpp +0 -2403
- data/ext/libsass/posix/getopt.c +0 -562
- data/ext/libsass/posix/getopt.h +0 -95
- data/ext/libsass/to_c.cpp +0 -61
- data/ext/libsass/to_c.hpp +0 -44
- data/ext/libsass/to_string.cpp +0 -34
- data/ext/libsass/util.hpp +0 -54
- data/ext/libsass/win/libsass.filters +0 -312
@@ -195,10 +195,16 @@ namespace Sass {
|
|
195
195
|
const char* identifier(const char* src);
|
196
196
|
const char* identifier_alpha(const char* src);
|
197
197
|
const char* identifier_alnum(const char* src);
|
198
|
-
const char*
|
199
|
-
|
200
|
-
|
201
|
-
|
198
|
+
const char* strict_identifier(const char* src);
|
199
|
+
const char* strict_identifier_alpha(const char* src);
|
200
|
+
const char* strict_identifier_alnum(const char* src);
|
201
|
+
// Match a CSS unit identifier.
|
202
|
+
const char* unit_identifier(const char* src);
|
203
|
+
// const char* strict_identifier_alnums(const char* src);
|
204
|
+
// Match reference selector.
|
205
|
+
const char* re_reference_combinator(const char* src);
|
206
|
+
const char* static_reference_combinator(const char* src);
|
207
|
+
const char* schema_reference_combinator(const char* src);
|
202
208
|
|
203
209
|
// Match interpolant schemas
|
204
210
|
const char* identifier_schema(const char* src);
|
@@ -215,16 +221,19 @@ namespace Sass {
|
|
215
221
|
const char* kwd_with_directive(const char* src);
|
216
222
|
const char* kwd_without_directive(const char* src);
|
217
223
|
const char* kwd_media(const char* src);
|
218
|
-
const char*
|
224
|
+
const char* kwd_supports_directive(const char* src);
|
219
225
|
// const char* keyframes(const char* src);
|
220
226
|
// const char* keyf(const char* src);
|
221
227
|
const char* kwd_mixin(const char* src);
|
222
228
|
const char* kwd_function(const char* src);
|
223
229
|
const char* kwd_return_directive(const char* src);
|
224
|
-
const char*
|
225
|
-
const char*
|
230
|
+
const char* kwd_include_directive(const char* src);
|
231
|
+
const char* kwd_content_directive(const char* src);
|
232
|
+
const char* kwd_charset_directive(const char* src);
|
226
233
|
const char* kwd_extend(const char* src);
|
227
234
|
|
235
|
+
const char* unicode_seq(const char* src);
|
236
|
+
|
228
237
|
const char* kwd_if_directive(const char* src);
|
229
238
|
const char* kwd_else_directive(const char* src);
|
230
239
|
const char* elseif_directive(const char* src);
|
@@ -239,13 +248,25 @@ namespace Sass {
|
|
239
248
|
|
240
249
|
const char* kwd_while_directive(const char* src);
|
241
250
|
|
251
|
+
const char* re_nothing(const char* src);
|
252
|
+
const char* re_type_selector2(const char* src);
|
253
|
+
|
254
|
+
|
242
255
|
const char* kwd_warn(const char* src);
|
243
256
|
const char* kwd_err(const char* src);
|
244
257
|
const char* kwd_dbg(const char* src);
|
245
258
|
|
246
259
|
const char* kwd_null(const char* src);
|
247
260
|
|
261
|
+
const char* re_type_selector(const char* src);
|
262
|
+
const char* re_static_expression(const char* src);
|
263
|
+
|
264
|
+
// identifier that can start with hyphens
|
265
|
+
const char* css_identifier(const char* src);
|
266
|
+
const char* css_ip_identifier(const char* src);
|
267
|
+
|
248
268
|
// Match CSS type selectors
|
269
|
+
const char* namespace_schema(const char* src);
|
249
270
|
const char* namespace_prefix(const char* src);
|
250
271
|
const char* type_selector(const char* src);
|
251
272
|
const char* hyphens_and_identifier(const char* src);
|
@@ -276,16 +297,17 @@ namespace Sass {
|
|
276
297
|
const char* uri_prefix(const char* src);
|
277
298
|
const char* uri_value(const char* src);
|
278
299
|
// Match CSS "!important" keyword.
|
279
|
-
const char*
|
300
|
+
const char* kwd_important(const char* src);
|
280
301
|
// Match CSS "!optional" keyword.
|
281
|
-
const char*
|
302
|
+
const char* kwd_optional(const char* src);
|
282
303
|
// Match Sass "!default" keyword.
|
283
304
|
const char* default_flag(const char* src);
|
284
305
|
const char* global_flag(const char* src);
|
285
306
|
// Match CSS pseudo-class/element prefixes
|
286
307
|
const char* pseudo_prefix(const char* src);
|
287
308
|
// Match CSS function call openers.
|
288
|
-
const char*
|
309
|
+
const char* re_functional(const char* src);
|
310
|
+
const char* re_pseudo_selector(const char* src);
|
289
311
|
const char* functional_schema(const char* src);
|
290
312
|
const char* pseudo_not(const char* src);
|
291
313
|
// Match CSS 'odd' and 'even' keywords for functional pseudo-classes.
|
@@ -318,6 +340,17 @@ namespace Sass {
|
|
318
340
|
// match urls
|
319
341
|
const char* url(const char* src);
|
320
342
|
|
343
|
+
// match url()
|
344
|
+
const char* H(const char* src);
|
345
|
+
const char* W(const char* src);
|
346
|
+
// `UNICODE` makes VS sad
|
347
|
+
const char* UUNICODE(const char* src);
|
348
|
+
const char* NONASCII(const char* src);
|
349
|
+
const char* ESCAPE(const char* src);
|
350
|
+
const char* real_uri_suffix(const char* src);
|
351
|
+
// const char* real_uri_prefix(const char* src);
|
352
|
+
const char* real_uri_value(const char* src);
|
353
|
+
|
321
354
|
// Path matching functions.
|
322
355
|
// const char* folder(const char* src);
|
323
356
|
// const char* folders(const char* src);
|
@@ -325,6 +358,7 @@ namespace Sass {
|
|
325
358
|
|
326
359
|
const char* static_string(const char* src);
|
327
360
|
const char* static_component(const char* src);
|
361
|
+
const char* static_property(const char* src);
|
328
362
|
const char* static_value(const char* src);
|
329
363
|
|
330
364
|
// Utility functions for finding and counting characters in a string.
|
@@ -372,6 +406,12 @@ namespace Sass {
|
|
372
406
|
return counter;
|
373
407
|
}
|
374
408
|
|
409
|
+
template <size_t size, prelexer mx, prelexer pad>
|
410
|
+
const char* padded_token(const char* src);
|
411
|
+
|
412
|
+
template <size_t min, size_t max, prelexer mx>
|
413
|
+
const char* minmax_range(const char* src);
|
414
|
+
|
375
415
|
}
|
376
416
|
}
|
377
417
|
|
@@ -10,17 +10,21 @@ namespace Sass {
|
|
10
10
|
: ctx(ctx)
|
11
11
|
{ }
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
void Remove_Placeholders::operator()(Block* b) {
|
14
|
+
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
15
|
+
(*b)[i]->perform(this);
|
16
|
+
}
|
17
|
+
}
|
15
18
|
|
19
|
+
void Remove_Placeholders::operator()(Ruleset* r) {
|
16
20
|
// Create a new selector group without placeholders
|
17
21
|
Selector_List* sl = static_cast<Selector_List*>(r->selector());
|
18
22
|
|
19
23
|
if (sl) {
|
20
|
-
Selector_List* new_sl =
|
24
|
+
Selector_List* new_sl = SASS_MEMORY_NEW(ctx.mem, Selector_List, sl->pstate());
|
21
25
|
|
22
26
|
for (size_t i = 0, L = sl->length(); i < L; ++i) {
|
23
|
-
if (!(*sl)[i]->
|
27
|
+
if (!(*sl)[i]->contains_placeholder()) {
|
24
28
|
*new_sl << (*sl)[i];
|
25
29
|
}
|
26
30
|
}
|
@@ -33,25 +37,17 @@ namespace Sass {
|
|
33
37
|
Block* b = r->block();
|
34
38
|
|
35
39
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
36
|
-
|
37
|
-
stm->perform(this);
|
40
|
+
if ((*b)[i]) (*b)[i]->perform(this);
|
38
41
|
}
|
39
42
|
}
|
40
43
|
|
41
|
-
void Remove_Placeholders::operator()(
|
44
|
+
void Remove_Placeholders::operator()(Media_Block* m) {
|
45
|
+
Block* b = m->block();
|
42
46
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
43
|
-
(*b)[i]->perform(this);
|
47
|
+
if ((*b)[i]) (*b)[i]->perform(this);
|
44
48
|
}
|
45
49
|
}
|
46
50
|
|
47
|
-
void Remove_Placeholders::operator()(Ruleset* r) {
|
48
|
-
clean_selector_list(r);
|
49
|
-
}
|
50
|
-
|
51
|
-
void Remove_Placeholders::operator()(Media_Block* m) {
|
52
|
-
clean_selector_list(m);
|
53
|
-
}
|
54
|
-
|
55
51
|
void Remove_Placeholders::operator()(At_Rule* a) {
|
56
52
|
if (a->block()) a->block()->perform(this);
|
57
53
|
}
|
@@ -3,14 +3,11 @@
|
|
3
3
|
|
4
4
|
#pragma once
|
5
5
|
|
6
|
-
#include <iostream>
|
7
|
-
|
8
6
|
#include "ast.hpp"
|
9
7
|
#include "operation.hpp"
|
10
8
|
|
11
9
|
namespace Sass {
|
12
10
|
|
13
|
-
using namespace std;
|
14
11
|
|
15
12
|
class Context;
|
16
13
|
|
@@ -18,7 +15,7 @@ namespace Sass {
|
|
18
15
|
|
19
16
|
Context& ctx;
|
20
17
|
|
21
|
-
void fallback_impl(AST_Node* n) {}
|
18
|
+
void fallback_impl(AST_Node* n) {}
|
22
19
|
|
23
20
|
public:
|
24
21
|
Remove_Placeholders(Context&);
|
@@ -31,9 +28,6 @@ namespace Sass {
|
|
31
28
|
void operator()(Media_Block*);
|
32
29
|
void operator()(At_Rule*);
|
33
30
|
|
34
|
-
template <typename T>
|
35
|
-
void clean_selector_list(T r);
|
36
|
-
|
37
31
|
template <typename U>
|
38
32
|
void fallback(U x) { return fallback_impl(x); }
|
39
33
|
};
|
@@ -8,21 +8,19 @@
|
|
8
8
|
#include "util.hpp"
|
9
9
|
|
10
10
|
extern "C" {
|
11
|
-
using namespace std;
|
12
11
|
using namespace Sass;
|
13
|
-
using namespace File;
|
14
12
|
|
15
13
|
// caller must free the returned memory
|
16
14
|
char* ADDCALL sass_string_quote (const char *str, const char quote_mark)
|
17
15
|
{
|
18
|
-
string quoted = quote(str, quote_mark);
|
16
|
+
std::string quoted = quote(str, quote_mark);
|
19
17
|
return sass_strdup(quoted.c_str());
|
20
18
|
}
|
21
19
|
|
22
20
|
// caller must free the returned memory
|
23
21
|
char* ADDCALL sass_string_unquote (const char *str)
|
24
22
|
{
|
25
|
-
string unquoted = unquote(str);
|
23
|
+
std::string unquoted = unquote(str);
|
26
24
|
return sass_strdup(unquoted.c_str());
|
27
25
|
}
|
28
26
|
|
@@ -30,7 +28,7 @@ extern "C" {
|
|
30
28
|
// Incs array has to be null terminated!
|
31
29
|
char* ADDCALL sass_resolve_file (const char* file, const char* paths[])
|
32
30
|
{
|
33
|
-
string resolved(find_file(file, paths));
|
31
|
+
std::string resolved(File::find_file(file, paths));
|
34
32
|
return sass_strdup(resolved.c_str());
|
35
33
|
}
|
36
34
|
|
@@ -1,3 +1,8 @@
|
|
1
|
+
#ifdef _MSC_VER
|
2
|
+
#define _CRT_SECURE_NO_WARNINGS
|
3
|
+
#define _CRT_NONSTDC_NO_DEPRECATE
|
4
|
+
#endif
|
5
|
+
|
1
6
|
// include library
|
2
7
|
#include <stack>
|
3
8
|
#include <string>
|
@@ -22,7 +27,6 @@
|
|
22
27
|
#include "sass2scss.h"
|
23
28
|
|
24
29
|
// using std::string
|
25
|
-
using namespace std;
|
26
30
|
|
27
31
|
// add namespace for c++
|
28
32
|
namespace Sass
|
@@ -45,7 +49,7 @@ namespace Sass
|
|
45
49
|
#define IS_CSS_COMMENT(converter) (converter.comment == "/*" || (converter.comment == "//" && CONVERT_COMMENT(converter)))
|
46
50
|
|
47
51
|
// pretty printer helper function
|
48
|
-
static string closer (const converter& converter)
|
52
|
+
static std::string closer (const converter& converter)
|
49
53
|
{
|
50
54
|
return PRETTIFY(converter) == 0 ? " }" :
|
51
55
|
PRETTIFY(converter) <= 1 ? " }" :
|
@@ -53,7 +57,7 @@ namespace Sass
|
|
53
57
|
}
|
54
58
|
|
55
59
|
// pretty printer helper function
|
56
|
-
static string opener (const converter& converter)
|
60
|
+
static std::string opener (const converter& converter)
|
57
61
|
{
|
58
62
|
return PRETTIFY(converter) == 0 ? " { " :
|
59
63
|
PRETTIFY(converter) <= 2 ? " {" :
|
@@ -62,13 +66,13 @@ namespace Sass
|
|
62
66
|
|
63
67
|
// check if the given string is a pseudo selector
|
64
68
|
// needed to differentiate from sass property syntax
|
65
|
-
static bool isPseudoSelector (string& sel)
|
69
|
+
static bool isPseudoSelector (std::string& sel)
|
66
70
|
{
|
67
71
|
|
68
72
|
size_t len = sel.length();
|
69
73
|
if (len < 1) return false;
|
70
74
|
size_t pos = sel.find_first_not_of("abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1);
|
71
|
-
if (pos != string::npos) sel.erase(pos, string::npos);
|
75
|
+
if (pos != std::string::npos) sel.erase(pos, std::string::npos);
|
72
76
|
size_t i = sel.length();
|
73
77
|
while (i -- > 0) { sel.at(i) = tolower(sel.at(i)); }
|
74
78
|
|
@@ -148,7 +152,7 @@ namespace Sass
|
|
148
152
|
|
149
153
|
// check if there is some char data
|
150
154
|
// will ignore everything in comments
|
151
|
-
static bool hasCharData (string& sass)
|
155
|
+
static bool hasCharData (std::string& sass)
|
152
156
|
{
|
153
157
|
|
154
158
|
size_t col_pos = 0;
|
@@ -160,7 +164,7 @@ namespace Sass
|
|
160
164
|
col_pos = sass.find_first_not_of(" \t\n\v\f\r", col_pos);
|
161
165
|
|
162
166
|
// there was no meaningfull char found
|
163
|
-
if (col_pos == string::npos) return false;
|
167
|
+
if (col_pos == std::string::npos) return false;
|
164
168
|
|
165
169
|
// found a multiline comment opener
|
166
170
|
if (sass.substr(col_pos, 2) == "/*")
|
@@ -168,7 +172,7 @@ namespace Sass
|
|
168
172
|
// find the multiline comment closer
|
169
173
|
col_pos = sass.find("*/", col_pos);
|
170
174
|
// maybe we did not find the closer here
|
171
|
-
if (col_pos == string::npos) return false;
|
175
|
+
if (col_pos == std::string::npos) return false;
|
172
176
|
// skip closer
|
173
177
|
col_pos += 2;
|
174
178
|
}
|
@@ -184,7 +188,7 @@ namespace Sass
|
|
184
188
|
|
185
189
|
// find src comment opener
|
186
190
|
// correctly skips quoted strings
|
187
|
-
static size_t findCommentOpener (string& sass)
|
191
|
+
static size_t findCommentOpener (std::string& sass)
|
188
192
|
{
|
189
193
|
|
190
194
|
size_t col_pos = 0;
|
@@ -193,14 +197,14 @@ namespace Sass
|
|
193
197
|
bool comment = false;
|
194
198
|
size_t brackets = 0;
|
195
199
|
|
196
|
-
while (col_pos != string::npos)
|
200
|
+
while (col_pos != std::string::npos)
|
197
201
|
{
|
198
202
|
|
199
203
|
// process all interesting chars
|
200
204
|
col_pos = sass.find_first_of("\"\'/\\*()", col_pos);
|
201
205
|
|
202
206
|
// assertion for valid result
|
203
|
-
if (col_pos != string::npos)
|
207
|
+
if (col_pos != std::string::npos)
|
204
208
|
{
|
205
209
|
char character = sass.at(col_pos);
|
206
210
|
|
@@ -266,10 +270,10 @@ namespace Sass
|
|
266
270
|
|
267
271
|
// remove multiline comments from sass string
|
268
272
|
// correctly skips quoted strings
|
269
|
-
static string removeMultilineComment (string &sass)
|
273
|
+
static std::string removeMultilineComment (std::string &sass)
|
270
274
|
{
|
271
275
|
|
272
|
-
string clean = "";
|
276
|
+
std::string clean = "";
|
273
277
|
size_t col_pos = 0;
|
274
278
|
size_t open_pos = 0;
|
275
279
|
size_t close_pos = 0;
|
@@ -278,14 +282,14 @@ namespace Sass
|
|
278
282
|
bool comment = false;
|
279
283
|
|
280
284
|
// process sass til string end
|
281
|
-
while (col_pos != string::npos)
|
285
|
+
while (col_pos != std::string::npos)
|
282
286
|
{
|
283
287
|
|
284
288
|
// process all interesting chars
|
285
289
|
col_pos = sass.find_first_of("\"\'/\\*", col_pos);
|
286
290
|
|
287
291
|
// assertion for valid result
|
288
|
-
if (col_pos != string::npos)
|
292
|
+
if (col_pos != std::string::npos)
|
289
293
|
{
|
290
294
|
char character = sass.at(col_pos);
|
291
295
|
|
@@ -342,11 +346,11 @@ namespace Sass
|
|
342
346
|
// EO removeMultilineComment
|
343
347
|
|
344
348
|
// right trim a given string
|
345
|
-
string rtrim(const string &sass)
|
349
|
+
std::string rtrim(const std::string &sass)
|
346
350
|
{
|
347
|
-
string trimmed = sass;
|
351
|
+
std::string trimmed = sass;
|
348
352
|
size_t pos_ws = trimmed.find_last_not_of(" \t\n\v\f\r");
|
349
|
-
if (pos_ws != string::npos)
|
353
|
+
if (pos_ws != std::string::npos)
|
350
354
|
{ trimmed.erase(pos_ws + 1); }
|
351
355
|
else { trimmed.clear(); }
|
352
356
|
return trimmed;
|
@@ -355,11 +359,11 @@ namespace Sass
|
|
355
359
|
|
356
360
|
// flush whitespace and print additional text, but
|
357
361
|
// only print additional chars and buffer whitespace
|
358
|
-
string flush (string& sass, converter& converter)
|
362
|
+
std::string flush (std::string& sass, converter& converter)
|
359
363
|
{
|
360
364
|
|
361
365
|
// return flushed
|
362
|
-
string scss = "";
|
366
|
+
std::string scss = "";
|
363
367
|
|
364
368
|
// print whitespace buffer
|
365
369
|
scss += PRETTIFY(converter) > 0 ?
|
@@ -369,16 +373,16 @@ namespace Sass
|
|
369
373
|
|
370
374
|
// remove possible newlines from string
|
371
375
|
size_t pos_right = sass.find_last_not_of("\n\r");
|
372
|
-
if (pos_right == string::npos) return scss;
|
376
|
+
if (pos_right == std::string::npos) return scss;
|
373
377
|
|
374
378
|
// get the linefeeds from the string
|
375
|
-
string lfs = sass.substr(pos_right + 1);
|
379
|
+
std::string lfs = sass.substr(pos_right + 1);
|
376
380
|
sass = sass.substr(0, pos_right + 1);
|
377
381
|
|
378
382
|
// find some source comment opener
|
379
383
|
size_t comment_pos = findCommentOpener(sass);
|
380
384
|
// check if there was a source comment
|
381
|
-
if (comment_pos != string::npos)
|
385
|
+
if (comment_pos != std::string::npos)
|
382
386
|
{
|
383
387
|
// convert comment (but only outside other coments)
|
384
388
|
if (CONVERT_COMMENT(converter) && !IS_COMMENT(converter))
|
@@ -393,7 +397,7 @@ namespace Sass
|
|
393
397
|
{
|
394
398
|
// also include whitespace before the actual comment opener
|
395
399
|
size_t ws_pos = sass.find_last_not_of(SASS2SCSS_FIND_WHITESPACE, comment_pos - 1);
|
396
|
-
comment_pos = ws_pos == string::npos ? 0 : ws_pos + 1;
|
400
|
+
comment_pos = ws_pos == std::string::npos ? 0 : ws_pos + 1;
|
397
401
|
}
|
398
402
|
if (!STRIP_COMMENT(converter))
|
399
403
|
{
|
@@ -416,7 +420,7 @@ namespace Sass
|
|
416
420
|
{
|
417
421
|
// remove leading whitespace and update string
|
418
422
|
size_t pos_left = sass.find_first_not_of(SASS2SCSS_FIND_WHITESPACE);
|
419
|
-
if (pos_left != string::npos) sass = sass.substr(pos_left);
|
423
|
+
if (pos_left != std::string::npos) sass = sass.substr(pos_left);
|
420
424
|
}
|
421
425
|
|
422
426
|
// add flushed data
|
@@ -429,11 +433,11 @@ namespace Sass
|
|
429
433
|
// EO flush
|
430
434
|
|
431
435
|
// process a line of the sass text
|
432
|
-
string process (string& sass, converter& converter)
|
436
|
+
std::string process (std::string& sass, converter& converter)
|
433
437
|
{
|
434
438
|
|
435
439
|
// resulting string
|
436
|
-
string scss = "";
|
440
|
+
std::string scss = "";
|
437
441
|
|
438
442
|
// strip multi line comments
|
439
443
|
if (STRIP_COMMENT(converter))
|
@@ -451,7 +455,7 @@ namespace Sass
|
|
451
455
|
if (converter.end_of_file) pos_left = 0;
|
452
456
|
|
453
457
|
// maybe has only whitespace
|
454
|
-
if (pos_left == string::npos)
|
458
|
+
if (pos_left == std::string::npos)
|
455
459
|
{
|
456
460
|
// just add complete whitespace
|
457
461
|
converter.whitespace += sass + "\n";
|
@@ -461,10 +465,10 @@ namespace Sass
|
|
461
465
|
{
|
462
466
|
|
463
467
|
// extract and store indentation string
|
464
|
-
string indent = sass.substr(0, pos_left);
|
468
|
+
std::string indent = sass.substr(0, pos_left);
|
465
469
|
|
466
470
|
// check if current line starts a comment
|
467
|
-
string open = sass.substr(pos_left, 2);
|
471
|
+
std::string open = sass.substr(pos_left, 2);
|
468
472
|
|
469
473
|
// line has less or same indentation
|
470
474
|
// finalize previous open parser context
|
@@ -530,15 +534,15 @@ namespace Sass
|
|
530
534
|
// get postion of first whitespace char
|
531
535
|
size_t pos_wspace = sass.find_first_of(SASS2SCSS_FIND_WHITESPACE, pos_left);
|
532
536
|
// assertion check for valid result
|
533
|
-
if (pos_wspace != string::npos)
|
537
|
+
if (pos_wspace != std::string::npos)
|
534
538
|
{
|
535
539
|
// get the possible pseudo selector
|
536
|
-
string pseudo = sass.substr(pos_left, pos_wspace - pos_left);
|
540
|
+
std::string pseudo = sass.substr(pos_left, pos_wspace - pos_left);
|
537
541
|
// get position of the first real property value char
|
538
542
|
// pseudo selectors get this far, but have no actual value
|
539
543
|
size_t pos_value = sass.find_first_not_of(SASS2SCSS_FIND_WHITESPACE, pos_wspace);
|
540
544
|
// assertion check for valid result
|
541
|
-
if (pos_value != string::npos)
|
545
|
+
if (pos_value != std::string::npos)
|
542
546
|
{
|
543
547
|
// only process if not (fallowed by a semicolon or is a pseudo selector)
|
544
548
|
if (!(sass.at(pos_value) == ':' || isPseudoSelector(pseudo)))
|
@@ -548,12 +552,12 @@ namespace Sass
|
|
548
552
|
// try to find a colon in the current line, but only ...
|
549
553
|
size_t pos_colon = sass.find_first_not_of(":", pos_left);
|
550
554
|
// assertion for valid result
|
551
|
-
if (pos_colon != string::npos)
|
555
|
+
if (pos_colon != std::string::npos)
|
552
556
|
{
|
553
557
|
// ... after the first word (skip begining colons)
|
554
558
|
pos_colon = sass.find_first_of(":", pos_colon);
|
555
559
|
// it is a selector if there was no colon found
|
556
|
-
converter.selector = pos_colon == string::npos;
|
560
|
+
converter.selector = pos_colon == std::string::npos;
|
557
561
|
}
|
558
562
|
}
|
559
563
|
}
|
@@ -589,7 +593,7 @@ namespace Sass
|
|
589
593
|
// get position of the last char on the line
|
590
594
|
size_t pos_end = sass.find_last_not_of(SASS2SCSS_FIND_WHITESPACE);
|
591
595
|
// assertion check for valid result
|
592
|
-
if (pos_end != string::npos)
|
596
|
+
if (pos_end != std::string::npos)
|
593
597
|
{
|
594
598
|
// add quotes around the full line after the import statement
|
595
599
|
sass = sass.substr(0, pos_quote) + "\"" + sass.substr(pos_quote, pos_end - pos_quote + 1) + "\"";
|
@@ -601,18 +605,19 @@ namespace Sass
|
|
601
605
|
else if (
|
602
606
|
sass.substr(pos_left, 7) != "@return" &&
|
603
607
|
sass.substr(pos_left, 7) != "@extend" &&
|
608
|
+
sass.substr(pos_left, 8) != "@include" &&
|
604
609
|
sass.substr(pos_left, 8) != "@content"
|
605
610
|
) {
|
606
611
|
|
607
612
|
// try to find a colon in the current line, but only ...
|
608
613
|
size_t pos_colon = sass.find_first_not_of(":", pos_left);
|
609
614
|
// assertion for valid result
|
610
|
-
if (pos_colon != string::npos)
|
615
|
+
if (pos_colon != std::string::npos)
|
611
616
|
{
|
612
617
|
// ... after the first word (skip begining colons)
|
613
618
|
pos_colon = sass.find_first_of(":", pos_colon);
|
614
619
|
// it is a selector if there was no colon found
|
615
|
-
converter.selector = pos_colon == string::npos;
|
620
|
+
converter.selector = pos_colon == std::string::npos;
|
616
621
|
}
|
617
622
|
|
618
623
|
}
|
@@ -702,11 +707,11 @@ namespace Sass
|
|
702
707
|
size_t pos_right = sass.find_last_not_of(SASS2SCSS_FIND_WHITESPACE);
|
703
708
|
|
704
709
|
// check for invalid result
|
705
|
-
if (pos_right != string::npos)
|
710
|
+
if (pos_right != std::string::npos)
|
706
711
|
{
|
707
712
|
|
708
713
|
// get the last meaningfull char
|
709
|
-
string close = sass.substr(pos_right, 1);
|
714
|
+
std::string close = sass.substr(pos_right, 1);
|
710
715
|
|
711
716
|
// check if next line should be concatenated (list mode)
|
712
717
|
converter.comma = IS_PARSING(converter) && close == ",";
|
@@ -718,7 +723,7 @@ namespace Sass
|
|
718
723
|
{
|
719
724
|
|
720
725
|
// get the last two chars from string
|
721
|
-
string close = sass.substr(pos_right - 1, 2);
|
726
|
+
std::string close = sass.substr(pos_right - 1, 2);
|
722
727
|
// update parser status for expicitly closed comment
|
723
728
|
if (close == "*/") converter.comment = "";
|
724
729
|
|
@@ -772,13 +777,13 @@ namespace Sass
|
|
772
777
|
}
|
773
778
|
|
774
779
|
// the main converter function for c++
|
775
|
-
char* sass2scss (const string sass, const int options)
|
780
|
+
char* sass2scss (const std::string& sass, const int options)
|
776
781
|
{
|
777
782
|
|
778
783
|
// local variables
|
779
|
-
string line;
|
780
|
-
string scss = "";
|
781
|
-
stringstream stream(sass);
|
784
|
+
std::string line;
|
785
|
+
std::string scss = "";
|
786
|
+
std::stringstream stream(sass);
|
782
787
|
|
783
788
|
// create converter variable
|
784
789
|
converter converter;
|
@@ -798,7 +803,7 @@ namespace Sass
|
|
798
803
|
{ scss += process(line, converter); }
|
799
804
|
|
800
805
|
// create mutable string
|
801
|
-
string closer = "";
|
806
|
+
std::string closer = "";
|
802
807
|
// set the end of file flag
|
803
808
|
converter.end_of_file = true;
|
804
809
|
// process to close all open blocks
|