File tree Expand file tree Collapse file tree 8 files changed +29
-14
lines changed Expand file tree Collapse file tree 8 files changed +29
-14
lines changed Original file line number Diff line number Diff line change @@ -88,10 +88,6 @@ namespace Sass {
88
88
extern const char progid_kwd[] = " progid" ;
89
89
extern const char expression_kwd[] = " expression" ;
90
90
extern const char calc_fn_kwd[] = " calc" ;
91
- extern const char calc_kwd[] = " calc(" ;
92
- extern const char moz_calc_kwd[] = " -moz-calc(" ;
93
- extern const char webkit_calc_kwd[] = " -webkit-calc(" ;
94
- extern const char ms_calc_kwd[] = " -ms-calc(" ;
95
91
96
92
// css selector keywords
97
93
extern const char sel_deep_kwd[] = " /deep/" ;
Original file line number Diff line number Diff line change @@ -87,11 +87,7 @@ namespace Sass {
87
87
extern const char odd_kwd[];
88
88
extern const char progid_kwd[];
89
89
extern const char expression_kwd[];
90
- extern const char calc_kwd[];
91
90
extern const char calc_fn_kwd[];
92
- extern const char moz_calc_kwd[];
93
- extern const char webkit_calc_kwd[];
94
- extern const char ms_calc_kwd[];
95
91
96
92
// css selector keywords
97
93
extern const char sel_deep_kwd[];
Original file line number Diff line number Diff line change @@ -652,7 +652,7 @@ namespace Sass {
652
652
(d->type () == Definition::MIXIN ? " [m]" : " [f]" )] = dd;
653
653
654
654
if (d->type () == Definition::FUNCTION && (
655
- d->name () == " calc " ||
655
+ Prelexer::calc_fn_call ( d->name (). c_str ()) ||
656
656
d->name () == " element" ||
657
657
d->name () == " expression" ||
658
658
d->name () == " url"
Original file line number Diff line number Diff line change @@ -121,13 +121,15 @@ namespace Sass {
121
121
const char * xdigit (const char * src) { return is_xdigit (*src) ? src + 1 : 0 ; }
122
122
const char * alnum (const char * src) { return is_alnum (*src) ? src + 1 : 0 ; }
123
123
const char * punct (const char * src) { return is_punct (*src) ? src + 1 : 0 ; }
124
+ const char * hyphen (const char * src) { return *src && *src == ' -' ? src + 1 : 0 ; }
124
125
const char * character (const char * src) { return is_character (*src) ? src + 1 : 0 ; }
125
126
const char * uri_character (const char * src) { return is_uri_character (*src) ? src + 1 : 0 ; }
126
127
const char * escapable_character (const char * src) { return is_escapable_character (*src) ? src + 1 : 0 ; }
127
128
128
129
// Match multiple ctype characters.
129
130
const char * spaces (const char * src) { return one_plus<space>(src); }
130
131
const char * digits (const char * src) { return one_plus<digit>(src); }
132
+ const char * hyphens (const char * src) { return one_plus<hyphen>(src); }
131
133
132
134
// Whitespace handling.
133
135
const char * no_spaces (const char * src) { return negate< space >(src); }
Original file line number Diff line number Diff line change @@ -44,6 +44,7 @@ namespace Sass {
44
44
const char * xdigit (const char * src);
45
45
const char * alnum (const char * src);
46
46
const char * punct (const char * src);
47
+ const char * hyphen (const char * src);
47
48
const char * unicode (const char * src);
48
49
const char * nonascii (const char * src);
49
50
const char * character (const char * src);
@@ -53,6 +54,7 @@ namespace Sass {
53
54
// Match multiple ctype characters.
54
55
const char * spaces (const char * src);
55
56
const char * digits (const char * src);
57
+ const char * hyphens (const char * src);
56
58
57
59
// Whitespace handling.
58
60
const char * no_spaces (const char * src);
Original file line number Diff line number Diff line change @@ -1325,10 +1325,7 @@ namespace Sass {
1325
1325
else if (peek< ie_keyword_arg >()) {
1326
1326
return parse_ie_keyword_arg ();
1327
1327
}
1328
- else if (peek< exactly< calc_kwd > >() ||
1329
- peek< exactly< moz_calc_kwd > >() ||
1330
- peek< exactly< ms_calc_kwd > >() ||
1331
- peek< exactly< webkit_calc_kwd > >()) {
1328
+ else if (peek< sequence < calc_fn_call, exactly <' (' > > >()) {
1332
1329
return parse_calc_function ();
1333
1330
}
1334
1331
else if (lex < functional_schema >()) {
Original file line number Diff line number Diff line change @@ -825,6 +825,22 @@ namespace Sass {
825
825
return sequence<exactly<' $' >, identifier>(src);
826
826
}
827
827
828
+ // parse `calc`, `-a-calc` and `--b-c-calc`
829
+ // but do not parse `foocalc` or `foo-calc`
830
+ const char * calc_fn_call (const char * src) {
831
+ return sequence <
832
+ optional < sequence <
833
+ hyphens,
834
+ one_plus < sequence <
835
+ strict_identifier,
836
+ hyphens
837
+ > >
838
+ > >,
839
+ exactly < calc_fn_kwd >,
840
+ word_boundary
841
+ >(src);
842
+ }
843
+
828
844
// Match Sass boolean keywords.
829
845
const char * kwd_true (const char * src) {
830
846
return word<true_kwd>(src);
@@ -1183,6 +1199,12 @@ namespace Sass {
1183
1199
// lexer special_fn: these functions cannot be overloaded
1184
1200
// (/((-[\w-]+-)?(calc|element)|expression|progid:[a-z\.]*)\(/i)
1185
1201
const char * re_special_fun (const char * src) {
1202
+
1203
+ // match this first as we test prefix hyphens
1204
+ if (const char * calc = calc_fn_call (src)) {
1205
+ return calc;
1206
+ }
1207
+
1186
1208
return sequence <
1187
1209
optional <
1188
1210
sequence <
@@ -1197,7 +1219,6 @@ namespace Sass {
1197
1219
>
1198
1220
>,
1199
1221
alternatives <
1200
- word < calc_fn_kwd >,
1201
1222
word < expression_kwd >,
1202
1223
sequence <
1203
1224
sequence <
Original file line number Diff line number Diff line change @@ -331,6 +331,7 @@ namespace Sass {
331
331
332
332
// Match SCSS variable names.
333
333
const char * variable (const char * src);
334
+ const char * calc_fn_call (const char * src);
334
335
335
336
// IE stuff
336
337
const char * ie_progid (const char * src);
You can’t perform that action at this time.
0 commit comments