A CSS parser written in OCaml.
Parses a CSS string and produces an AST.
npm install -g esyesy# to build and run testsesy dune runtest
let css={| {color:red!important;width:100%; }|}inlet ast=Css.Parser.parse_stylesheet cssin(* ast is a value of type Css.Stylesheet.t defined in lib/types.mli*)(* that looks like that: ([Rule.Style_rule {Style_rule.prelude = ([], Location.none); block = ([Declaration_list.Declaration {Declaration.name = ("color", Location.none); value = ([(Component_value.Ident "blue", Location.none)], Location.none); important = (true, Location.none); loc = Location.none; }; {Declaration.name = ("width", Location.none); value = ([(Component_value.Percentage "100", Location.none)], Location.none); important = (false, Location.none); loc = Location.none; }; ], Location.none); loc = Location.none; }; ], Location.none)*)Whitespaces and comments are discarded by the lexer, so they are not availableto the parser. An exception is made for significant whitespaces in rulepreludes, to disambiguate between selectors likep :first-child andp:first-child. These whitespaces are replaced with* to keep CSS semanticsintact. So, e.g.,p :first-child is parsed asp *:first-child,p .classasp *.class, andp #id asp *#id.