sassc 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/libsass/.gitignore +6 -0
- data/ext/libsass/.travis.yml +5 -1
- data/ext/libsass/Makefile +12 -3
- data/ext/libsass/Makefile.am +16 -28
- data/ext/libsass/Readme.md +1 -0
- data/ext/libsass/appveyor.yml +1 -2
- data/ext/libsass/ast.cpp +9 -0
- data/ext/libsass/ast.hpp +152 -55
- data/ext/libsass/ast_factory.hpp +2 -0
- data/ext/libsass/ast_fwd_decl.hpp +1 -0
- data/ext/libsass/backtrace.hpp +2 -2
- data/ext/libsass/bind.cpp +15 -13
- data/ext/libsass/configure.ac +17 -5
- data/ext/libsass/constants.cpp +22 -2
- data/ext/libsass/constants.hpp +21 -2
- data/ext/libsass/context.cpp +79 -57
- data/ext/libsass/context.hpp +23 -9
- data/ext/libsass/contextualize.cpp +2 -28
- data/ext/libsass/contextualize.hpp +6 -10
- data/ext/libsass/contextualize_eval.cpp +93 -0
- data/ext/libsass/contextualize_eval.hpp +44 -0
- data/ext/libsass/contrib/plugin.cpp +57 -0
- data/ext/libsass/cssize.cpp +3 -1
- data/ext/libsass/debugger.hpp +242 -83
- data/ext/libsass/emitter.cpp +1 -1
- data/ext/libsass/emitter.hpp +1 -1
- data/ext/libsass/environment.hpp +109 -25
- data/ext/libsass/error_handling.cpp +3 -3
- data/ext/libsass/error_handling.hpp +0 -1
- data/ext/libsass/eval.cpp +145 -61
- data/ext/libsass/eval.hpp +9 -1
- data/ext/libsass/expand.cpp +134 -60
- data/ext/libsass/expand.hpp +5 -2
- data/ext/libsass/extend.cpp +7 -5
- data/ext/libsass/file.cpp +176 -123
- data/ext/libsass/file.hpp +44 -7
- data/ext/libsass/functions.cpp +36 -17
- data/ext/libsass/functions.hpp +2 -2
- data/ext/libsass/inspect.cpp +23 -14
- data/ext/libsass/inspect.hpp +1 -0
- data/ext/libsass/json.cpp +132 -135
- data/ext/libsass/lexer.cpp +133 -0
- data/ext/libsass/lexer.hpp +239 -0
- data/ext/libsass/listize.cpp +83 -0
- data/ext/libsass/listize.hpp +41 -0
- data/ext/libsass/operation.hpp +2 -0
- data/ext/libsass/output.cpp +5 -6
- data/ext/libsass/parser.cpp +426 -388
- data/ext/libsass/parser.hpp +97 -109
- data/ext/libsass/plugins.cpp +15 -2
- data/ext/libsass/plugins.hpp +6 -4
- data/ext/libsass/position.cpp +52 -17
- data/ext/libsass/position.hpp +19 -17
- data/ext/libsass/prelexer.cpp +202 -235
- data/ext/libsass/prelexer.hpp +73 -333
- data/ext/libsass/sass.cpp +21 -11
- data/ext/libsass/sass.h +6 -6
- data/ext/libsass/sass_context.cpp +167 -81
- data/ext/libsass/sass_context.h +26 -6
- data/ext/libsass/sass_functions.cpp +49 -40
- data/ext/libsass/sass_functions.h +55 -43
- data/ext/libsass/sass_interface.cpp +9 -8
- data/ext/libsass/sass_interface.h +3 -3
- data/ext/libsass/sass_version.h +8 -0
- data/ext/libsass/sass_version.h.in +8 -0
- data/ext/libsass/script/ci-build-libsass +3 -3
- data/ext/libsass/script/ci-report-coverage +2 -1
- data/ext/libsass/source_map.cpp +2 -2
- data/ext/libsass/util.cpp +60 -11
- data/ext/libsass/util.hpp +6 -1
- data/ext/libsass/win/libsass.filters +12 -0
- data/ext/libsass/win/libsass.vcxproj +10 -0
- data/lib/sassc.rb +3 -1
- data/lib/sassc/cache_stores/base.rb +2 -0
- data/lib/sassc/dependency.rb +3 -1
- data/lib/sassc/engine.rb +31 -16
- data/lib/sassc/error.rb +3 -2
- data/lib/sassc/functions_handler.rb +54 -0
- data/lib/sassc/import_handler.rb +41 -0
- data/lib/sassc/importer.rb +4 -31
- data/lib/sassc/native.rb +1 -1
- data/lib/sassc/native/native_context_api.rb +3 -2
- data/lib/sassc/script.rb +0 -51
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +1 -0
- data/test/custom_importer_test.rb +72 -69
- data/test/engine_test.rb +53 -54
- data/test/functions_test.rb +40 -39
- data/test/native_test.rb +145 -149
- data/test/output_style_test.rb +98 -0
- data/test/test_helper.rb +21 -7
- metadata +28 -2
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
|
|