UNPKG

@lezer/css

Version:
215 lines (159 loc) 7.09 kB
# Empty stylesheets /* Just a comment */ ==> StyleSheet(Comment) # Import statements @import url("fineprint.css") print; @import url("bluish.css") speech; @import 'custom.css'; @import url("chrome://communicator/skin/"); @import "common.css" screen; @import "reset.css" layer(framework.component); @import "components.css" layer screen; ==> StyleSheet( ImportStatement(import,CallLiteral(CallTag,StringLiteral),KeywordQuery), ImportStatement(import,CallLiteral(CallTag,StringLiteral),KeywordQuery), ImportStatement(import,StringLiteral), ImportStatement(import,CallLiteral(CallTag,StringLiteral)), ImportStatement(import,StringLiteral,KeywordQuery), ImportStatement(import,StringLiteral,Layer(layer,LayerName,LayerName)), ImportStatement(import,StringLiteral,Layer(layer),KeywordQuery)) # Namespace statements /* Default namespace */ @namespace url(XML-namespace-URL); @namespace "XML-namespace-URL"; @namespace url(http://www.w3.org/1999/xhtml); @namespace svg url(http://www.w3.org/2000/svg); /* Prefixed namespace */ @namespace prefix url(XML-namespace-URL); @namespace prefix "XML-namespace-URL"; ==> StyleSheet( Comment, NamespaceStatement(namespace,CallLiteral(CallTag,ParenthesizedContent)), NamespaceStatement(namespace,StringLiteral), NamespaceStatement(namespace,CallLiteral(CallTag,ParenthesizedContent)), NamespaceStatement(namespace,NamespaceName,CallLiteral(CallTag,ParenthesizedContent)), Comment, NamespaceStatement(namespace,NamespaceName,CallLiteral(CallTag,ParenthesizedContent)), NamespaceStatement(namespace,NamespaceName,StringLiteral)) # Keyframes statements @keyframes important1 { from { margin-top: 50px; } 50%, 60% { margin-top: 150px !important; } /* ignored */ to { margin-top: 100px; } } ==> StyleSheet(KeyframesStatement(keyframes,KeyframeName,KeyframeList( KeyframeSelector(KeyframeRangeName),Block(Declaration(PropertyName,NumberLiteral(Unit))), KeyframeSelector(NumberLiteral(Unit)),KeyframeSelector(NumberLiteral(Unit)),Block( Declaration(PropertyName,NumberLiteral(Unit),Important)), Comment, KeyframeSelector(KeyframeRangeName),Block(Declaration(PropertyName,NumberLiteral(Unit)))))) # Keyframes statements with range @keyframes anim-1 { entry 0% { margin-top: 50px; } entry 100% { margin-top: 50px; } exit 0% { margin-top: 50px; } exit 100% { margin-top: 50px; } } ==> StyleSheet(KeyframesStatement(keyframes,KeyframeName,KeyframeList( KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),Block(Declaration(PropertyName,NumberLiteral(Unit))), KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),Block(Declaration(PropertyName,NumberLiteral(Unit))), KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),Block(Declaration(PropertyName,NumberLiteral(Unit))), KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),Block(Declaration(PropertyName,NumberLiteral(Unit)))))) # Keyframes statements with range and multiple keyframe selectors @keyframes fade-in-out-animation { entry 0%, exit 100% { opacity: 0 } entry 100%, exit 0% { opacity: 1 } } ==> StyleSheet(KeyframesStatement(keyframes,KeyframeName,KeyframeList( KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),Block( Declaration(PropertyName,NumberLiteral)), KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),KeyframeSelector(KeyframeRangeName,NumberLiteral(Unit)),Block( Declaration(PropertyName,NumberLiteral))))) # Media statements @media screen and (min-width: 30em) and (orientation: landscape) {} @media (min-height: 680px), screen and (orientation: portrait) {} @media not all and (monochrome) {} @media only screen {} @media (10em <= width < 30em) {} ==> StyleSheet( MediaStatement(media,BinaryQuery(BinaryQuery(KeywordQuery,LogicOp,FeatureQuery(FeatureName,NumberLiteral(Unit))),LogicOp, FeatureQuery(FeatureName,ValueName)),Block), MediaStatement(media,FeatureQuery(FeatureName,NumberLiteral(Unit)),BinaryQuery(KeywordQuery,LogicOp,FeatureQuery(FeatureName,ValueName)),Block), MediaStatement(media,UnaryQuery(UnaryQueryOp,BinaryQuery(KeywordQuery,LogicOp,ParenthesizedQuery(KeywordQuery))),Block), MediaStatement(media,UnaryQuery(UnaryQueryOp,KeywordQuery),Block), MediaStatement(media,ComparisonQuery(NumberLiteral(Unit),CompareOp,FeatureName,CompareOp,NumberLiteral(Unit)),Block)) # Supports statements @supports (animation-name: test) { div { animation-name: test; } } @supports (transform-style: preserve) or (-moz-transform-style: preserve) {} @supports not ((text-align-last: justify) or (-moz-text-align-last: justify)) {} @supports not selector(:matches(a, b)) {} ==> StyleSheet( SupportsStatement(supports,FeatureQuery(FeatureName,ValueName),Block(RuleSet(TagSelector(TagName),Block(Declaration(PropertyName,ValueName))))), SupportsStatement(supports,BinaryQuery(FeatureQuery(FeatureName,ValueName),LogicOp,FeatureQuery(FeatureName,ValueName)),Block), SupportsStatement(supports,UnaryQuery(UnaryQueryOp,ParenthesizedQuery( BinaryQuery(FeatureQuery(FeatureName,ValueName),LogicOp,FeatureQuery(FeatureName,ValueName)))),Block), SupportsStatement(supports,UnaryQuery(UnaryQueryOp,SelectorQuery(selector,ParenthesizedSelector(PseudoClassSelector(PseudoClassName,ArgList(TagSelector(TagName),TagSelector(TagName)))))),Block)) # Charset statements @charset "utf-8"; ==> StyleSheet(CharsetStatement(charset,StringLiteral)) # Other at-statements @font-face { font-family: "Open Sans"; src: url("/a") format("woff2"), url("/b/c") format("woff"); } ==> StyleSheet(AtRule(AtKeyword,Block( Declaration(PropertyName,StringLiteral), Declaration(PropertyName,CallLiteral(CallTag,StringLiteral),CallExpression(Callee,ArgList(StringLiteral)), CallLiteral(CallTag,StringLiteral),CallExpression(Callee,ArgList(StringLiteral)))))) # Unterminated Comment p {} /* div {} ==> StyleSheet(RuleSet(TagSelector(TagName),Block),Comment) # Escaped identifiers #foo\ bar { --weird\\var: 5px; width: var(--weird\\var); c\6f lor: b\6c ue; } ==> StyleSheet(RuleSet(IdSelector(IdName),Block( Declaration(VariableName,NumberLiteral(Unit)), Declaration(PropertyName,CallExpression(Callee,ArgList(VariableName))), Declaration(PropertyName, ValueName)))) # Scope @scope { .x {} } @scope (div) {} @scope (.a) to (.b) {} ==> StyleSheet( ScopeStatement(scope,Block(RuleSet(ClassSelector(ClassName),Block))), ScopeStatement(scope,ParenthesizedSelector(TagSelector(TagName)),Block), ScopeStatement(scope,ParenthesizedSelector(ClassSelector(ClassName)),to,ParenthesizedSelector(ClassSelector(ClassName)),Block)) # If Expressions p { background-color: if( style(--color: white): black; supports(foo: bar): red; else: pink ); } ==> StyleSheet(RuleSet(TagSelector(TagName),Block( Declaration(PropertyName,IfExpression(if,ArgList( IfBranch(CallQuery(QueryCallee,ArgList(FeatureName,ValueName)),ValueName), IfBranch(CallQuery(QueryCallee,ArgList(FeatureName,ValueName)),ValueName), IfBranch(KeywordQuery,ValueName)))))))