From 1c3e2ecb73ab5ded9ccf2f1313652ee2d2907dd4 Mon Sep 17 00:00:00 2001 From: Taddeus Kroes <taddeuskroes@gmail.com> Date: Fri, 18 Jul 2014 17:30:40 +0200 Subject: [PATCH] Added some support for xross-browser compatibility hacks --- lexer.mll | 21 ++++++++++++--------- parser.mly | 4 +++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lexer.mll b/lexer.mll index 47f8461..2fa2832 100644 --- a/lexer.mll +++ b/lexer.mll @@ -25,7 +25,7 @@ let unicode = '\\' h(h(h(h(h(h)?)?)?)?)? wc? let escape = unicode | '\\'[^'\r' '\n' '\012' '0'-'9' 'a'-'f' 'A'-'F'] let nmstart = ['_' 'a'-'z' 'A'-'Z'] | nonascii | escape let nmchar = ['_' 'a'-'z' 'A'-'Z' '0'-'9' '-'] | nonascii | escape -let string1 = '"'([^'\n' '\r' '\012' '"'] | '\\'nl | escape)*'"' +let string1 = '"' ([^'\n' '\r' '\012' '"'] | '\\'nl | escape)* '"' let string2 = '\'' ([^'\n' '\r' '\012' '\''] | '\\' nl | escape)* '\'' let mystring = string1 | string2 let badstring1 = '"' ([^'\n' '\r' '\012' '"'] | '\\'nl | escape)* '\\'? @@ -71,6 +71,8 @@ let X = ['x' 'X'] let Y = ['y' 'Y'] let Z = ['z' 'Z'] +let uagent = ('-' ("webkit" | "moz" | "ms" | "o") '-')? + rule token = parse | s { S } @@ -88,14 +90,14 @@ rule token = parse | '#' (name as nm) { HASH nm } - | '@' I M P O R T { IMPORT_SYM } - | '@' P A G E { PAGE_SYM } - | '@' M E D I A { MEDIA_SYM } - | "@charset " { CHARSET_SYM } - | '@' F O N T '-' F A C E { FONT_FACE_SYM } - | '@' N A M E S P A C E { NAMESPACE_SYM } - | '@' K E Y F R A M E S { KEYFRAMES_SYM } - | '@' S U P P O R T S { SUPPORTS_SYM } + | '@' I M P O R T { IMPORT_SYM } + | '@' P A G E { PAGE_SYM } + | '@' M E D I A { MEDIA_SYM } + | "@charset " { CHARSET_SYM } + | '@' F O N T '-' F A C E { FONT_FACE_SYM } + | '@' N A M E S P A C E { NAMESPACE_SYM } + | '@' uagent K E Y F R A M E S { KEYFRAMES_SYM } + | '@' S U P P O R T S { SUPPORTS_SYM } | (w | comment)* w A N D w (w | comment)* { SUPPORTS_AND } | (w | comment)* w O R w (w | comment)* { SUPPORTS_OR } @@ -141,4 +143,5 @@ rule token = parse | eof | '\000' { EOF } + | _ { token lexbuf } | _ as c { raise (SyntaxError ("unexpected '" ^ Char.escaped c ^ "'")) } diff --git a/parser.mly b/parser.mly index 0e71aa0..45f148a 100644 --- a/parser.mly +++ b/parser.mly @@ -251,7 +251,9 @@ pseudo: declaration: | name=property S* COLON S* value=expr important=boption(ig2(IMPORTANT_SYM, S*)) { (String.lowercase name, value, important) } -%inline property: name=IDENT { name } +%inline property: + | name=IDENT { name } + | STAR name=IDENT { "*" ^ name } (* IE7 property name hack *) expr: | l=exprl { concat_terms l } -- GitLab