sassc 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/ext/libsass/prelexer.cpp
CHANGED
@@ -9,51 +9,34 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
namespace Sass {
|
12
|
+
// using namespace Lexer;
|
12
13
|
using namespace Constants;
|
13
14
|
|
14
15
|
namespace Prelexer {
|
15
|
-
using std::ptrdiff_t;
|
16
|
-
// Matches zero characters (always succeeds without consuming input).
|
17
|
-
/* not used anymore - remove?
|
18
|
-
const char* epsilon(char *src) {
|
19
|
-
return src;
|
20
|
-
}*/
|
21
|
-
// Matches the empty string.
|
22
|
-
/* not used anymore - remove?
|
23
|
-
const char* empty(char *src) {
|
24
|
-
return *src ? 0 : src;
|
25
|
-
}*/
|
26
16
|
|
27
|
-
// Match any single character.
|
28
|
-
const char* any_char(const char* src) { return *src ? src+1 : src; }
|
29
|
-
// Match word boundary (look ahead)
|
30
|
-
const char* word_boundary(const char* src) { return !*src || isspace(*src) || ispunct(*src) || !Sass::Util::isAscii(*src) ? src : 0 ; }
|
31
|
-
|
32
|
-
// Match a single character satisfying the ctype predicates.
|
33
|
-
const char* space(const char* src) { return std::isspace(*src) ? src+1 : 0; }
|
34
|
-
const char* alpha(const char* src) { return std::isalpha(*src) || !Sass::Util::isAscii(*src) ? src+1 : 0; }
|
35
|
-
const char* digit(const char* src) { return std::isdigit(*src) ? src+1 : 0; }
|
36
|
-
const char* xdigit(const char* src) { return std::isxdigit(*src) ? src+1 : 0; }
|
37
|
-
const char* alnum(const char* src) { return std::isalnum(*src) || !Sass::Util::isAscii(*src) ? src+1 : 0; }
|
38
|
-
const char* punct(const char* src) { return std::ispunct(*src) ? src+1 : 0; }
|
39
|
-
// Match multiple ctype characters.
|
40
|
-
const char* spaces(const char* src) { return one_plus<space>(src); }
|
41
|
-
const char* alphas(const char* src) { return one_plus<alpha>(src); }
|
42
|
-
const char* digits(const char* src) { return one_plus<digit>(src); }
|
43
|
-
const char* xdigits(const char* src) { return one_plus<xdigit>(src); }
|
44
|
-
const char* alnums(const char* src) { return one_plus<alnum>(src); }
|
45
|
-
const char* puncts(const char* src) { return one_plus<punct>(src); }
|
46
|
-
|
47
|
-
// Match a line comment.
|
48
|
-
const char* line_comment(const char* src) { return to_endl<slash_slash>(src); }
|
49
|
-
// Match a line comment prefix.
|
50
|
-
const char* line_comment_prefix(const char* src) { return exactly<slash_slash>(src); }
|
51
17
|
|
18
|
+
// Match a line comment (/.*?(?=\n|\r\n?|\Z)/.
|
19
|
+
const char* line_comment(const char* src)
|
20
|
+
{
|
21
|
+
return sequence<
|
22
|
+
exactly <
|
23
|
+
slash_slash
|
24
|
+
>,
|
25
|
+
non_greedy<
|
26
|
+
any_char,
|
27
|
+
end_of_line
|
28
|
+
>
|
29
|
+
>(src);
|
30
|
+
}
|
52
31
|
|
53
32
|
// Match a block comment.
|
54
|
-
const char* block_comment(const char* src)
|
55
|
-
|
33
|
+
const char* block_comment(const char* src)
|
34
|
+
{
|
35
|
+
return sequence<
|
36
|
+
zero_plus < space >,
|
37
|
+
delimited_by<slash_star, star_slash, false> >(src);
|
56
38
|
}
|
39
|
+
/* not use anymore - remove?
|
57
40
|
const char* block_comment_prefix(const char* src) {
|
58
41
|
return exactly<slash_star>(src);
|
59
42
|
}
|
@@ -61,90 +44,70 @@ namespace Sass {
|
|
61
44
|
const char* comment(const char* src) {
|
62
45
|
return line_comment(src);
|
63
46
|
}
|
47
|
+
*/
|
64
48
|
|
65
|
-
|
66
|
-
|
67
|
-
alternatives<
|
68
|
-
exactly<' '>,
|
69
|
-
exactly<'\t'>
|
70
|
-
>(src);
|
71
|
-
}
|
72
|
-
|
73
|
-
/* not used anymore - remove?
|
74
|
-
const char* newline(const char* src) {
|
75
|
-
return
|
76
|
-
alternatives<
|
77
|
-
exactly<'\n'>,
|
78
|
-
sequence< exactly<'\r'>, exactly<'\n'> >,
|
79
|
-
exactly<'\r'>,
|
80
|
-
exactly<'\f'>
|
81
|
-
>(src);
|
82
|
-
}*/
|
83
|
-
|
84
|
-
/* not used anymore - remove?
|
85
|
-
const char* whitespace(const char* src) {
|
86
|
-
return spaces(src);
|
87
|
-
}*/
|
88
|
-
|
89
|
-
/* not used anymore - remove?
|
90
|
-
const char* escape(const char* src) {
|
91
|
-
return
|
92
|
-
sequence<
|
93
|
-
exactly<'\\'>,
|
94
|
-
any_char
|
95
|
-
>(src);
|
96
|
-
}*/
|
97
|
-
|
98
|
-
|
99
|
-
// Whitespace handling.
|
100
|
-
const char* optional_spaces(const char* src) { return optional<spaces>(src); }
|
101
|
-
// const char* optional_comment(const char* src) { return optional<comment>(src); }
|
102
|
-
const char* optional_spaces_and_comments(const char* src) {
|
49
|
+
// Match zero plus white-space or line_comments
|
50
|
+
const char* optional_css_whitespace(const char* src) {
|
103
51
|
return zero_plus< alternatives<spaces, line_comment> >(src);
|
104
52
|
}
|
105
|
-
const char*
|
53
|
+
const char* css_whitespace(const char* src) {
|
106
54
|
return one_plus< alternatives<spaces, line_comment> >(src);
|
107
55
|
}
|
108
|
-
|
109
|
-
|
56
|
+
// Match optional_css_whitepace plus block_comments
|
57
|
+
const char* optional_css_comments(const char* src) {
|
58
|
+
return zero_plus< alternatives<spaces, line_comment, block_comment> >(src);
|
59
|
+
}
|
60
|
+
const char* css_comments(const char* src) {
|
61
|
+
return one_plus< alternatives<spaces, line_comment, block_comment> >(src);
|
110
62
|
}
|
111
63
|
|
112
|
-
|
113
|
-
|
64
|
+
// Match one backslash escaped char /\\./
|
65
|
+
const char* escape_seq(const char* src)
|
66
|
+
{
|
67
|
+
return sequence<
|
68
|
+
exactly<'\\'>,
|
69
|
+
any_char
|
70
|
+
>(src);
|
114
71
|
}
|
115
72
|
|
116
|
-
// Match
|
117
|
-
const char*
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
73
|
+
// Match identifier start
|
74
|
+
const char* identifier_alpha(const char* src)
|
75
|
+
{
|
76
|
+
return alternatives<
|
77
|
+
alpha,
|
78
|
+
unicode,
|
79
|
+
exactly<'-'>,
|
80
|
+
exactly<'_'>,
|
81
|
+
escape_seq
|
82
|
+
>(src);
|
124
83
|
}
|
125
84
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
85
|
+
// Match identifier after start
|
86
|
+
const char* identifier_alnum(const char* src)
|
87
|
+
{
|
88
|
+
return alternatives<
|
89
|
+
alnum,
|
90
|
+
unicode,
|
91
|
+
exactly<'-'>,
|
92
|
+
exactly<'_'>,
|
93
|
+
escape_seq
|
94
|
+
>(src);
|
131
95
|
}
|
132
96
|
|
133
|
-
// Match CSS
|
134
|
-
|
135
|
-
|
136
|
-
return sequence<
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
}*/
|
97
|
+
// Match CSS identifiers.
|
98
|
+
const char* identifier(const char* src)
|
99
|
+
{
|
100
|
+
return sequence<
|
101
|
+
zero_plus< exactly<'-'> >,
|
102
|
+
one_plus < identifier_alpha >,
|
103
|
+
zero_plus < identifier_alnum >
|
104
|
+
// word_boundary not needed
|
105
|
+
>(src);
|
106
|
+
}
|
144
107
|
|
145
|
-
|
146
|
-
|
147
|
-
return
|
108
|
+
const char* identifier_alnums(const char* src)
|
109
|
+
{
|
110
|
+
return one_plus< identifier_alnum >(src);
|
148
111
|
}
|
149
112
|
|
150
113
|
// Match number prefix ([\+\-]+)
|
@@ -153,7 +116,7 @@ namespace Sass {
|
|
153
116
|
exactly < '+' >,
|
154
117
|
sequence <
|
155
118
|
exactly < '-' >,
|
156
|
-
|
119
|
+
optional_css_whitespace,
|
157
120
|
exactly< '-' >
|
158
121
|
>
|
159
122
|
>(src);
|
@@ -181,11 +144,11 @@ namespace Sass {
|
|
181
144
|
zero_plus <
|
182
145
|
alternatives <
|
183
146
|
// skip all escaped chars first
|
184
|
-
|
147
|
+
escape_seq,
|
185
148
|
// skip interpolants
|
186
149
|
interpolant,
|
187
150
|
// skip non delimiters
|
188
|
-
|
151
|
+
any_char_but < '\'' >
|
189
152
|
>
|
190
153
|
>,
|
191
154
|
exactly <'\''>
|
@@ -200,11 +163,11 @@ namespace Sass {
|
|
200
163
|
zero_plus <
|
201
164
|
alternatives <
|
202
165
|
// skip all escaped chars first
|
203
|
-
|
166
|
+
escape_seq,
|
204
167
|
// skip interpolants
|
205
168
|
interpolant,
|
206
169
|
// skip non delimiters
|
207
|
-
|
170
|
+
any_char_but < '"' >
|
208
171
|
>
|
209
172
|
>,
|
210
173
|
exactly <'"'>
|
@@ -226,125 +189,110 @@ namespace Sass {
|
|
226
189
|
interpolant,
|
227
190
|
zero_plus< alternatives< identifier, percentage, dimension, hex, number, quoted_string, exactly<'%'> > > > >(src);
|
228
191
|
}
|
229
|
-
/* not used anymore - remove?
|
230
|
-
const char* filename_schema(const char* src) {
|
231
|
-
return one_plus< sequence< zero_plus< alternatives< identifier, number, exactly<'.'>, exactly<'/'> > >,
|
232
|
-
interpolant,
|
233
|
-
zero_plus< alternatives< identifier, number, exactly<'.'>, exactly<'/'> > > > >(src);
|
234
|
-
}*/
|
235
192
|
|
193
|
+
/* not used anymore - remove?
|
236
194
|
const char* filename(const char* src) {
|
237
195
|
return one_plus< alternatives< identifier, number, exactly<'.'> > >(src);
|
238
196
|
}
|
197
|
+
*/
|
239
198
|
|
240
199
|
// Match CSS '@' keywords.
|
241
200
|
const char* at_keyword(const char* src) {
|
242
201
|
return sequence<exactly<'@'>, identifier>(src);
|
243
202
|
}
|
244
203
|
|
245
|
-
const char*
|
246
|
-
return
|
204
|
+
const char* kwd_sel_deep(const char* src) {
|
205
|
+
return word<sel_deep_kwd>(src);
|
247
206
|
}
|
248
207
|
|
249
|
-
const char*
|
250
|
-
return
|
208
|
+
const char* kwd_import(const char* src) {
|
209
|
+
return word<import_kwd>(src);
|
251
210
|
}
|
252
211
|
|
253
|
-
const char*
|
254
|
-
return
|
212
|
+
const char* kwd_at_root(const char* src) {
|
213
|
+
return word<at_root_kwd>(src);
|
255
214
|
}
|
256
215
|
|
257
|
-
const char*
|
258
|
-
return
|
216
|
+
const char* kwd_with_directive(const char* src) {
|
217
|
+
return word<with_kwd>(src);
|
259
218
|
}
|
260
219
|
|
261
|
-
const char*
|
262
|
-
return
|
220
|
+
const char* kwd_without_directive(const char* src) {
|
221
|
+
return word<without_kwd>(src);
|
263
222
|
}
|
264
223
|
|
265
|
-
const char*
|
266
|
-
return
|
224
|
+
const char* kwd_media(const char* src) {
|
225
|
+
return word<media_kwd>(src);
|
267
226
|
}
|
268
227
|
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
} */
|
273
|
-
|
274
|
-
/* not used anymore - remove?
|
275
|
-
const char* vendor_prefix(const char* src) {
|
276
|
-
return alternatives< exactly< vendor_opera_kwd >, exactly< vendor_webkit_kwd >, exactly< vendor_mozilla_kwd >, exactly< vendor_ms_kwd >, exactly< vendor_khtml_kwd > >(src);
|
277
|
-
} */
|
278
|
-
|
279
|
-
/* not used anymore - remove?
|
280
|
-
const char* keyf(const char* src) {
|
281
|
-
return one_plus< alternatives< to, from, percentage > >(src);
|
282
|
-
} */
|
228
|
+
const char* kwd_supports(const char* src) {
|
229
|
+
return word<supports_kwd>(src);
|
230
|
+
}
|
283
231
|
|
284
|
-
const char*
|
285
|
-
return
|
232
|
+
const char* kwd_mixin(const char* src) {
|
233
|
+
return word<mixin_kwd>(src);
|
286
234
|
}
|
287
235
|
|
288
|
-
const char*
|
289
|
-
return
|
236
|
+
const char* kwd_function(const char* src) {
|
237
|
+
return word<function_kwd>(src);
|
290
238
|
}
|
291
239
|
|
292
|
-
const char*
|
293
|
-
return
|
240
|
+
const char* kwd_return_directive(const char* src) {
|
241
|
+
return word<return_kwd>(src);
|
294
242
|
}
|
295
243
|
|
296
|
-
const char*
|
297
|
-
return
|
244
|
+
const char* kwd_include(const char* src) {
|
245
|
+
return word<include_kwd>(src);
|
298
246
|
}
|
299
247
|
|
300
|
-
const char*
|
301
|
-
return
|
248
|
+
const char* kwd_content(const char* src) {
|
249
|
+
return word<content_kwd>(src);
|
302
250
|
}
|
303
251
|
|
304
|
-
const char*
|
305
|
-
return
|
252
|
+
const char* kwd_extend(const char* src) {
|
253
|
+
return word<extend_kwd>(src);
|
306
254
|
}
|
307
255
|
|
308
256
|
|
309
|
-
const char*
|
310
|
-
return
|
257
|
+
const char* kwd_if_directive(const char* src) {
|
258
|
+
return word<if_kwd>(src);
|
311
259
|
}
|
312
260
|
|
313
|
-
const char*
|
314
|
-
return
|
261
|
+
const char* kwd_else_directive(const char* src) {
|
262
|
+
return word<else_kwd>(src);
|
315
263
|
}
|
316
264
|
const char* elseif_directive(const char* src) {
|
317
|
-
return sequence<
|
318
|
-
|
319
|
-
|
265
|
+
return sequence< exactly< else_kwd >,
|
266
|
+
optional_css_whitespace,
|
267
|
+
word< if_after_else_kwd > >(src);
|
320
268
|
}
|
321
269
|
|
322
|
-
const char*
|
323
|
-
return
|
270
|
+
const char* kwd_for_directive(const char* src) {
|
271
|
+
return word<for_kwd>(src);
|
324
272
|
}
|
325
273
|
|
326
|
-
const char*
|
327
|
-
return
|
274
|
+
const char* kwd_from(const char* src) {
|
275
|
+
return word<from_kwd>(src);
|
328
276
|
}
|
329
277
|
|
330
|
-
const char*
|
331
|
-
return
|
278
|
+
const char* kwd_to(const char* src) {
|
279
|
+
return word<to_kwd>(src);
|
332
280
|
}
|
333
281
|
|
334
|
-
const char*
|
335
|
-
return
|
282
|
+
const char* kwd_through(const char* src) {
|
283
|
+
return word<through_kwd>(src);
|
336
284
|
}
|
337
285
|
|
338
|
-
const char*
|
339
|
-
return
|
286
|
+
const char* kwd_each_directive(const char* src) {
|
287
|
+
return word<each_kwd>(src);
|
340
288
|
}
|
341
289
|
|
342
|
-
const char*
|
343
|
-
return
|
290
|
+
const char* kwd_in(const char* src) {
|
291
|
+
return word<in_kwd>(src);
|
344
292
|
}
|
345
293
|
|
346
|
-
const char*
|
347
|
-
return
|
294
|
+
const char* kwd_while_directive(const char* src) {
|
295
|
+
return word<while_kwd>(src);
|
348
296
|
}
|
349
297
|
|
350
298
|
const char* name(const char* src) {
|
@@ -354,16 +302,16 @@ namespace Sass {
|
|
354
302
|
exactly<'\\'> > >(src);
|
355
303
|
}
|
356
304
|
|
357
|
-
const char*
|
358
|
-
return
|
305
|
+
const char* kwd_warn(const char* src) {
|
306
|
+
return word<warn_kwd>(src);
|
359
307
|
}
|
360
308
|
|
361
|
-
const char*
|
362
|
-
return
|
309
|
+
const char* kwd_err(const char* src) {
|
310
|
+
return word<error_kwd>(src);
|
363
311
|
}
|
364
312
|
|
365
|
-
const char*
|
366
|
-
return
|
313
|
+
const char* kwd_dbg(const char* src) {
|
314
|
+
return word<debug_kwd>(src);
|
367
315
|
}
|
368
316
|
|
369
317
|
/* not used anymore - remove?
|
@@ -371,8 +319,8 @@ namespace Sass {
|
|
371
319
|
return sequence< exactly<'@'>, identifier >(src);
|
372
320
|
} */
|
373
321
|
|
374
|
-
const char*
|
375
|
-
return
|
322
|
+
const char* kwd_null(const char* src) {
|
323
|
+
return word<null_kwd>(src);
|
376
324
|
}
|
377
325
|
|
378
326
|
// Match CSS type selectors
|
@@ -430,13 +378,18 @@ namespace Sass {
|
|
430
378
|
const char* binomial(const char* src) {
|
431
379
|
return sequence< optional<sign>,
|
432
380
|
optional<digits>,
|
433
|
-
exactly<'n'>,
|
434
|
-
|
381
|
+
exactly<'n'>,
|
382
|
+
zero_plus < space >,
|
383
|
+
sign,
|
384
|
+
zero_plus < space >,
|
435
385
|
digits >(src);
|
436
386
|
}
|
437
387
|
const char* percentage(const char* src) {
|
438
388
|
return sequence< number, exactly<'%'> >(src);
|
439
389
|
}
|
390
|
+
const char* ampersand(const char* src) {
|
391
|
+
return exactly<'&'>(src);
|
392
|
+
}
|
440
393
|
|
441
394
|
/* not used anymore - remove?
|
442
395
|
const char* em(const char* src) {
|
@@ -463,13 +416,30 @@ namespace Sass {
|
|
463
416
|
|
464
417
|
/* no longer used - remove?
|
465
418
|
const char* rgb_prefix(const char* src) {
|
466
|
-
return
|
419
|
+
return word<rgb_kwd>(src);
|
467
420
|
}*/
|
468
421
|
// Match CSS uri specifiers.
|
469
422
|
|
470
423
|
const char* uri_prefix(const char* src) {
|
471
424
|
return exactly<url_kwd>(src);
|
472
425
|
}
|
426
|
+
const char* uri_value(const char* src)
|
427
|
+
{
|
428
|
+
return
|
429
|
+
sequence <
|
430
|
+
negate <
|
431
|
+
exactly < '$' >
|
432
|
+
>,
|
433
|
+
zero_plus <
|
434
|
+
alternatives <
|
435
|
+
alnum,
|
436
|
+
exactly <'/'>,
|
437
|
+
class_char < uri_chars >
|
438
|
+
>
|
439
|
+
>
|
440
|
+
>(src);
|
441
|
+
}
|
442
|
+
|
473
443
|
// TODO: rename the following two functions
|
474
444
|
/* no longer used - remove?
|
475
445
|
const char* uri(const char* src) {
|
@@ -493,26 +463,26 @@ namespace Sass {
|
|
493
463
|
// Match CSS "!important" keyword.
|
494
464
|
const char* important(const char* src) {
|
495
465
|
return sequence< exactly<'!'>,
|
496
|
-
|
497
|
-
|
466
|
+
optional_css_whitespace,
|
467
|
+
word<important_kwd> >(src);
|
498
468
|
}
|
499
469
|
// Match CSS "!optional" keyword.
|
500
470
|
const char* optional(const char* src) {
|
501
471
|
return sequence< exactly<'!'>,
|
502
|
-
|
503
|
-
|
472
|
+
optional_css_whitespace,
|
473
|
+
word<optional_kwd> >(src);
|
504
474
|
}
|
505
475
|
// Match Sass "!default" keyword.
|
506
476
|
const char* default_flag(const char* src) {
|
507
477
|
return sequence< exactly<'!'>,
|
508
|
-
|
509
|
-
|
478
|
+
optional_css_whitespace,
|
479
|
+
word<default_kwd> >(src);
|
510
480
|
}
|
511
481
|
// Match Sass "!global" keyword.
|
512
482
|
const char* global_flag(const char* src) {
|
513
483
|
return sequence< exactly<'!'>,
|
514
|
-
|
515
|
-
|
484
|
+
optional_css_whitespace,
|
485
|
+
word<global_kwd> >(src);
|
516
486
|
}
|
517
487
|
// Match CSS pseudo-class/element prefixes.
|
518
488
|
const char* pseudo_prefix(const char* src) {
|
@@ -527,14 +497,14 @@ namespace Sass {
|
|
527
497
|
}
|
528
498
|
// Match the CSS negation pseudo-class.
|
529
499
|
const char* pseudo_not(const char* src) {
|
530
|
-
return
|
500
|
+
return word< pseudo_not_kwd >(src);
|
531
501
|
}
|
532
502
|
// Match CSS 'odd' and 'even' keywords for functional pseudo-classes.
|
533
503
|
const char* even(const char* src) {
|
534
|
-
return
|
504
|
+
return word<even_kwd>(src);
|
535
505
|
}
|
536
506
|
const char* odd(const char* src) {
|
537
|
-
return
|
507
|
+
return word<odd_kwd>(src);
|
538
508
|
}
|
539
509
|
// Match CSS attribute-matching operators.
|
540
510
|
const char* exact_match(const char* src) { return exactly<'='>(src); }
|
@@ -564,44 +534,44 @@ namespace Sass {
|
|
564
534
|
}
|
565
535
|
|
566
536
|
// Match Sass boolean keywords.
|
567
|
-
const char*
|
568
|
-
return
|
537
|
+
const char* kwd_true(const char* src) {
|
538
|
+
return word<true_kwd>(src);
|
569
539
|
}
|
570
|
-
const char*
|
571
|
-
return
|
540
|
+
const char* kwd_false(const char* src) {
|
541
|
+
return word<false_kwd>(src);
|
572
542
|
}
|
573
|
-
const char*
|
574
|
-
return
|
543
|
+
const char* kwd_and(const char* src) {
|
544
|
+
return word<and_kwd>(src);
|
575
545
|
}
|
576
|
-
const char*
|
577
|
-
return
|
546
|
+
const char* kwd_or(const char* src) {
|
547
|
+
return word<or_kwd>(src);
|
578
548
|
}
|
579
|
-
const char*
|
580
|
-
return
|
549
|
+
const char* kwd_not(const char* src) {
|
550
|
+
return word<not_kwd>(src);
|
581
551
|
}
|
582
|
-
const char*
|
552
|
+
const char* kwd_eq(const char* src) {
|
583
553
|
return exactly<eq>(src);
|
584
554
|
}
|
585
|
-
const char*
|
555
|
+
const char* kwd_neq(const char* src) {
|
586
556
|
return exactly<neq>(src);
|
587
557
|
}
|
588
|
-
const char*
|
558
|
+
const char* kwd_gt(const char* src) {
|
589
559
|
return exactly<gt>(src);
|
590
560
|
}
|
591
|
-
const char*
|
561
|
+
const char* kwd_gte(const char* src) {
|
592
562
|
return exactly<gte>(src);
|
593
563
|
}
|
594
|
-
const char*
|
564
|
+
const char* kwd_lt(const char* src) {
|
595
565
|
return exactly<lt>(src);
|
596
566
|
}
|
597
|
-
const char*
|
567
|
+
const char* kwd_lte(const char* src) {
|
598
568
|
return exactly<lte>(src);
|
599
569
|
}
|
600
570
|
|
601
571
|
// match specific IE syntax
|
602
572
|
const char* ie_progid(const char* src) {
|
603
573
|
return sequence <
|
604
|
-
|
574
|
+
word<progid_kwd>,
|
605
575
|
exactly<':'>,
|
606
576
|
alternatives< identifier_schema, identifier >,
|
607
577
|
zero_plus< sequence<
|
@@ -610,33 +580,33 @@ namespace Sass {
|
|
610
580
|
> >,
|
611
581
|
zero_plus < sequence<
|
612
582
|
exactly<'('>,
|
613
|
-
|
583
|
+
optional_css_whitespace,
|
614
584
|
optional < sequence<
|
615
585
|
alternatives< variable, identifier_schema, identifier >,
|
616
|
-
|
586
|
+
optional_css_whitespace,
|
617
587
|
exactly<'='>,
|
618
|
-
|
588
|
+
optional_css_whitespace,
|
619
589
|
alternatives< variable, identifier_schema, identifier, quoted_string, number, hexa >,
|
620
590
|
zero_plus< sequence<
|
621
|
-
|
591
|
+
optional_css_whitespace,
|
622
592
|
exactly<','>,
|
623
|
-
|
593
|
+
optional_css_whitespace,
|
624
594
|
sequence<
|
625
595
|
alternatives< variable, identifier_schema, identifier >,
|
626
|
-
|
596
|
+
optional_css_whitespace,
|
627
597
|
exactly<'='>,
|
628
|
-
|
598
|
+
optional_css_whitespace,
|
629
599
|
alternatives< variable, identifier_schema, identifier, quoted_string, number, hexa >
|
630
600
|
>
|
631
601
|
> >
|
632
602
|
> >,
|
633
|
-
|
603
|
+
optional_css_whitespace,
|
634
604
|
exactly<')'>
|
635
605
|
> >
|
636
606
|
>(src);
|
637
607
|
}
|
638
608
|
const char* ie_expression(const char* src) {
|
639
|
-
return sequence <
|
609
|
+
return sequence < word<expression_kwd>, delimited_by< '(', ')', true> >(src);
|
640
610
|
}
|
641
611
|
const char* ie_property(const char* src) {
|
642
612
|
return alternatives < ie_expression, ie_progid >(src);
|
@@ -644,15 +614,15 @@ namespace Sass {
|
|
644
614
|
|
645
615
|
// const char* ie_args(const char* src) {
|
646
616
|
// return sequence< alternatives< ie_keyword_arg, value_schema, quoted_string, interpolant, number, identifier, delimited_by< '(', ')', true> >,
|
647
|
-
// zero_plus< sequence<
|
617
|
+
// zero_plus< sequence< optional_css_whitespace, exactly<','>, optional_css_whitespace, alternatives< ie_keyword_arg, value_schema, quoted_string, interpolant, number, identifier, delimited_by<'(', ')', true> > > > >(src);
|
648
618
|
// }
|
649
619
|
|
650
620
|
const char* ie_keyword_arg(const char* src) {
|
651
621
|
return sequence<
|
652
622
|
alternatives< variable, identifier_schema, identifier >,
|
653
|
-
|
623
|
+
optional_css_whitespace,
|
654
624
|
exactly<'='>,
|
655
|
-
|
625
|
+
optional_css_whitespace,
|
656
626
|
alternatives< variable, identifier_schema, identifier, quoted_string, number, hexa >
|
657
627
|
>(src);
|
658
628
|
}
|
@@ -666,7 +636,7 @@ namespace Sass {
|
|
666
636
|
const char* folders(const char* src) {
|
667
637
|
return zero_plus< folder >(src);
|
668
638
|
}*/
|
669
|
-
|
639
|
+
/* not used anymore - remove?
|
670
640
|
const char* chunk(const char* src) {
|
671
641
|
char inside_str = 0;
|
672
642
|
const char* p = src;
|
@@ -693,6 +663,7 @@ namespace Sass {
|
|
693
663
|
// unreachable
|
694
664
|
return 0;
|
695
665
|
}
|
666
|
+
*/
|
696
667
|
|
697
668
|
// follow the CSS spec more closely and see if this helps us scan URLs correctly
|
698
669
|
/* not used anymore - remove?
|
@@ -720,14 +691,10 @@ namespace Sass {
|
|
720
691
|
return alternatives< unicode, class_char<escape_chars> >(src);
|
721
692
|
}*/
|
722
693
|
|
723
|
-
const char* url(const char* src) {
|
724
|
-
return chunk(src);
|
725
|
-
}
|
726
|
-
|
727
694
|
const char* static_string(const char* src) {
|
728
695
|
const char* pos = src;
|
729
696
|
const char * s = quoted_string(pos);
|
730
|
-
Token t(pos, s
|
697
|
+
Token t(pos, s);
|
731
698
|
const unsigned int p = count_interval< interpolant >(t.begin, t.end);
|
732
699
|
return (p == 0) ? t.end : 0;
|
733
700
|
}
|
@@ -738,7 +705,7 @@ namespace Sass {
|
|
738
705
|
percentage,
|
739
706
|
hex,
|
740
707
|
number,
|
741
|
-
sequence< exactly<'!'>,
|
708
|
+
sequence< exactly<'!'>, word<important_kwd> >
|
742
709
|
>(src);
|
743
710
|
}
|
744
711
|
|