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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/libsass/.gitignore +6 -0
  4. data/ext/libsass/.travis.yml +5 -1
  5. data/ext/libsass/Makefile +12 -3
  6. data/ext/libsass/Makefile.am +16 -28
  7. data/ext/libsass/Readme.md +1 -0
  8. data/ext/libsass/appveyor.yml +1 -2
  9. data/ext/libsass/ast.cpp +9 -0
  10. data/ext/libsass/ast.hpp +152 -55
  11. data/ext/libsass/ast_factory.hpp +2 -0
  12. data/ext/libsass/ast_fwd_decl.hpp +1 -0
  13. data/ext/libsass/backtrace.hpp +2 -2
  14. data/ext/libsass/bind.cpp +15 -13
  15. data/ext/libsass/configure.ac +17 -5
  16. data/ext/libsass/constants.cpp +22 -2
  17. data/ext/libsass/constants.hpp +21 -2
  18. data/ext/libsass/context.cpp +79 -57
  19. data/ext/libsass/context.hpp +23 -9
  20. data/ext/libsass/contextualize.cpp +2 -28
  21. data/ext/libsass/contextualize.hpp +6 -10
  22. data/ext/libsass/contextualize_eval.cpp +93 -0
  23. data/ext/libsass/contextualize_eval.hpp +44 -0
  24. data/ext/libsass/contrib/plugin.cpp +57 -0
  25. data/ext/libsass/cssize.cpp +3 -1
  26. data/ext/libsass/debugger.hpp +242 -83
  27. data/ext/libsass/emitter.cpp +1 -1
  28. data/ext/libsass/emitter.hpp +1 -1
  29. data/ext/libsass/environment.hpp +109 -25
  30. data/ext/libsass/error_handling.cpp +3 -3
  31. data/ext/libsass/error_handling.hpp +0 -1
  32. data/ext/libsass/eval.cpp +145 -61
  33. data/ext/libsass/eval.hpp +9 -1
  34. data/ext/libsass/expand.cpp +134 -60
  35. data/ext/libsass/expand.hpp +5 -2
  36. data/ext/libsass/extend.cpp +7 -5
  37. data/ext/libsass/file.cpp +176 -123
  38. data/ext/libsass/file.hpp +44 -7
  39. data/ext/libsass/functions.cpp +36 -17
  40. data/ext/libsass/functions.hpp +2 -2
  41. data/ext/libsass/inspect.cpp +23 -14
  42. data/ext/libsass/inspect.hpp +1 -0
  43. data/ext/libsass/json.cpp +132 -135
  44. data/ext/libsass/lexer.cpp +133 -0
  45. data/ext/libsass/lexer.hpp +239 -0
  46. data/ext/libsass/listize.cpp +83 -0
  47. data/ext/libsass/listize.hpp +41 -0
  48. data/ext/libsass/operation.hpp +2 -0
  49. data/ext/libsass/output.cpp +5 -6
  50. data/ext/libsass/parser.cpp +426 -388
  51. data/ext/libsass/parser.hpp +97 -109
  52. data/ext/libsass/plugins.cpp +15 -2
  53. data/ext/libsass/plugins.hpp +6 -4
  54. data/ext/libsass/position.cpp +52 -17
  55. data/ext/libsass/position.hpp +19 -17
  56. data/ext/libsass/prelexer.cpp +202 -235
  57. data/ext/libsass/prelexer.hpp +73 -333
  58. data/ext/libsass/sass.cpp +21 -11
  59. data/ext/libsass/sass.h +6 -6
  60. data/ext/libsass/sass_context.cpp +167 -81
  61. data/ext/libsass/sass_context.h +26 -6
  62. data/ext/libsass/sass_functions.cpp +49 -40
  63. data/ext/libsass/sass_functions.h +55 -43
  64. data/ext/libsass/sass_interface.cpp +9 -8
  65. data/ext/libsass/sass_interface.h +3 -3
  66. data/ext/libsass/sass_version.h +8 -0
  67. data/ext/libsass/sass_version.h.in +8 -0
  68. data/ext/libsass/script/ci-build-libsass +3 -3
  69. data/ext/libsass/script/ci-report-coverage +2 -1
  70. data/ext/libsass/source_map.cpp +2 -2
  71. data/ext/libsass/util.cpp +60 -11
  72. data/ext/libsass/util.hpp +6 -1
  73. data/ext/libsass/win/libsass.filters +12 -0
  74. data/ext/libsass/win/libsass.vcxproj +10 -0
  75. data/lib/sassc.rb +3 -1
  76. data/lib/sassc/cache_stores/base.rb +2 -0
  77. data/lib/sassc/dependency.rb +3 -1
  78. data/lib/sassc/engine.rb +31 -16
  79. data/lib/sassc/error.rb +3 -2
  80. data/lib/sassc/functions_handler.rb +54 -0
  81. data/lib/sassc/import_handler.rb +41 -0
  82. data/lib/sassc/importer.rb +4 -31
  83. data/lib/sassc/native.rb +1 -1
  84. data/lib/sassc/native/native_context_api.rb +3 -2
  85. data/lib/sassc/script.rb +0 -51
  86. data/lib/sassc/version.rb +1 -1
  87. data/sassc.gemspec +1 -0
  88. data/test/custom_importer_test.rb +72 -69
  89. data/test/engine_test.rb +53 -54
  90. data/test/functions_test.rb +40 -39
  91. data/test/native_test.rb +145 -149
  92. data/test/output_style_test.rb +98 -0
  93. data/test/test_helper.rb +21 -7
  94. metadata +28 -2
@@ -2,77 +2,42 @@
2
2
  #define SASS_PRELEXER_H
3
3
 
4
4
  #include <cstring>
5
+ #include "lexer.hpp"
5
6
 
6
7
  namespace Sass {
8
+ // using namespace Lexer;
7
9
  namespace Prelexer {
8
10
 
9
- typedef int (*ctype_predicate)(int);
10
- typedef const char* (*prelexer)(const char*);
11
+ //####################################
12
+ // KEYWORD "REGEX" MATCHERS
13
+ //####################################
11
14
 
12
- // Match a single character literal.
13
- template <char pre>
14
- const char* exactly(const char* src) {
15
- return *src == pre ? src + 1 : 0;
16
- }
17
-
18
- // Match a string constant.
19
- template <const char* prefix>
20
- const char* exactly(const char* src) {
21
- const char* pre = prefix;
22
- if (*src == 0) return 0;
23
- // there is a small chance that the search prefix
24
- // is longer than the rest of the string to look at
25
- while (*pre && *src == *pre) {
26
- ++src, ++pre;
27
- }
28
- return *pre ? 0 : src;
29
- }
30
-
31
- // Match a single character that satifies the supplied ctype predicate.
32
- template <ctype_predicate pred>
33
- const char* class_char(const char* src) {
34
- return pred(*src) ? src + 1 : 0;
35
- }
36
-
37
- // Match a single character that is a member of the supplied class.
38
- template <const char* char_class>
39
- const char* class_char(const char* src) {
40
- const char* cc = char_class;
41
- while (*cc && *src != *cc) ++cc;
42
- return *cc ? src + 1 : 0;
43
- }
44
-
45
- // Match a sequence of characters that all satisfy the supplied ctype predicate.
46
- template <ctype_predicate pred>
47
- const char* class_chars(const char* src) {
48
- const char* p = src;
49
- while (pred(*p)) ++p;
50
- return p == src ? 0 : p;
51
- }
52
-
53
- // Match a sequence of characters that are all members of the supplied class.
54
- template <const char* char_class>
55
- const char* class_chars(const char* src) {
56
- const char* p = src;
57
- while (class_char<char_class>(p)) ++p;
58
- return p == src ? 0 : p;
59
- }
60
-
61
- // Match a sequence of characters up to the next newline.
62
- template <char end>
63
- const char* until(const char* src) {
64
- if (*src == '\n' && exactly<end>(src)) return 0;
65
- while (*src && *src != '\n' && !exactly<end>(src)) ++src;
66
- return ++src;
67
- }
68
-
69
- // Match a sequence of characters up to the next newline.
70
- template <const char* prefix>
71
- const char* to_endl(const char* src) {
72
- if (!(src = exactly<prefix>(src))) return 0;
73
- while (*src && *src != '\n') ++src;
74
- return src;
75
- }
15
+ // Match Sass boolean keywords.
16
+ const char* kwd_true(const char* src);
17
+ const char* kwd_false(const char* src);
18
+ const char* kwd_and(const char* src);
19
+ const char* kwd_or(const char* src);
20
+ const char* kwd_not(const char* src);
21
+ const char* kwd_eq(const char* src);
22
+ const char* kwd_neq(const char* src);
23
+ const char* kwd_gt(const char* src);
24
+ const char* kwd_gte(const char* src);
25
+ const char* kwd_lt(const char* src);
26
+ const char* kwd_lte(const char* src);
27
+
28
+ // Match standard control chars
29
+ const char* kwd_at(const char* src);
30
+ const char* kwd_dot(const char* src);
31
+ const char* kwd_comma(const char* src);
32
+ const char* kwd_colon(const char* src);
33
+ const char* kwd_slash(const char* src);
34
+ const char* kwd_star(const char* src);
35
+ const char* kwd_plus(const char* src);
36
+ const char* kwd_minus(const char* src);
37
+
38
+ //####################################
39
+ // SPECIAL "REGEX" CONSTRUCTS
40
+ //####################################
76
41
 
77
42
  // Match a sequence of characters delimited by the supplied chars.
78
43
  template <char beg, char end, bool esc>
@@ -165,28 +130,6 @@ namespace Sass {
165
130
  }
166
131
  }
167
132
 
168
- // Match any single character.
169
- const char* any_char(const char* src);
170
- // Match any single character except the supplied one.
171
- template <char c>
172
- const char* any_char_except(const char* src) {
173
- return (*src && *src != c) ? src+1 : 0;
174
- }
175
- // Match word boundary (look ahead)
176
- const char* word_boundary(const char* src);
177
-
178
- // Matches zero characters (always succeeds without consuming input).
179
- // const char* epsilon(const char*);
180
-
181
- // Matches the empty string.
182
- // const char* empty(const char*);
183
-
184
- // Succeeds of the supplied matcher fails, and vice versa.
185
- template <prelexer mx>
186
- const char* negate(const char* src) {
187
- return mx(src) ? 0 : src;
188
- }
189
-
190
133
  // Tries to match a certain number of times (between the supplied interval).
191
134
  template<prelexer mx, size_t lo, size_t hi>
192
135
  const char* between(const char* src) {
@@ -202,185 +145,6 @@ namespace Sass {
202
145
  return src;
203
146
  }
204
147
 
205
- // Tries the matchers in sequence and returns the first match (or none)
206
- template <prelexer mx1, prelexer mx2>
207
- const char* alternatives(const char* src) {
208
- const char* rslt;
209
- (rslt = mx1(src)) || (rslt = mx2(src));
210
- return rslt;
211
- }
212
-
213
- // Same as above, but with 3 arguments.
214
- template <prelexer mx1, prelexer mx2, prelexer mx3>
215
- const char* alternatives(const char* src) {
216
- const char* rslt;
217
- (rslt = mx1(src)) || (rslt = mx2(src)) || (rslt = mx3(src));
218
- return rslt;
219
- }
220
-
221
- // Same as above, but with 4 arguments.
222
- template <prelexer mx1, prelexer mx2, prelexer mx3, prelexer mx4>
223
- const char* alternatives(const char* src) {
224
- const char* rslt;
225
- (rslt = mx1(src)) || (rslt = mx2(src)) ||
226
- (rslt = mx3(src)) || (rslt = mx4(src));
227
- return rslt;
228
- }
229
-
230
- // Same as above, but with 5 arguments.
231
- template <prelexer mx1, prelexer mx2, prelexer mx3,
232
- prelexer mx4, prelexer mx5>
233
- const char* alternatives(const char* src) {
234
- const char* rslt;
235
- (rslt = mx1(src)) || (rslt = mx2(src)) || (rslt = mx3(src)) ||
236
- (rslt = mx4(src)) || (rslt = mx5(src));
237
- return rslt;
238
- }
239
-
240
- // Same as above, but with 6 arguments.
241
- template <prelexer mx1, prelexer mx2, prelexer mx3,
242
- prelexer mx4, prelexer mx5, prelexer mx6>
243
- const char* alternatives(const char* src) {
244
- const char* rslt;
245
- (rslt = mx1(src)) || (rslt = mx2(src)) || (rslt = mx3(src)) ||
246
- (rslt = mx4(src)) || (rslt = mx5(src)) || (rslt = mx6(src));
247
- return rslt;
248
- }
249
-
250
- // Same as above, but with 7 arguments.
251
- template <prelexer mx1, prelexer mx2,
252
- prelexer mx3, prelexer mx4,
253
- prelexer mx5, prelexer mx6,
254
- prelexer mx7>
255
- const char* alternatives(const char* src) {
256
- const char* rslt;
257
- (rslt = mx1(src)) || (rslt = mx2(src)) ||
258
- (rslt = mx3(src)) || (rslt = mx4(src)) ||
259
- (rslt = mx5(src)) || (rslt = mx6(src)) ||
260
- (rslt = mx7(src));
261
- return rslt;
262
- }
263
-
264
- // Same as above, but with 8 arguments.
265
- template <prelexer mx1, prelexer mx2,
266
- prelexer mx3, prelexer mx4,
267
- prelexer mx5, prelexer mx6,
268
- prelexer mx7, prelexer mx8>
269
- const char* alternatives(const char* src) {
270
- const char* rslt;
271
- (rslt = mx1(src)) || (rslt = mx2(src)) ||
272
- (rslt = mx3(src)) || (rslt = mx4(src)) ||
273
- (rslt = mx5(src)) || (rslt = mx6(src)) ||
274
- (rslt = mx7(src)) || (rslt = mx8(src));
275
- return rslt;
276
- }
277
-
278
- // Tries the matchers in sequence and succeeds if they all succeed.
279
- template <prelexer mx1, prelexer mx2>
280
- const char* sequence(const char* src) {
281
- const char* rslt = src;
282
- (rslt = mx1(rslt)) && (rslt = mx2(rslt));
283
- return rslt;
284
- }
285
-
286
- // Same as above, but with 3 arguments.
287
- template <prelexer mx1, prelexer mx2, prelexer mx3>
288
- const char* sequence(const char* src) {
289
- const char* rslt = src;
290
- (rslt = mx1(rslt)) && (rslt = mx2(rslt)) && (rslt = mx3(rslt));
291
- return rslt;
292
- }
293
-
294
- // Same as above, but with 4 arguments.
295
- template <prelexer mx1, prelexer mx2, prelexer mx3, prelexer mx4>
296
- const char* sequence(const char* src) {
297
- const char* rslt = src;
298
- (rslt = mx1(rslt)) && (rslt = mx2(rslt)) &&
299
- (rslt = mx3(rslt)) && (rslt = mx4(rslt));
300
- return rslt;
301
- }
302
-
303
- // Same as above, but with 5 arguments.
304
- template <prelexer mx1, prelexer mx2,
305
- prelexer mx3, prelexer mx4,
306
- prelexer mx5>
307
- const char* sequence(const char* src) {
308
- const char* rslt = src;
309
- (rslt = mx1(rslt)) && (rslt = mx2(rslt)) &&
310
- (rslt = mx3(rslt)) && (rslt = mx4(rslt)) &&
311
- (rslt = mx5(rslt));
312
- return rslt;
313
- }
314
-
315
- // Same as above, but with 6 arguments.
316
- template <prelexer mx1, prelexer mx2,
317
- prelexer mx3, prelexer mx4,
318
- prelexer mx5, prelexer mx6>
319
- const char* sequence(const char* src) {
320
- const char* rslt = src;
321
- (rslt = mx1(rslt)) && (rslt = mx2(rslt)) &&
322
- (rslt = mx3(rslt)) && (rslt = mx4(rslt)) &&
323
- (rslt = mx5(rslt)) && (rslt = mx6(rslt));
324
- return rslt;
325
- }
326
-
327
- // Same as above, but with 7 arguments.
328
- template <prelexer mx1, prelexer mx2,
329
- prelexer mx3, prelexer mx4,
330
- prelexer mx5, prelexer mx6,
331
- prelexer mx7>
332
- const char* sequence(const char* src) {
333
- const char* rslt = src;
334
- (rslt = mx1(rslt)) && (rslt = mx2(rslt)) &&
335
- (rslt = mx3(rslt)) && (rslt = mx4(rslt)) &&
336
- (rslt = mx5(rslt)) && (rslt = mx6(rslt)) &&
337
- (rslt = mx7(rslt));
338
- return rslt;
339
- }
340
-
341
- // Match a pattern or not. Always succeeds.
342
- template <prelexer mx>
343
- const char* optional(const char* src) {
344
- const char* p = mx(src);
345
- return p ? p : src;
346
- }
347
-
348
- // Match zero or more of the supplied pattern
349
- template <prelexer mx>
350
- const char* zero_plus(const char* src) {
351
- const char* p = mx(src);
352
- while (p) src = p, p = mx(src);
353
- return src;
354
- }
355
-
356
- // Match one or more of the supplied pattern
357
- template <prelexer mx>
358
- const char* one_plus(const char* src) {
359
- const char* p = mx(src);
360
- if (!p) return 0;
361
- while (p) src = p, p = mx(src);
362
- return src;
363
- }
364
-
365
- // Match a single character satisfying the ctype predicates.
366
- const char* space(const char* src);
367
- const char* alpha(const char* src);
368
- const char* digit(const char* src);
369
- const char* xdigit(const char* src);
370
- const char* alnum(const char* src);
371
- const char* punct(const char* src);
372
- // Match multiple ctype characters.
373
- const char* spaces(const char* src);
374
- const char* alphas(const char* src);
375
- const char* digits(const char* src);
376
- const char* xdigits(const char* src);
377
- const char* alnums(const char* src);
378
- const char* puncts(const char* src);
379
- // Match certain white-space charactes.
380
- const char* wspaces(const char* src);
381
- // const char* newline(const char* src);
382
- // const char* whitespace(const char* src);
383
-
384
148
  // Match a line comment.
385
149
  const char* line_comment(const char* src);
386
150
  const char* line_comment_prefix(const char* src);
@@ -399,69 +163,71 @@ namespace Sass {
399
163
  // Match number prefix ([\+\-]+)
400
164
  const char* number_prefix(const char* src);
401
165
 
402
- // Whitespace handling.
403
- const char* optional_spaces(const char* src);
404
- // const char* optional_comment(const char* src);
405
- const char* optional_spaces_and_comments(const char* src);
406
- const char* spaces_and_comments(const char* src);
407
- const char* no_spaces(const char* src);
166
+ // Match zero plus white-space or line_comments
167
+ const char* optional_css_whitespace(const char* src);
168
+ const char* css_whitespace(const char* src);
169
+ // Match optional_css_whitepace plus block_comments
170
+ const char* optional_css_comments(const char* src);
171
+ const char* css_comments(const char* src);
408
172
 
409
- const char* backslash_something(const char* src);
173
+ // Match one backslash escaped char
174
+ const char* escape_seq(const char* src);
410
175
 
411
176
  // Match CSS css variables.
412
177
  const char* custom_property_name(const char* src);
413
178
  // Match a CSS identifier.
414
179
  const char* identifier(const char* src);
415
- const char* identifier_fragment(const char* src);
180
+ const char* identifier_alpha(const char* src);
181
+ const char* identifier_alnum(const char* src);
182
+ const char* identifier_alnums(const char* src);
416
183
  // Match selector names.
417
184
  // const char* sel_ident(const char* src);
185
+ const char* kwd_sel_deep(const char* src);
186
+
418
187
  // Match interpolant schemas
419
188
  const char* identifier_schema(const char* src);
420
189
  const char* value_schema(const char* src);
421
- const char* filename(const char* src);
190
+ // const char* filename(const char* src);
422
191
  // const char* filename_schema(const char* src);
423
192
  // const char* url_schema(const char* src);
424
193
  // const char* url_value(const char* src);
425
194
  const char* vendor_prefix(const char* src);
426
195
  // Match CSS '@' keywords.
427
196
  const char* at_keyword(const char* src);
428
- const char* import(const char* src);
429
- const char* at_root(const char* src);
430
- const char* with_directive(const char* src);
431
- const char* without_directive(const char* src);
432
- const char* media(const char* src);
433
- const char* supports(const char* src);
197
+ const char* kwd_import(const char* src);
198
+ const char* kwd_at_root(const char* src);
199
+ const char* kwd_with_directive(const char* src);
200
+ const char* kwd_without_directive(const char* src);
201
+ const char* kwd_media(const char* src);
202
+ const char* kwd_supports(const char* src);
434
203
  // const char* keyframes(const char* src);
435
204
  // const char* keyf(const char* src);
436
- const char* mixin(const char* src);
437
- const char* function(const char* src);
438
- const char* return_directive(const char* src);
439
- const char* include(const char* src);
440
- const char* content(const char* src);
441
- const char* extend(const char* src);
442
-
443
- const char* if_directive(const char* src);
444
- const char* else_directive(const char* src);
205
+ const char* kwd_mixin(const char* src);
206
+ const char* kwd_function(const char* src);
207
+ const char* kwd_return_directive(const char* src);
208
+ const char* kwd_include(const char* src);
209
+ const char* kwd_content(const char* src);
210
+ const char* kwd_extend(const char* src);
211
+
212
+ const char* kwd_if_directive(const char* src);
213
+ const char* kwd_else_directive(const char* src);
445
214
  const char* elseif_directive(const char* src);
446
215
 
447
- const char* for_directive(const char* src);
448
- const char* from(const char* src);
449
- const char* to(const char* src);
450
- const char* through(const char* src);
451
-
452
- const char* each_directive(const char* src);
453
- const char* in(const char* src);
216
+ const char* kwd_for_directive(const char* src);
217
+ const char* kwd_from(const char* src);
218
+ const char* kwd_to(const char* src);
219
+ const char* kwd_through(const char* src);
454
220
 
455
- const char* while_directive(const char* src);
221
+ const char* kwd_each_directive(const char* src);
222
+ const char* kwd_in(const char* src);
456
223
 
457
- const char* warn(const char* src);
458
- const char* err(const char* src);
459
- const char* dbg(const char* src);
224
+ const char* kwd_while_directive(const char* src);
460
225
 
461
- // const char* directive(const char* src);
462
- const char* at_keyword(const char* src);
226
+ const char* kwd_warn(const char* src);
227
+ const char* kwd_err(const char* src);
228
+ const char* kwd_dbg(const char* src);
463
229
 
464
- const char* null(const char* src);
230
+ const char* kwd_null(const char* src);
465
231
 
466
232
  // Match CSS type selectors
467
233
  const char* namespace_prefix(const char* src);
@@ -484,6 +250,7 @@ namespace Sass {
484
250
  const char* coefficient(const char* src);
485
251
  const char* binomial(const char* src);
486
252
  const char* percentage(const char* src);
253
+ const char* ampersand(const char* src);
487
254
  const char* dimension(const char* src);
488
255
  const char* hex(const char* src);
489
256
  const char* hexa(const char* src);
@@ -491,8 +258,7 @@ namespace Sass {
491
258
  // const char* rgb_prefix(const char* src);
492
259
  // Match CSS uri specifiers.
493
260
  const char* uri_prefix(const char* src);
494
- // const char* uri(const char* src);
495
- const char* url(const char* src);
261
+ const char* uri_value(const char* src);
496
262
  // Match CSS "!important" keyword.
497
263
  const char* important(const char* src);
498
264
  // Match CSS "!optional" keyword.
@@ -525,19 +291,6 @@ namespace Sass {
525
291
  // Match SCSS variable names.
526
292
  const char* variable(const char* src);
527
293
 
528
- // Match Sass boolean keywords.
529
- const char* true_val(const char* src);
530
- const char* false_val(const char* src);
531
- const char* and_op(const char* src);
532
- const char* or_op(const char* src);
533
- const char* not_op(const char* src);
534
- const char* eq_op(const char* src);
535
- const char* neq_op(const char* src);
536
- const char* gt_op(const char* src);
537
- const char* gte_op(const char* src);
538
- const char* lt_op(const char* src);
539
- const char* lte_op(const char* src);
540
-
541
294
  // IE stuff
542
295
  const char* ie_progid(const char* src);
543
296
  const char* ie_expression(const char* src);
@@ -578,18 +331,6 @@ namespace Sass {
578
331
  }
579
332
  return 0;
580
333
  }
581
- template <char c>
582
- unsigned int count_interval(const char* beg, const char* end) {
583
- unsigned int counter = 0;
584
- bool esc = false;
585
- while (beg < end && *beg) {
586
- if (esc) esc = false;
587
- else if (*beg == '\\') esc = true;
588
- else if (*beg == c) ++counter;
589
- ++beg;
590
- }
591
- return counter;
592
- }
593
334
  template <prelexer mx>
594
335
  unsigned int count_interval(const char* beg, const char* end) {
595
336
  unsigned int counter = 0;
@@ -613,7 +354,6 @@ namespace Sass {
613
354
  return counter;
614
355
  }
615
356
 
616
- const char* chunk(const char* src);
617
357
  }
618
358
  }
619
359