css-parser-0.0.1: src/CssParser/At/Import.hs
module CssParser.At.Import where
import CssParser.At.MediaQuery ( MediaQuery )
import CssParser.At.Supports ( FeatureQuery, hasOuterParens )
import CssParser.Ident
import CssParser.Prelude
import CssParser.Rule.Value ( Source )
import CssParser.Show ( CssShow(..) )
{-
@import url;
@import url layer;
@import url layer(layer-name);
@import url layer(layer-name) supports(supports-condition);
@import url layer(layer-name) supports(supports-condition) list-of-media-queries;
@import url layer(layer-name) list-of-media-queries;
@import url supports(supports-condition);
@import url supports(supports-condition) list-of-media-queries;
@import url list-of-media-queries;
-}
data Import sl
= ImportDefaultLayer Source
| ImportUrlLayer Source (Maybe LayerName) (Maybe (FeatureQuery sl)) [MediaQuery]
| ImportUrlSupports Source (Maybe (FeatureQuery sl)) [MediaQuery]
deriving (Show, Ord, Eq, Generic)
instance CssShow sl => CssShow (Import sl) where
toCssText = go
where
showMq = \case
[] -> ""
o -> " " <> toCssText o
embrace v
| hasOuterParens v = toCssText v
| otherwise = "(" <> toCssText v <> ")"
showSup = maybe "" ((" supports" <>) . embrace)
go = \case
ImportDefaultLayer u -> toCssText u <> " layer"
ImportUrlLayer u l sup mq ->
toCssText u <> " layer(" <> toCssText l <> ")" <> showSup sup <> showMq mq
ImportUrlSupports u sup mq ->
toCssText u <> showSup sup <> showMq mq