### ----------------------------------------------------
### -- CSS::Grammar
### -- Licenses: Artistic-2.0
### -- Authors: David Warring
### -- File: t/compat.json
### ----------------------------------------------------
[ "ws", { "input" : " " } ]
[ "ws", { "input" : "/* comments\n1 */" } ]
[ "ws", { "input" : "<!-- comments\n2 -->" } ]
[ "ws", { "input" : "<!-- unterminated comment", "warnings" : [ "unclosed comment at end of input" ] } ]
[ "ws", { "input" : "/* unterminated\nstar\ncomment ... ", "warnings" : [ "unclosed comment at end of input" ] } ]
[ "name", { "input" : "my-class", "ast" : { "name" : "my-class" } } ]
[ "name", { "input" : "\\021", "ast" : { "name" : "!" } } ]
[ "name", { "skip" : "unicode surrogates handling in rakudo", "input" : "0D800", "ast" : { "name" : "�" }, "warnings": [ "invalid unicode code-point: U+0D800" ], "css1" : { "parse" : "0D80", "ast" : "඀", "warnings" : [] } } ]
[ "num", { "input" : "2.52", "ast" : { "num" : 2.52 } } ]
[ "num", { "input" : "0", "ast" : { "num" : 0 } } ]
[ "num", { "input" : "1", "ast" : { "num" : 1 } } ]
[ "num", { "input" : ".1", "ast" : { "num" : 0.1 } } ]
[ "num", { "input" : "+1.9", "ast" : { "num" : 1.9 } } ]
[ "num", { "input" : "-3.14", "ast" : { "num" : -3.14 } } ]
[ "id", { "input" : "#z0y\\021", "ast" : { "id" : "z0y!" } } ]
[ "id", { "input" : "#\\\nz0y\\021", "ast" : { "id" : "z0y!" } } ]
// unicode trailing ws consumed in css2.1 and css3, but not css1
[ "string", { "input" : "'hi\\021 there'", "ast" : { "string" : "hi!there" }, "css1" : { "ast" : { "string" : "hi! there" } } } ]
[ "class", { "input" : ".zippy", "ast" : { "class" : "zippy" } } ]
[ "class", { "input" : ".\\55ft", "ast" : { "class" : "\u055ft" } } ]
[ "color", { "input" : "Rgb(10, 20, 30)", "ast" : { "rgb" : [ { "num" : 10 }, { "num" : 20 }, { "num" : 30 } ] } } ]
[ "term", { "input" : "foo(bar)", "ast" : { "func" : { "ident" : "foo", "expr" : [ { "ident" : "bar" } ] } }, "css1" : { "ast" : null, "parse" : "" } } ]
[ "expr", { "input" : "fr-ca", "ast" : { "expr" : [ { "ident" : "fr-ca" } ] } } ]
[ "pseudo", { "input" : ":visited", "ast" : { "pseudo-class" : "visited" } } ]
[ "pseudo", { "input" : ":Lang(fr-ca)", "ast" : { "pseudo-func" : { "ident" : "lang", "expr" : [ { "ident" : "fr-ca" } ] } }, "css1" : { "parse" : ":Lang", "ast" : { "pseudo-class" : "lang" } } } ]
[ "import", { "input" : "@import url('file:///etc/passwd');", "ast" : { "at-rule" : { "at-keyw" : "import", "url" : "file:///etc/passwd" } } } ]
[ "import", { "input" : "@IMPORT '/etc/group';", "ast" : { "at-rule" : { "at-keyw" : "import", "url" : "/etc/group" } } } ]
// imports can be assigned to media types. See:
// http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#at-import
[ "import", { "input" : "@import url(bluish\\.css) projection, tv;", "ast" : { "at-rule" : { "at-keyw" : "import", "url" : "bluish.css", "media-list" : [ { "media-query" : [ { "ident" : "projection" } ] }, { "media-query" : [ { "ident" : "tv" } ] } ] } }, "css1" : { "parse" : "", "ast" : null } } ]
[ "class", { "input" : ".my-class", "ast" : { "class" : "my-class" } } ]
[ "simple-selector", { "input" : "BODY", "ast" : { "simple-selector" : [ { "qname" : { "element-name" : "body" } } ] } } ]
[ "selector", { "input" : "A:Visited", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "pseudo-class" : "visited" } ] } ] } } ]
[ "selector", { "input" : ":visited", "ast" : { "selector" : [ { "simple-selector" : [ { "pseudo-class" : "visited" } ] } ] } } ]
// Note: CSS1 doesn't allow '_' in names or identifiers
[ "selector", { "input" : ".some_class", "ast" : { "selector" : [ { "simple-selector" : [ { "class" : "some_class" } ] } ] }, "css1" : { "parse" : ".some", "ast" : { "selector" : [ { "simple-selector" : [ { "class" : "some" } ] } ] } } } ]
[ "selector", { "input" : ".some_class:link", "ast" : { "selector" : [ { "simple-selector" : [ { "class" : "some_class" }, { "pseudo-class" : "link" } ] } ] }, "css1" : { "parse" : ".some", "ast" : { "selector" : [ { "simple-selector" : [ { "class" : "some" } ] } ] } } } ]
[ "simple-selector", { "input" : "BODY.some_class", "ast" : { "simple-selector" : [ { "qname" : { "element-name" : "body" } }, { "class" : "some_class" } ] }, "css1" : { "parse" : "BODY.some", "ast" : { "simple-selector" : [ { "qname" : { "element-name" : "body" } }, { "class" : "some" } ] } } } ]
[ "pseudo", { "input" : ":first-line", "ast" : { "pseudo-elem" : "first-line" } } ]
[ "selector", { "input" : "BODY.some-class:active", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "body" } }, { "class" : "some-class" }, { "pseudo-class" : "active" } ] } ] } } ]
// CSS1 selectors are more restrictive and order sensitive
[ "selector", { "input" : ".c1#ID.c2 .d1.d2", "ast" : { "selector" : [ { "simple-selector" : [ { "class" : "c1" }, { "id" : "ID" }, { "class" : "c2" } ] }, { "simple-selector" : [ { "class" : "d1" }, { "class" : "d2" } ] } ] } , "css1" : { "ast" : { "selector" : [ { "simple-selector" : [ { "class" : "c1" } ] }, { "simple-selector" : [ { "id" : "ID" }, { "class" : "c2" } ] }, { "simple-selector" : [ { "class" : "d1" } ] }, { "simple-selector" : [ { "class" : "d2" } ] } ] } } } ]
// Test for whitespace sensitivity in selectors
[ "selector", { "input" : "#my-id /* white-space */ :first-line", "ast" : { "selector" : [ { "simple-selector" : [ { "id" : "my-id" } ] }, { "simple-selector" : [ { "pseudo-elem" : "first-line" } ] } ] } } ]
[ "selector", { "input" : "#my-id:first-line", "ast" : { "selector" : [ { "simple-selector" : [ { "id" : "my-id" }, { "pseudo-elem" : "first-line" } ] } ] } } ]
[ "selector", { "input" : "#my-id+:first-line", "css1" : { "parse" : "#my-id", "ast" : { "selector" : [ { "simple-selector" : [ { "id" : "my-id" } ] } ] } }, "ast" : { "selector" : [ { "simple-selector" : [ { "id" : "my-id" } ] }, { "op" : "+" }, { "simple-selector" : [ { "pseudo-elem" : "first-line" } ] } ] } } ]
// CSS1 doesn't understand '+' combinator
[ "selector", { "input" : "#my-id + :first-line", "css1" : { "parse" : "#my-id", "ast" : { "selector" : [ { "simple-selector" : [ { "id" : "my-id" } ] } ] } }, "ast" : { "selector" : [ { "simple-selector" : [ { "id" : "my-id" } ] }, { "op" : "+" }, { "simple-selector" : [ { "pseudo-elem" : "first-line" } ] } ] } } ]
// '>' combinator also introduced with css2.1
[ "selector", { "input" : "ol > li:first-child + li +li+ li+li", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "ol" } } ] }, { "op" : ">" }, { "simple-selector" : [ { "qname" : { "element-name" : "li" } }, { "pseudo-class" : "first-child" } ] }, { "op" : "+" }, { "simple-selector" : [ { "qname" : { "element-name" : "li" } } ] }, { "op" : "+" }, { "simple-selector" : [ { "qname" : { "element-name" : "li" } } ] }, { "op" : "+" }, { "simple-selector" : [ { "qname" : { "element-name" : "li" } } ] }, { "op" : "+" }, { "simple-selector" : [ { "qname" : { "element-name" : "li" } } ] } ] }, "css1" : { "parse" : "ol", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "ol" } } ] } ] } } } ]
[ "selector", { "input" : "A:first-letter", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "pseudo-elem" : "first-letter" } ] } ] } } ]
[ "selector", { "input" : "A:Link IMG", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "pseudo-class" : "link" } ] }, { "simple-selector" : [ { "qname" : { "element-name" : "img" } } ] } ] } } ]
// css1 doesn't understand ':after' pseudo element
[ "selector", { "input" : "A:After IMG", "css1" : { "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "pseudo-class" : "after" } ] }, { "simple-selector" : [ { "qname" : { "element-name" : "img" } } ] } ] } }, "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "pseudo-elem" : "after" } ] }, { "simple-selector" : [ { "qname" : { "element-name" : "img" } } ] } ] } } ]
[ "selector", { "input" : "H1[lang=fr]", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h1" } }, { "attrib" : [ { "ident" : "lang" }, { "op" : "=" }, { "ident" : "fr" } ] } ] } ] }, "css1" : { "parse" : "H1", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h1" } } ] } ] } } } ]
[ "selector", { "input" : "*[lang=fr]", "ast" : { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "*" } }, { "attrib" : [ { "ident" : "lang" }, { "op" : "=" }, { "ident" : "fr" } ] } ] } ] }, "css1" : { "parse" : "", "ast" : null } } ]
[ "expr", { "input" : "RGB(-10,133,257 ), #fa7", "ast" : { "expr" : [ { "rgb" : [ { "num" : 0 }, { "num" : 133 }, { "num" : 255 } ] }, { "op" : "," }, { "rgb" : [ { "num" : 255 }, { "num" : 170 }, { "num" : 119 } ] } ] } } ]
[ "expr", { "input" : "'Helvetica Neue',helvetica-neue, helvetica", "ast" : { "expr" : [ { "string" : "Helvetica Neue" }, { "op" : "," }, { "ident" : "helvetica-neue" }, { "op" : "," }, { "ident" : "helvetica" } ] } } ]
[ "expr", { "input" : "+13mm EM -ex em(42) em_ 14ch 15rem", "ast" : { "expr" : [ { "mm" : 13 }, { "em" : 1 }, {"ex" : -1}, { "func" : { "ident" : "em", "expr" : [ { "num" : 42 } ] } }, { "ident" : "em_" }, { "ch": 14 }, { "rem": 15 } ] }, "css1" : { "parse" : "+13mm EM -ex em ", "ast" : { "expr" : [ { "mm" : 13 }, { "em" : 1 }, {"ex" : -1}, { "em" : 1 } ] } } } ]
[ "expr", { "input" : "-1CM", "ast" : { "expr" : [ { "cm" : -1 } ] } } ]
[ "expr", { "input" : "2px solid blue", "ast" : { "expr" : [ { "px" : 2 }, { "ident" : "solid" }, { "ident" : "blue" } ] } } ]
// css21+ expressions
[ "expr", { "input" : "top,ccc/dddd", "ast" : { "expr" : [ { "ident" : "top" }, { "op" : "," }, { "ident" : "ccc" }, { "op" : "/" }, { "ident" : "dddd" } ] } } ]
[ "expr", { "input" : "-moz-linear-gradient", "ast" : { "expr" : [ { "ident" : "-moz-linear-gradient" } ] }, "css1" : { "ast" : { "expr" : [ { "ident" : "moz-linear-gradient" } ] } } } ]
// css2 understands some functions
[ "expr", { "input" : "-moz-linear-gradient(top, t2, t3)", "ast" : { "expr" : [ { "func" : { "ident" : "-moz-linear-gradient", "expr" : [ { "ident" : "top" }, { "op" : "," }, { "ident" : "t2" }, { "op" : "," }, { "ident" : "t3" } ] } } ] }, "css1" : { "ast" : null, "parse" : "", "warnings" : null } } ]
[ "expr", { "input" : "Alpha(Opacity=70)", "ast" : { "expr" : [ { "func" : { "ident" : "alpha", "expr" : [ { "ident" : "opacity" }, { "op" : "=" }, { "num" : 70 } ] } } ] }, "css1" : { "ast" : null, "parse" : "", "warnings" : null } } ]
[ "expr", { "input" : "12px/20px", "ast" : { "expr" : [ { "px" : 12 }, { "op" : "/" }, { "px" : 20 } ] } } ]
[ "declarations", { "input" : "{terms: 42 7% 12.5cm -1em 2 ex 45deg 10s 50Hz 'ZZ' counter(a,b) counters(p,'s') attr(data-foo)}", "ast" : { "declarations" : [ { "property" : { "ident" : "terms", "expr" : [ { "num" : 42 }, { "percent" : 7 }, { "cm" : 12.5 }, { "em" : -1 }, { "num" : 2 }, { "ex" : 1 }, { "deg" : 45 }, { "s" : 10 }, { "hz" : 50 }, { "string" : "ZZ" }, { "func" : { "ident" : "counter", "expr" : [ { "ident" : "a" }, { "op" : "," }, { "ident" : "b" } ] } }, { "func" : { "ident" : "counters", "expr" : [ { "ident" : "p" }, { "op" : "," }, { "string" : "s" } ] } }, { "func" : { "ident" : "attr", "expr" : [ { "ident" : "data-foo" } ] } } ] } } ] }, "css1" : { "warnings" : [ "unknown units: deg", "unknown units: s", "unknown units: hz", "unknown units: deg", "unknown units: s", "unknown units: hz", "dropping term: counter(a,b) counters(p,'s') attr(data-foo)" ,"dropping declaration: terms" ], "ast" : null } } ]
[ "declaration", { "input" : "line-height: 1.1px !important", "ast" : { "property" : { "ident" : "line-height", "expr" : [ { "px" : 1.1 } ], "prio" : "important" } } } ]
[ "declaration", { "input" : "line-height: 1.5px !vital", "warnings" : [ "dropping term: !vital" ], "ast" : { "property" : { "ident" : "line-height", "expr" : [ { "px" : 1.5 } ] } } } ]
[ "declaration", { "input" : " /*ww*/ margin/*xx*/:/*yy*/1em/*zz*/", "ast" : { "property" : { "ident" : "margin", "expr" : [ { "em" : 1 } ] } } } ]
[ "declaration", { "input" : "border: 2px solid blue", "ast" : { "property" : { "ident" : "border", "expr" : [ { "px" : 2 }, { "ident" : "solid" }, { "ident" : "blue" } ] } } } ]
[ "declarations", { "input" : "{font-size:10px;color:white;z-index:-9;position:absolute;left:-999px}", "ast" : { "declarations" : [ { "property" : { "ident" : "font-size", "expr" : [ { "px" : 10 } ] } }, { "property" : { "ident" : "color", "expr" : [ { "ident" : "white" } ] } }, { "property" : { "ident" : "z-index", "expr" : [ { "num" : -9 } ] } }, { "property" : { "ident" : "position", "expr" : [ { "ident" : "absolute" } ] } }, { "property" : { "ident" : "left", "expr" : [ { "px" : -999 } ] } } ] } } ]
[ "ruleset", { "input" : "H1 { color: blue; }", "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h1" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "blue" } ] } } ] } } } ]
[ "ruleset", { "input" : "A:link H1 { color: blue; }", "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "pseudo-class" : "link" } ] }, { "simple-selector" : [ { "qname" : { "element-name" : "h1" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "blue" } ] } } ] } } } ]
[ "ruleset", { "input" : "A:link,H1 { color: blue; }", "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "pseudo-class" : "link" } ] } ] }, { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h1" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "blue" } ] } } ] } } } ]
[ "ruleset", { "input" : "H1#abc { color: blue; }", "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h1" } }, { "id" : "abc" } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "blue" } ] } } ] } } } ]
[ "ruleset", { "input" : "A.external:visited { color: blue; }", "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "class" : "external" }, { "pseudo-class" : "visited" } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "blue" } ] } } ] } } } ]
[ "simple-selector", { "input" : "A[ href ]", "ast" : { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "attrib" : [ { "ident" : "href" } ] } ] }, "css1" : { "parse" : "A", "ast" : { "simple-selector" : [ { "qname" : { "element-name" : "a" } } ] } } } ]
[ "simple-selector", { "input" : "a[href~='foo']", "ast" : { "simple-selector" : [ { "qname" : { "element-name" : "a" } }, { "attrib" : [ { "ident" : "href" }, { "op" : "~=" }, { "string" : "foo" } ] } ] }, "css1" : { "parse" : "a", "ast" : { "simple-selector" : [ { "qname" : { "element-name" : "a" } } ] } } } ]
// character set differences:
// \255 is not recognised by css1 or css2.1 as non-ascii chars
[ "ruleset", { "input" : ".TB\u0009{mso-special-format:nobullet\u0095;}", "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "class" : "TB" } ] } ] } ], "declarations" : [ ] } }, "warnings" : [ "dropping term: \\x[95]", "dropping declaration: mso-special-format" ], "css3" : {"warnings" : null, "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "class" : "TB" } ] } ] } ], "declarations" : [ { "property" : { "ident" : "mso-special-format", "expr" : [ { "ident" : "nobullet\u0095" } ] } } ] } } } } ]
// unclosed rulesets (css1 doesn't understand angles)
[ "ruleset", { "input" : "H2 { color: green; rotation: 70deg; }", "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h2" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "green" } ] } }, { "property" : { "ident" : "rotation", "expr" : [ { "deg" : 70 } ] } } ] } }, "css1" : { "warnings" : [ "unknown units: deg", "dropping declaration: rotation" ], "ast" : { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h2" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "green" } ] } } ] } } } } ]
[ "ruleset", { "input" : "H1 { color }", "warnings" : [ "dropping term: color" ], "ast" : null } ]
[ "ruleset", { "input" : "H1 { color; }", "warnings" : [ "dropping term: color" ], "ast" : null } ]
[ "ruleset", { "input" : "H1 { : blue }", "warnings" : [ "dropping term: : blue" ], "ast" : null } ]
[ "ruleset", { "input" : "H1 { color blue }", "warnings" : [ "dropping term: color blue" ], "ast" : null } ]
[ "ruleset", { "input" : "H1 { color: }", "warnings" : [ "dropping declaration: color" ], "ast" : null } ]
[ "ruleset", { "input" : "H2 { color: green; rotation: 70deg;", "warnings" : [ "no closing '}'" ], "ast" : null, "css1" : { "warnings" : [ "unknown units: deg", "dropping declaration: rotation", "no closing '}'" ] } } ]
[ "ruleset", { "input" : "H2 { color: green; rotation: }", "warnings" : "dropping declaration: rotation", "ast" : null } ]
[ "ruleset", { "input" : "H2 { test: 'this is not closed", "warnings" : [ "unterminated string: 'this is not closed", "dropping declaration: test", "no closing '}'" ], "ast" : null, "core" : { "warnings" : "unterminated string: 'this is not closed" } } ]
[ "at-rule", { "input" : "@media print {body{margin: 1cm}}", "ast" : { "at-rule" : { "media-list" : [ { "media-query" : [ { "ident" : "print" } ] } ], "rule-list" : [ { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "body" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "margin", "expr" : [ { "cm" : 1 } ] } } ] } } ], "at-keyw" : "media" } }, "css1" : { "skip" : "N/A to CSS1" } } ]
[ "at-rule", { "input" : "@Page :first { margin-right: 2cm }", "ast" : { "at-rule" : { "pseudo-class" : "first", "declarations" : [ { "property" : { "ident" : "margin-right", "expr" : [ { "cm" : 2 } ] } } ], "at-keyw" : "page" } }, "css1" : { "skip" : "N/A to CSS1" } } ]
[ "stylesheet", { "input" : "@charset 'bazinga';", "ast" : { "stylesheet" : [ { "at-rule" : { "at-keyw" : "charset", "string" : "bazinga" } } ] }, "css1" : { "ast" : null, "warnings" : [ "dropping: @charset 'bazinga';" ] } } ]
[ "stylesheet", { "input" : " @Import 'foo'; H1 { color: blue; }; @charset 'bazinga'; @import 'too-late'; H2{color:green}", "ast" : { "stylesheet" : [ { "at-rule" : { "at-keyw" : "import", "url" : "foo" } }, { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h1" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "blue" } ] } } ] } }, { "ruleset" : { "selectors" : [ { "selector" : [ { "simple-selector" : [ { "qname" : { "element-name" : "h2" } } ] } ] } ], "declarations" : [ { "property" : { "ident" : "color", "expr" : [ { "ident" : "green" } ] } } ] } } ] }, "warnings" : [ "ignoring out of sequence directive: @charset 'bazinga';", "ignoring out of sequence directive: @import 'too-late';" ], "css1" : { "warnings" : [ "dropping: @charset 'bazinga';", "ignoring out of sequence directive: @import 'too-late';" ] } } ]
[ "stylesheet", { "input" : " @charset \"utf-8\";@page { size: 8.5in 11in; margin: 10%; @top-left { content: \"Hamlet\"; } }", "css1" : { "ast" : { "stylesheet" : [] }, "warnings" : ["dropping: @charset \"utf-8\";", "dropping: @page { size: 8.5in 11in; margin: 10%; @top-left { content: \"Hamlet\"; } }"] },"ast" : { "stylesheet" : [ { "at-rule" : { "at-keyw" : "charset", "string" : "utf-8" } }, { "at-rule" : { "declarations" : [ { "property" : { "ident" : "size", "expr" : [ { "in" : 8.5 }, { "in" : 11 } ] } }, { "property" : { "ident" : "margin", "expr" : [ { "percent" : 10 } ] } }, { "at-rule" : { "declarations" : [ { "property" : { "ident" : "content", "expr" : [ { "string" : "Hamlet" } ] } } ], "at-keyw" : "top-left" } } ], "at-keyw" : "page" } } ] } } ]


