Skip to content

Commit d607612

Browse files
committed
Add all vendor prefixes for @Keyframes
1 parent 0d29943 commit d607612

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

lib/lexer.ml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,14 @@ let at_rule = [%sedlex.regexp? "@", ident]
148148
let at_rule_without_body =
149149
[%sedlex.regexp? "@", ("charset" | "import" | "namespace")]
150150

151+
let vendor_prefix = [%sedlex.regexp? "-webkit-" | "-moz-" | "-o-" | "-ms-"]
152+
151153
let nested_at_rule =
152154
[%sedlex.regexp?
153155
( "@",
154-
( "-webkit-keyframes" | "document" | "keyframes" | "media" | "supports"
155-
| "scope" ) )]
156+
( "document" | "keyframes"
157+
| vendor_prefix, "keyframes"
158+
| "media" | "supports" | "scope" ) )]
156159

157160
let _a = [%sedlex.regexp? 'A' | 'a']
158161

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ocaml-css-parser",
3-
"version": "0.2.3",
3+
"version": "0.2.4",
44
"description": "CSS parser written in OCaml",
55
"license": "MIT",
66
"esy": {

test/test_parser.ml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,6 +1166,60 @@ let test_at_rule_scope () =
11661166
Alcotest.(check (testable Css_fmt_printer.dump_stylesheet eq_ast))
11671167
"different CSS AST" expected_ast ast
11681168

1169+
let test_at_rule_keyframes_with_vendor_prefixes () =
1170+
let css =
1171+
{|
1172+
@-webkit-keyframes slidein {}
1173+
@-moz-keyframes slidein {}
1174+
@-o-keyframes slidein {}
1175+
@-ms-keyframes slidein {}
1176+
|}
1177+
in
1178+
let ast = Css.Parser.parse_stylesheet css in
1179+
let expected_ast =
1180+
( [
1181+
Rule.At_rule
1182+
{
1183+
At_rule.name = ("-webkit-keyframes", Location.none);
1184+
prelude =
1185+
( [ (Component_value.Ident "slidein", Location.none) ],
1186+
Location.none );
1187+
block = Brace_block.Stylesheet ([], Location.none);
1188+
loc = Location.none;
1189+
};
1190+
Rule.At_rule
1191+
{
1192+
At_rule.name = ("-moz-keyframes", Location.none);
1193+
prelude =
1194+
( [ (Component_value.Ident "slidein", Location.none) ],
1195+
Location.none );
1196+
block = Brace_block.Stylesheet ([], Location.none);
1197+
loc = Location.none;
1198+
};
1199+
Rule.At_rule
1200+
{
1201+
At_rule.name = ("-o-keyframes", Location.none);
1202+
prelude =
1203+
( [ (Component_value.Ident "slidein", Location.none) ],
1204+
Location.none );
1205+
block = Brace_block.Stylesheet ([], Location.none);
1206+
loc = Location.none;
1207+
};
1208+
Rule.At_rule
1209+
{
1210+
At_rule.name = ("-ms-keyframes", Location.none);
1211+
prelude =
1212+
( [ (Component_value.Ident "slidein", Location.none) ],
1213+
Location.none );
1214+
block = Brace_block.Stylesheet ([], Location.none);
1215+
loc = Location.none;
1216+
};
1217+
],
1218+
Location.none )
1219+
in
1220+
Alcotest.(check (testable Css_fmt_printer.dump_stylesheet eq_ast))
1221+
"different CSS AST" expected_ast ast
1222+
11691223
let test_set =
11701224
[
11711225
("CSS parser", `Quick, test_stylesheet_parser);
@@ -1189,4 +1243,7 @@ let test_set =
11891243
("negative values", `Quick, test_negative_numbers);
11901244
("CSS variables", `Quick, test_css_variables);
11911245
("@scope", `Quick, test_at_rule_scope);
1246+
( "@keyframes with vendor prefixes",
1247+
`Quick,
1248+
test_at_rule_keyframes_with_vendor_prefixes );
11921249
]

0 commit comments

Comments
 (0)