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.
Files changed (164) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/ext/libsass/.gitignore +10 -6
  4. data/ext/libsass/.travis.yml +4 -1
  5. data/ext/libsass/GNUmakefile.am +88 -0
  6. data/ext/libsass/Makefile +157 -76
  7. data/ext/libsass/Makefile.conf +47 -0
  8. data/ext/libsass/Readme.md +13 -14
  9. data/ext/libsass/appveyor.yml +25 -41
  10. data/ext/libsass/configure.ac +20 -7
  11. data/ext/libsass/contrib/plugin.cpp +1 -1
  12. data/ext/libsass/include/sass.h +15 -0
  13. data/ext/libsass/{sass.h → include/sass/base.h} +17 -9
  14. data/ext/libsass/{sass_context.h → include/sass/context.h} +3 -1
  15. data/ext/libsass/{sass_functions.h → include/sass/functions.h} +4 -4
  16. data/ext/libsass/{sass_interface.h → include/sass/interface.h} +5 -2
  17. data/ext/libsass/{sass_values.h → include/sass/values.h} +15 -1
  18. data/ext/libsass/{sass_version.h → include/sass/version.h} +0 -0
  19. data/ext/libsass/{sass_version.h.in → include/sass/version.h.in} +0 -0
  20. data/ext/libsass/{sass2scss.h → include/sass2scss.h} +6 -7
  21. data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +167 -0
  22. data/ext/libsass/script/ci-build-libsass +67 -23
  23. data/ext/libsass/src/GNUmakefile.am +54 -0
  24. data/ext/libsass/src/ast.cpp +2029 -0
  25. data/ext/libsass/{ast.hpp → src/ast.hpp} +832 -660
  26. data/ext/libsass/src/ast_def_macros.hpp +47 -0
  27. data/ext/libsass/src/ast_factory.hpp +93 -0
  28. data/ext/libsass/{ast_fwd_decl.hpp → src/ast_fwd_decl.hpp} +9 -4
  29. data/ext/libsass/{b64 → src/b64}/cencode.h +1 -1
  30. data/ext/libsass/{b64 → src/b64}/encode.h +0 -0
  31. data/ext/libsass/{backtrace.hpp → src/backtrace.hpp} +9 -10
  32. data/ext/libsass/{base64vlq.cpp → src/base64vlq.cpp} +2 -2
  33. data/ext/libsass/{base64vlq.hpp → src/base64vlq.hpp} +1 -2
  34. data/ext/libsass/{bind.cpp → src/bind.cpp} +96 -59
  35. data/ext/libsass/{bind.hpp → src/bind.hpp} +1 -1
  36. data/ext/libsass/src/c99func.c +54 -0
  37. data/ext/libsass/{cencode.c → src/cencode.c} +5 -5
  38. data/ext/libsass/src/color_maps.cpp +643 -0
  39. data/ext/libsass/src/color_maps.hpp +333 -0
  40. data/ext/libsass/{constants.cpp → src/constants.cpp} +10 -1
  41. data/ext/libsass/{constants.hpp → src/constants.hpp} +7 -0
  42. data/ext/libsass/{context.cpp → src/context.cpp} +152 -122
  43. data/ext/libsass/src/context.hpp +150 -0
  44. data/ext/libsass/{cssize.cpp → src/cssize.cpp} +123 -109
  45. data/ext/libsass/{cssize.hpp → src/cssize.hpp} +9 -13
  46. data/ext/libsass/{debug.hpp → src/debug.hpp} +9 -9
  47. data/ext/libsass/src/debugger.hpp +683 -0
  48. data/ext/libsass/{emitter.cpp → src/emitter.cpp} +13 -13
  49. data/ext/libsass/{emitter.hpp → src/emitter.hpp} +10 -11
  50. data/ext/libsass/src/environment.cpp +184 -0
  51. data/ext/libsass/src/environment.hpp +92 -0
  52. data/ext/libsass/src/error_handling.cpp +46 -0
  53. data/ext/libsass/src/error_handling.hpp +34 -0
  54. data/ext/libsass/src/eval.cpp +1462 -0
  55. data/ext/libsass/src/eval.hpp +107 -0
  56. data/ext/libsass/src/expand.cpp +653 -0
  57. data/ext/libsass/{expand.hpp → src/expand.hpp} +17 -16
  58. data/ext/libsass/{extend.cpp → src/extend.cpp} +198 -139
  59. data/ext/libsass/{extend.hpp → src/extend.hpp} +7 -8
  60. data/ext/libsass/{file.cpp → src/file.cpp} +103 -57
  61. data/ext/libsass/{file.hpp → src/file.hpp} +23 -14
  62. data/ext/libsass/{functions.cpp → src/functions.cpp} +642 -333
  63. data/ext/libsass/{functions.hpp → src/functions.hpp} +17 -4
  64. data/ext/libsass/{inspect.cpp → src/inspect.cpp} +147 -260
  65. data/ext/libsass/{inspect.hpp → src/inspect.hpp} +7 -7
  66. data/ext/libsass/{json.cpp → src/json.cpp} +33 -43
  67. data/ext/libsass/{json.hpp → src/json.hpp} +1 -1
  68. data/ext/libsass/{kwd_arg_macros.hpp → src/kwd_arg_macros.hpp} +0 -0
  69. data/ext/libsass/{lexer.cpp → src/lexer.cpp} +28 -0
  70. data/ext/libsass/{lexer.hpp → src/lexer.hpp} +25 -10
  71. data/ext/libsass/{listize.cpp → src/listize.cpp} +17 -13
  72. data/ext/libsass/{listize.hpp → src/listize.hpp} +0 -2
  73. data/ext/libsass/{mapping.hpp → src/mapping.hpp} +0 -0
  74. data/ext/libsass/src/memory_manager.cpp +76 -0
  75. data/ext/libsass/src/memory_manager.hpp +48 -0
  76. data/ext/libsass/{node.cpp → src/node.cpp} +89 -18
  77. data/ext/libsass/{node.hpp → src/node.hpp} +5 -6
  78. data/ext/libsass/{operation.hpp → src/operation.hpp} +18 -12
  79. data/ext/libsass/{output.cpp → src/output.cpp} +47 -55
  80. data/ext/libsass/{output.hpp → src/output.hpp} +5 -4
  81. data/ext/libsass/src/parser.cpp +2529 -0
  82. data/ext/libsass/{parser.hpp → src/parser.hpp} +84 -60
  83. data/ext/libsass/{paths.hpp → src/paths.hpp} +10 -13
  84. data/ext/libsass/{plugins.cpp → src/plugins.cpp} +14 -17
  85. data/ext/libsass/{plugins.hpp → src/plugins.hpp} +10 -11
  86. data/ext/libsass/{position.cpp → src/position.cpp} +5 -6
  87. data/ext/libsass/{position.hpp → src/position.hpp} +19 -22
  88. data/ext/libsass/{prelexer.cpp → src/prelexer.cpp} +401 -53
  89. data/ext/libsass/{prelexer.hpp → src/prelexer.hpp} +50 -10
  90. data/ext/libsass/{remove_placeholders.cpp → src/remove_placeholders.cpp} +12 -16
  91. data/ext/libsass/{remove_placeholders.hpp → src/remove_placeholders.hpp} +1 -7
  92. data/ext/libsass/{sass.cpp → src/sass.cpp} +3 -5
  93. data/ext/libsass/{sass2scss.cpp → src/sass2scss.cpp} +51 -46
  94. data/ext/libsass/{sass_context.cpp → src/sass_context.cpp} +114 -112
  95. data/ext/libsass/{sass_functions.cpp → src/sass_functions.cpp} +11 -18
  96. data/ext/libsass/{sass_interface.cpp → src/sass_interface.cpp} +44 -81
  97. data/ext/libsass/{sass_util.cpp → src/sass_util.cpp} +26 -8
  98. data/ext/libsass/{sass_util.hpp → src/sass_util.hpp} +14 -18
  99. data/ext/libsass/{sass_values.cpp → src/sass_values.cpp} +91 -20
  100. data/ext/libsass/{source_map.cpp → src/source_map.cpp} +13 -13
  101. data/ext/libsass/{source_map.hpp → src/source_map.hpp} +9 -9
  102. data/ext/libsass/{subset_map.hpp → src/subset_map.hpp} +29 -31
  103. data/ext/libsass/{support → src/support}/libsass.pc.in +0 -0
  104. data/ext/libsass/src/to_c.cpp +73 -0
  105. data/ext/libsass/src/to_c.hpp +41 -0
  106. data/ext/libsass/src/to_string.cpp +47 -0
  107. data/ext/libsass/{to_string.hpp → src/to_string.hpp} +9 -7
  108. data/ext/libsass/src/to_value.cpp +109 -0
  109. data/ext/libsass/src/to_value.hpp +50 -0
  110. data/ext/libsass/{units.cpp → src/units.cpp} +56 -51
  111. data/ext/libsass/{units.hpp → src/units.hpp} +8 -9
  112. data/ext/libsass/{utf8.h → src/utf8.h} +0 -0
  113. data/ext/libsass/{utf8 → src/utf8}/checked.h +0 -0
  114. data/ext/libsass/{utf8 → src/utf8}/core.h +12 -12
  115. data/ext/libsass/{utf8 → src/utf8}/unchecked.h +0 -0
  116. data/ext/libsass/{utf8_string.cpp → src/utf8_string.cpp} +0 -0
  117. data/ext/libsass/{utf8_string.hpp → src/utf8_string.hpp} +6 -6
  118. data/ext/libsass/{util.cpp → src/util.cpp} +144 -86
  119. data/ext/libsass/src/util.hpp +59 -0
  120. data/ext/libsass/src/values.cpp +137 -0
  121. data/ext/libsass/src/values.hpp +12 -0
  122. data/ext/libsass/test/test_node.cpp +33 -33
  123. data/ext/libsass/test/test_paths.cpp +5 -6
  124. data/ext/libsass/test/test_selector_difference.cpp +4 -5
  125. data/ext/libsass/test/test_specificity.cpp +4 -5
  126. data/ext/libsass/test/test_subset_map.cpp +91 -91
  127. data/ext/libsass/test/test_superselector.cpp +11 -11
  128. data/ext/libsass/test/test_unification.cpp +4 -4
  129. data/ext/libsass/win/libsass.targets +101 -0
  130. data/ext/libsass/win/libsass.vcxproj +45 -127
  131. data/ext/libsass/win/libsass.vcxproj.filters +303 -0
  132. data/lib/sassc/import_handler.rb +1 -1
  133. data/lib/sassc/native/native_functions_api.rb +3 -3
  134. data/lib/sassc/version.rb +1 -1
  135. data/test/custom_importer_test.rb +1 -4
  136. data/test/functions_test.rb +3 -2
  137. data/test/native_test.rb +4 -3
  138. metadata +117 -110
  139. data/ext/libsass/Makefile.am +0 -146
  140. data/ext/libsass/ast.cpp +0 -945
  141. data/ext/libsass/ast_def_macros.hpp +0 -21
  142. data/ext/libsass/ast_factory.hpp +0 -92
  143. data/ext/libsass/color_names.hpp +0 -327
  144. data/ext/libsass/context.hpp +0 -157
  145. data/ext/libsass/contextualize.cpp +0 -148
  146. data/ext/libsass/contextualize.hpp +0 -46
  147. data/ext/libsass/contextualize_eval.cpp +0 -93
  148. data/ext/libsass/contextualize_eval.hpp +0 -44
  149. data/ext/libsass/debugger.hpp +0 -558
  150. data/ext/libsass/environment.hpp +0 -163
  151. data/ext/libsass/error_handling.cpp +0 -35
  152. data/ext/libsass/error_handling.hpp +0 -32
  153. data/ext/libsass/eval.cpp +0 -1392
  154. data/ext/libsass/eval.hpp +0 -88
  155. data/ext/libsass/expand.cpp +0 -575
  156. data/ext/libsass/memory_manager.hpp +0 -57
  157. data/ext/libsass/parser.cpp +0 -2403
  158. data/ext/libsass/posix/getopt.c +0 -562
  159. data/ext/libsass/posix/getopt.h +0 -95
  160. data/ext/libsass/to_c.cpp +0 -61
  161. data/ext/libsass/to_c.hpp +0 -44
  162. data/ext/libsass/to_string.cpp +0 -34
  163. data/ext/libsass/util.hpp +0 -54
  164. 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* identifier_alnums(const char* src);
199
- // Match selector names.
200
- // const char* sel_ident(const char* src);
201
- const char* kwd_sel_deep(const char* src);
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* kwd_supports(const char* src);
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* kwd_include(const char* src);
225
- const char* kwd_content(const char* src);
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* important(const char* src);
300
+ const char* kwd_important(const char* src);
280
301
  // Match CSS "!optional" keyword.
281
- const char* optional(const char* src);
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* functional(const char* src);
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
- template<typename T>
14
- void Remove_Placeholders::clean_selector_list(T r) {
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 = new (ctx.mem) Selector_List(sl->pstate());
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]->has_placeholder()) {
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
- Statement* stm = (*b)[i];
37
- stm->perform(this);
40
+ if ((*b)[i]) (*b)[i]->perform(this);
38
41
  }
39
42
  }
40
43
 
41
- void Remove_Placeholders::operator()(Block* b) {
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