{-# LANGUAGE OverloadedStrings #-}
module Graphics.Layout.CSS.Parse (
CSSBox(..), direction, txtOpts, BoxSizing(..), Display(..)) where
import Data.CSS.Syntax.Tokens (Token(..), NumericValue(..))
import Stylist (PropertyParser(..), TrivialPropertyParser, parseOperands,
parseUnorderedShorthand', parseUnorderedShorthand)
import Data.Text.ParagraphLayout (PageOptions(..))
import Data.Text.ParagraphLayout.Rich (textDirection)
import Data.Text.Glyphize (Direction(..))
import Graphics.Layout.Box as B
import Graphics.Text.Font.Choose (Pattern, unset)
import Graphics.Layout.CSS.Length (Unitted, parseLength', parseLength, auto)
import Graphics.Layout.CSS.Font (CSSFont)
import Graphics.Layout.Grid.CSS (CSSGrid(..), CSSCell(..), Placement(..))
import Graphics.Layout.Inline.CSS (CSSInline(..))
import Data.Maybe (isJust, fromMaybe)
import qualified Data.HashMap.Lazy as HM
data CSSBox a = CSSBox {
CSSBox a -> Display
display :: Display,
CSSBox a -> BoxSizing
boxSizing :: BoxSizing,
CSSBox a -> PaddedBox Unitted Unitted
cssBox :: PaddedBox Unitted Unitted,
CSSBox a -> Pattern
font :: Pattern,
CSSBox a -> CSSFont
font' :: CSSFont,
CSSBox a -> a
inner :: a,
CSSBox a -> CSSGrid
gridStyles :: CSSGrid,
CSSBox a -> CSSCell
cellStyles :: CSSCell,
CSSBox a -> CSSInline
inlineStyles :: CSSInline,
CSSBox a -> Bool
captionBelow :: Bool,
CSSBox a -> PageOptions
pageOptions :: PageOptions
}
direction :: CSSBox a -> Direction
direction CSSBox { inlineStyles :: forall a. CSSBox a -> CSSInline
inlineStyles = CSSInline _ opts :: TextOptions
opts _ } = TextOptions -> Direction
textDirection TextOptions
opts
txtOpts :: CSSBox a -> TextOptions
txtOpts CSSBox { inlineStyles :: forall a. CSSBox a -> CSSInline
inlineStyles = CSSInline _ opts :: TextOptions
opts _ } = TextOptions
opts
data BoxSizing = BorderBox | ContentBox
noborder :: Border Unitted Unitted
noborder = Unitted -> Unitted -> Unitted -> Unitted -> Border Unitted Unitted
forall m n. m -> m -> n -> n -> Border m n
Border (0,"px") (0,"px") (0,"px") (0,"px")
data Display = Block | Grid | Inline | Table | None |
TableRow | | TableRowGroup | | TableCell |
TableColumn | TableColumnGroup | TableCaption deriving Display -> Display -> Bool
(Display -> Display -> Bool)
-> (Display -> Display -> Bool) -> Eq Display
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Display -> Display -> Bool
$c/= :: Display -> Display -> Bool
== :: Display -> Display -> Bool
$c== :: Display -> Display -> Bool
Eq
rowContainer :: CSSBox a -> Bool
rowContainer CSSBox { display :: forall a. CSSBox a -> Display
display = Display
d } =
Display
d Display -> [Display] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Display
Table, Display
TableHeaderGroup, Display
TableRowGroup, Display
TableFooterGroup]
instance PropertyParser a => PropertyParser (CSSBox a) where
temp :: CSSBox a
temp = CSSBox :: forall a.
Display
-> BoxSizing
-> PaddedBox Unitted Unitted
-> Pattern
-> CSSFont
-> a
-> CSSGrid
-> CSSCell
-> CSSInline
-> Bool
-> PageOptions
-> CSSBox a
CSSBox {
boxSizing :: BoxSizing
boxSizing = BoxSizing
ContentBox,
display :: Display
display = Display
Inline,
cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox :: forall m n.
Size m n
-> Size m n
-> Size Double Double
-> Size m n
-> Border m n
-> Border m n
-> Border m n
-> PaddedBox m n
PaddedBox {
min :: Size Unitted Unitted
B.min = Unitted -> Unitted -> Size Unitted Unitted
forall m n. n -> m -> Size m n
Size Unitted
auto Unitted
auto,
size :: Size Unitted Unitted
size = Unitted -> Unitted -> Size Unitted Unitted
forall m n. n -> m -> Size m n
Size Unitted
auto Unitted
auto,
nat :: Size Double Double
nat = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
max :: Size Unitted Unitted
B.max = Unitted -> Unitted -> Size Unitted Unitted
forall m n. n -> m -> Size m n
Size Unitted
auto Unitted
auto,
padding :: Border Unitted Unitted
padding = Border Unitted Unitted
noborder,
border :: Border Unitted Unitted
border = Border Unitted Unitted
noborder,
margin :: Border Unitted Unitted
margin = Border Unitted Unitted
noborder
},
font :: Pattern
font = Pattern
forall a. PropertyParser a => a
temp,
font' :: CSSFont
font' = CSSFont
forall a. PropertyParser a => a
temp,
inner :: a
inner = a
forall a. PropertyParser a => a
temp,
gridStyles :: CSSGrid
gridStyles = CSSGrid
forall a. PropertyParser a => a
temp,
cellStyles :: CSSCell
cellStyles = CSSCell
forall a. PropertyParser a => a
temp,
inlineStyles :: CSSInline
inlineStyles = CSSInline
forall a. PropertyParser a => a
temp,
captionBelow :: Bool
captionBelow = Bool
False,
pageOptions :: PageOptions
pageOptions = Int32 -> Int32 -> Word -> Word -> PageOptions
PageOptions 0 0 2 2
}
inherit :: CSSBox a -> CSSBox a
inherit parent :: CSSBox a
parent = CSSBox :: forall a.
Display
-> BoxSizing
-> PaddedBox Unitted Unitted
-> Pattern
-> CSSFont
-> a
-> CSSGrid
-> CSSCell
-> CSSInline
-> Bool
-> PageOptions
-> CSSBox a
CSSBox {
boxSizing :: BoxSizing
boxSizing = CSSBox a -> BoxSizing
forall a. CSSBox a -> BoxSizing
boxSizing CSSBox a
parent,
display :: Display
display = Display
Inline,
cssBox :: PaddedBox Unitted Unitted
cssBox = CSSBox TrivialPropertyParser -> PaddedBox Unitted Unitted
forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox (CSSBox TrivialPropertyParser
forall a. PropertyParser a => a
temp :: CSSBox TrivialPropertyParser),
font :: Pattern
font = Pattern -> Pattern
forall a. PropertyParser a => a -> a
inherit (Pattern -> Pattern) -> Pattern -> Pattern
forall a b. (a -> b) -> a -> b
$ CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
parent,
font' :: CSSFont
font' = CSSFont -> CSSFont
forall a. PropertyParser a => a -> a
inherit (CSSFont -> CSSFont) -> CSSFont -> CSSFont
forall a b. (a -> b) -> a -> b
$ CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font' CSSBox a
parent,
inner :: a
inner = a -> a
forall a. PropertyParser a => a -> a
inherit (a -> a) -> a -> a
forall a b. (a -> b) -> a -> b
$ CSSBox a -> a
forall a. CSSBox a -> a
inner CSSBox a
parent,
gridStyles :: CSSGrid
gridStyles = CSSGrid -> CSSGrid
forall a. PropertyParser a => a -> a
inherit (CSSGrid -> CSSGrid) -> CSSGrid -> CSSGrid
forall a b. (a -> b) -> a -> b
$ CSSBox a -> CSSGrid
forall a. CSSBox a -> CSSGrid
gridStyles CSSBox a
parent,
cellStyles :: CSSCell
cellStyles = CSSCell -> CSSCell
forall a. PropertyParser a => a -> a
inherit (CSSCell -> CSSCell) -> CSSCell -> CSSCell
forall a b. (a -> b) -> a -> b
$ CSSBox a -> CSSCell
forall a. CSSBox a -> CSSCell
cellStyles CSSBox a
parent,
inlineStyles :: CSSInline
inlineStyles = CSSInline -> CSSInline
forall a. PropertyParser a => a -> a
inherit (CSSInline -> CSSInline) -> CSSInline -> CSSInline
forall a b. (a -> b) -> a -> b
$ CSSBox a -> CSSInline
forall a. CSSBox a -> CSSInline
inlineStyles CSSBox a
parent,
captionBelow :: Bool
captionBelow = CSSBox a -> Bool
forall a. CSSBox a -> Bool
captionBelow CSSBox a
parent,
pageOptions :: PageOptions
pageOptions = CSSBox a -> PageOptions
forall a. CSSBox a -> PageOptions
pageOptions CSSBox a
parent
}
priority :: CSSBox a -> [Text]
priority self :: CSSBox a
self = [[Text]] -> [Text]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [(CSSBox a -> Pattern) -> [Text]
forall a. PropertyParser a => (CSSBox a -> a) -> [Text]
x CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font, (CSSBox a -> CSSFont) -> [Text]
forall a. PropertyParser a => (CSSBox a -> a) -> [Text]
x CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font', (CSSBox a -> CSSGrid) -> [Text]
forall a. PropertyParser a => (CSSBox a -> a) -> [Text]
x CSSBox a -> CSSGrid
forall a. CSSBox a -> CSSGrid
gridStyles, (CSSBox a -> CSSCell) -> [Text]
forall a. PropertyParser a => (CSSBox a -> a) -> [Text]
x CSSBox a -> CSSCell
forall a. CSSBox a -> CSSCell
cellStyles, (CSSBox a -> a) -> [Text]
forall a. PropertyParser a => (CSSBox a -> a) -> [Text]
x CSSBox a -> a
forall a. CSSBox a -> a
inner]
where x :: (CSSBox a -> a) -> [Text]
x getter :: CSSBox a -> a
getter = a -> [Text]
forall a. PropertyParser a => a -> [Text]
priority (a -> [Text]) -> a -> [Text]
forall a b. (a -> b) -> a -> b
$ CSSBox a -> a
getter CSSBox a
self
longhand :: CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
longhand _ self :: CSSBox a
self "font-family" [Ident "initial"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { font :: Pattern
font = String -> Pattern -> Pattern
forall a b. Eq a => a -> [(a, b)] -> [(a, b)]
unset "family" (Pattern -> Pattern) -> Pattern -> Pattern
forall a b. (a -> b) -> a -> b
$ CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
self}
longhand _ self :: CSSBox a
self "box-sizing" [Ident "content-box"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self {boxSizing :: BoxSizing
boxSizing = BoxSizing
ContentBox}
longhand _ self :: CSSBox a
self "box-sizing" [Ident "border-box"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self {boxSizing :: BoxSizing
boxSizing = BoxSizing
BorderBox}
longhand _ self :: CSSBox a
self "box-sizing" [Ident "initial"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self {boxSizing :: BoxSizing
boxSizing = BoxSizing
ContentBox}
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "padding-top" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { top :: Unitted
top = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "padding-bottom" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { bottom :: Unitted
bottom = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "padding-left" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { left :: Unitted
left = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "padding-right" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { right :: Unitted
right = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "padding-inline-start" toks :: [Token]
toks
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { left :: Unitted
left = Unitted
x } } }
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { right :: Unitted
right = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "padding-inline-end" toks :: [Token]
toks
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { right :: Unitted
right = Unitted
x } } }
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { padding :: Border Unitted Unitted
padding = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
padding PaddedBox Unitted Unitted
box) { left :: Unitted
left = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "border-top-width" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { border :: Border Unitted Unitted
border = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
border PaddedBox Unitted Unitted
box) { top :: Unitted
top = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "border-bottom-width" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { border :: Border Unitted Unitted
border = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
border PaddedBox Unitted Unitted
box) { bottom :: Unitted
bottom = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "border-left-width" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { border :: Border Unitted Unitted
border = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
border PaddedBox Unitted Unitted
box) { left :: Unitted
left = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "border-right-width" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { border :: Border Unitted Unitted
border = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
border PaddedBox Unitted Unitted
box) { right :: Unitted
right = Unitted
x } } }
longhand p :: CSSBox a
p self :: CSSBox a
self "border-inline-start-color" toks :: [Token]
toks
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-left-color" [Token]
toks
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-right-color" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-inline-start-width" toks :: [Token]
toks
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-left-width" [Token]
toks
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-right-width" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-inline-start-style" toks :: [Token]
toks
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-left-style" [Token]
toks
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-right-style" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-inline-end-color" toks :: [Token]
toks
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-right-color" [Token]
toks
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-left-color" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-inline-end-width" toks :: [Token]
toks
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-right-width" [Token]
toks
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-left-width" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-inline-end-style" toks :: [Token]
toks
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-right-style" [Token]
toks
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-left-style" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-start-start-radius" t :: [Token]
t
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-top-left-radius" [Token]
t
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-top-right-radius" [Token]
t
longhand p :: CSSBox a
p self :: CSSBox a
self "border-start-end-radius" t :: [Token]
t
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-top-right-radius" [Token]
t
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-top-left-radius" [Token]
t
longhand p :: CSSBox a
p s :: CSSBox a
s "border-end-start-radius" t :: [Token]
t
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
s = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
s "border-bottom-left-radius" [Token]
t
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
s = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
s "border-bottom-right-radius" [Token]
t
longhand p :: CSSBox a
p s :: CSSBox a
s "border-end-end-radius" t :: [Token]
t
| Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
s = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
s "border-bottom-right-radius" [Token]
t
| Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
s = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
s "border-bottom-left-radius" [Token]
t
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "margin-top" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { top :: Unitted
top = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "margin-bottom" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { bottom :: Unitted
bottom = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "margin-left" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { left :: Unitted
left = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "margin-right" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { right :: Unitted
right = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "margin-inline-start" toks :: [Token]
toks
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { left :: Unitted
left = Unitted
x } } }
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { right :: Unitted
right = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "margin-inline-end" toks :: [Token]
toks
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirLTR <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { right :: Unitted
right = Unitted
x } } }
| Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength [Token]
toks, Direction
DirRTL <- CSSBox a -> Direction
forall a. CSSBox a -> Direction
direction CSSBox a
self =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { margin :: Border Unitted Unitted
margin = (PaddedBox Unitted Unitted -> Border Unitted Unitted
forall m n. PaddedBox m n -> Border m n
margin PaddedBox Unitted Unitted
box) { left :: Unitted
left = Unitted
x } } }
longhand p :: CSSBox a
p self :: CSSBox a
self "padding-block-start" t :: [Token]
t = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "padding-top" [Token]
t
longhand p :: CSSBox a
p self :: CSSBox a
self "padding-block-end" t :: [Token]
t = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "padding-bottom" [Token]
t
longhand p :: CSSBox a
p self :: CSSBox a
self "margin-block-start" t :: [Token]
t = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "margin-top" [Token]
t
longhand p :: CSSBox a
p self :: CSSBox a
self "margin-block-end" t :: [Token]
t = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "margin-bottom" [Token]
t
longhand p :: CSSBox a
p self :: CSSBox a
self "border-block-start-color" toks :: [Token]
toks =
CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-top-color" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-block-start-style" toks :: [Token]
toks =
CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-top-style" [Token]
toks
longhand p :: CSSBox a
p self :: CSSBox a
self "border-block-start-width" toks :: [Token]
toks =
CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
self "border-top-width" [Token]
toks
longhand p :: CSSBox a
p s :: CSSBox a
s "border-block-end-color" t :: [Token]
t = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
s "border-bottom-color" [Token]
t
longhand p :: CSSBox a
p s :: CSSBox a
s "border-block-end-style" t :: [Token]
t = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
s "border-bottom-style" [Token]
t
longhand p :: CSSBox a
p s :: CSSBox a
s "border-block-end-width" t :: [Token]
t = CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
p CSSBox a
s "border-bottom-width" [Token]
t
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "width" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength' [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { size :: Size Unitted Unitted
size = (PaddedBox Unitted Unitted -> Size Unitted Unitted
forall m n. PaddedBox m n -> Size m n
size PaddedBox Unitted Unitted
box) { inline :: Unitted
inline = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "height" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength' [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { size :: Size Unitted Unitted
size = (PaddedBox Unitted Unitted -> Size Unitted Unitted
forall m n. PaddedBox m n -> Size m n
size PaddedBox Unitted Unitted
box) { block :: Unitted
block = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "max-width" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength' [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { max :: Size Unitted Unitted
B.max = (PaddedBox Unitted Unitted -> Size Unitted Unitted
forall m n. PaddedBox m n -> Size m n
B.max PaddedBox Unitted Unitted
box) { inline :: Unitted
inline = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "min-width" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength' [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { min :: Size Unitted Unitted
B.min = (PaddedBox Unitted Unitted -> Size Unitted Unitted
forall m n. PaddedBox m n -> Size m n
B.min PaddedBox Unitted Unitted
box) { inline :: Unitted
inline = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "max-height" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength' [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { max :: Size Unitted Unitted
B.max = (PaddedBox Unitted Unitted -> Size Unitted Unitted
forall m n. PaddedBox m n -> Size m n
B.max PaddedBox Unitted Unitted
box) { block :: Unitted
block = Unitted
x } } }
longhand _ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} "min-height" toks :: [Token]
toks | Just x :: Unitted
x <- [Token] -> Maybe Unitted
parseLength' [Token]
toks =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cssBox :: PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box { min :: Size Unitted Unitted
B.min = (PaddedBox Unitted Unitted -> Size Unitted Unitted
forall m n. PaddedBox m n -> Size m n
B.min PaddedBox Unitted Unitted
box) { block :: Unitted
block = Unitted
x } } }
longhand _ self :: CSSBox a
self "display" [Ident "block"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Block }
longhand _ self :: CSSBox a
self "display" [Ident "none"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
None }
longhand _ self :: CSSBox a
self "display" [Ident "grid"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Grid }
longhand _ self :: CSSBox a
self "display" [Ident "inline"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Inline }
longhand _ self :: CSSBox a
self "display" [Ident "initial"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Inline }
longhand _ self :: CSSBox a
self "caption-side" [Ident "top"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { captionBelow :: Bool
captionBelow = Bool
False }
longhand _ self :: CSSBox a
self "caption-side" [Ident "bottom"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { captionBelow :: Bool
captionBelow = Bool
True }
longhand _ self :: CSSBox a
self "caption-side" [Ident "initial"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self {captionBelow :: Bool
captionBelow = Bool
False}
longhand _ self :: CSSBox a
self "orphans" [Number _ (NVInteger x :: Integer
x)] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { pageOptions :: PageOptions
pageOptions = (CSSBox a -> PageOptions
forall a. CSSBox a -> PageOptions
pageOptions CSSBox a
self) { pageOrphans :: Word
pageOrphans = Integer -> Word
forall a. Num a => Integer -> a
fromInteger Integer
x } }
longhand _ self :: CSSBox a
self "widows" [Number _ (NVInteger x :: Integer
x)] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { pageOptions :: PageOptions
pageOptions = (CSSBox a -> PageOptions
forall a. CSSBox a -> PageOptions
pageOptions CSSBox a
self) { pageWidows :: Word
pageWidows = Integer -> Word
forall a. Num a => Integer -> a
fromInteger Integer
x } }
longhand a :: CSSBox a
a b :: CSSBox a
b c :: Text
c d :: [Token]
d | Just x :: Pattern
x <- Pattern -> Pattern -> Text -> [Token] -> Maybe Pattern
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
a) (CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
b) Text
c [Token]
d,
Just y :: CSSFont
y <- CSSFont -> CSSFont -> Text -> [Token] -> Maybe CSSFont
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font' CSSBox a
a) (CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font' CSSBox a
b) Text
c [Token]
d =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b { font :: Pattern
font = Pattern
x, font' :: CSSFont
font' = CSSFont
y }
longhand a :: CSSBox a
a b :: CSSBox a
b c :: Text
c d :: [Token]
d | Just font' :: Pattern
font' <- Pattern -> Pattern -> Text -> [Token] -> Maybe Pattern
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
a) (CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
b) Text
c [Token]
d = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b {
font :: Pattern
font = Pattern
font'
}
longhand a :: CSSBox a
a b :: CSSBox a
b c :: Text
c d :: [Token]
d | Just font :: CSSFont
font <- CSSFont -> CSSFont -> Text -> [Token] -> Maybe CSSFont
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font' CSSBox a
a) (CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font' CSSBox a
b) Text
c [Token]
d = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b {
font' :: CSSFont
font' = CSSFont
font
}
longhand a :: CSSBox a
a b :: CSSBox a
b c :: Text
c d :: [Token]
d | Just inline' :: CSSInline
inline' <- CSSInline -> CSSInline -> Text -> [Token] -> Maybe CSSInline
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSInline
forall a. CSSBox a -> CSSInline
inlineStyles CSSBox a
a) (CSSBox a -> CSSInline
forall a. CSSBox a -> CSSInline
inlineStyles CSSBox a
b) Text
c [Token]
d =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b { inlineStyles :: CSSInline
inlineStyles = CSSInline
inline' }
longhand a :: CSSBox a
a b :: CSSBox a
b c :: Text
c d :: [Token]
d | Just grid' :: CSSGrid
grid' <- CSSGrid -> CSSGrid -> Text -> [Token] -> Maybe CSSGrid
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSGrid
forall a. CSSBox a -> CSSGrid
gridStyles CSSBox a
a) (CSSBox a -> CSSGrid
forall a. CSSBox a -> CSSGrid
gridStyles CSSBox a
b) Text
c [Token]
d =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b { gridStyles :: CSSGrid
gridStyles = CSSGrid
grid' }
longhand a :: CSSBox a
a b :: CSSBox a
b c :: Text
c d :: [Token]
d | Just cell' :: CSSCell
cell' <- CSSCell -> CSSCell -> Text -> [Token] -> Maybe CSSCell
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSCell
forall a. CSSBox a -> CSSCell
cellStyles CSSBox a
a) (CSSBox a -> CSSCell
forall a. CSSBox a -> CSSCell
cellStyles CSSBox a
b) Text
c [Token]
d =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b { cellStyles :: CSSCell
cellStyles = CSSCell
cell' }
longhand a :: CSSBox a
a b :: CSSBox a
b c :: Text
c d :: [Token]
d | Just inner' :: a
inner' <- a -> a -> Text -> [Token] -> Maybe a
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> a
forall a. CSSBox a -> a
inner CSSBox a
a) (CSSBox a -> a
forall a. CSSBox a -> a
inner CSSBox a
b) Text
c [Token]
d = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b {
inner :: a
inner = a
inner'
}
longhand CSSBox { gridStyles :: forall a. CSSBox a -> CSSGrid
gridStyles = CSSGrid
parent } self :: CSSBox a
self "grid-area" [Ident x :: Text
x]
| Just ((colS :: Int
colS, colE :: Int
colE), (rowS :: Int
rowS, rowE :: Maybe Int
rowE)) <- Text
x Text
-> HashMap Text ((Int, Int), (Int, Maybe Int))
-> Maybe ((Int, Int), (Int, Maybe Int))
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
`HM.lookup` CSSGrid -> HashMap Text ((Int, Int), (Int, Maybe Int))
templateAreas CSSGrid
parent
= CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { cellStyles :: CSSCell
cellStyles = (CSSBox a -> CSSCell
forall a. CSSBox a -> CSSCell
cellStyles CSSBox a
self) {
columnStart :: Placement
columnStart = Int -> Placement
p Int
colS,
columnEnd :: Placement
columnEnd = Int -> Placement
p Int
colE,
rowStart :: Placement
rowStart = Int -> Placement
p Int
rowS,
rowEnd :: Placement
rowEnd = Int -> Placement
p (Int -> Placement) -> Int -> Placement
forall a b. (a -> b) -> a -> b
$ Int -> Maybe Int -> Int
forall a. a -> Maybe a -> a
fromMaybe (HashMap Text ((Int, Int), (Int, Maybe Int)) -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (HashMap Text ((Int, Int), (Int, Maybe Int)) -> Int)
-> HashMap Text ((Int, Int), (Int, Maybe Int)) -> Int
forall a b. (a -> b) -> a -> b
$ CSSGrid -> HashMap Text ((Int, Int), (Int, Maybe Int))
templateAreas CSSGrid
parent) Maybe Int
rowE
}}
where p :: Int -> Placement
p x :: Int
x = Int -> Maybe Text -> Placement
Numbered Int
x Maybe Text
forall a. Maybe a
Nothing
longhand _ _ _ _ = Maybe (CSSBox a)
forall a. Maybe a
Nothing
shorthand :: CSSBox a -> Text -> [Token] -> Props
shorthand self :: CSSBox a
self "font" toks :: [Token]
toks = case [Token] -> [[Token]]
parseOperands [Token]
toks of
(a :: [Token]
a:b :: [Token]
b:c :: [Token]
c:d :: [Token]
d:toks' :: [[Token]]
toks') | ret :: Props
ret@(_:_) <- [[Token]] -> Props
unordered [[Token]
a,[Token]
b,[Token]
c,[Token]
d] -> Props -> [[Token]] -> Props
forall a.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner Props
ret [[Token]]
toks'
(a :: [Token]
a:b :: [Token]
b:c :: [Token]
c:toks' :: [[Token]]
toks') | ret :: Props
ret@(_:_) <- [[Token]] -> Props
unordered [[Token]
a,[Token]
b,[Token]
c] -> Props -> [[Token]] -> Props
forall a.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner Props
ret [[Token]]
toks'
(a :: [Token]
a:b :: [Token]
b:toks' :: [[Token]]
toks') | ret :: Props
ret@(_:_) <- [[Token]] -> Props
unordered [[Token]
a,[Token]
b] -> Props -> [[Token]] -> Props
forall a.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner Props
ret [[Token]]
toks'
(a :: [Token]
a:toks' :: [[Token]]
toks') | ret :: Props
ret@(_:_) <- [[Token]] -> Props
unordered [[Token]
a] -> Props -> [[Token]] -> Props
forall a.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner Props
ret [[Token]]
toks'
toks' :: [[Token]]
toks' -> Props -> [[Token]] -> Props
forall a.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner [] [[Token]]
toks'
where
unordered :: [[Token]] -> Props
unordered operands :: [[Token]]
operands = CSSBox a -> [Text] -> [[Token]] -> Props
forall a. PropertyParser a => a -> [Text] -> [[Token]] -> Props
parseUnorderedShorthand' CSSBox a
self [
"font-style", "font-variant", "font-weight", "font-stretch"] [[Token]]
operands
inner :: [(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner ret :: [(a, [Token])]
ret (size :: [Token]
size:[Delim '/']:height :: [Token]
height:family :: [[Token]]
family)
| Just _ <- CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
self CSSBox a
self "font-size" [Token]
size,
Just _ <- CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
self CSSBox a
self "line-height" [Token]
height,
Just _ <- CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
self CSSBox a
self "font-family" ([Token] -> Maybe (CSSBox a)) -> [Token] -> Maybe (CSSBox a)
forall a b. (a -> b) -> a -> b
$ [[Token]] -> [Token]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Token]]
family =
("font-size", [Token]
size)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:("line-height", [Token]
height)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:
("font-family", [[Token]] -> [Token]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Token]]
family)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:[(a, [Token])]
ret
| Bool
otherwise = []
inner ret :: [(a, [Token])]
ret (size :: [Token]
size:family :: [[Token]]
family)
| Just _ <- CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
self CSSBox a
self "font-size" [Token]
size,
Just _ <- CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
self CSSBox a
self "font-family" ([Token] -> Maybe (CSSBox a)) -> [Token] -> Maybe (CSSBox a)
forall a b. (a -> b) -> a -> b
$ [[Token]] -> [Token]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Token]]
family =
("font-size", [Token]
size)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:("line-height", [Text -> Token
Ident "initial"])(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:
("font-family", [[Token]] -> [Token]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Token]]
family)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:[(a, [Token])]
ret
| Bool
otherwise = []
inner _ _ = []
shorthand self :: CSSBox a
self "margin" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 4, ([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "margin-top") [[Token]]
x,
(top :: [Token]
top:right :: [Token]
right:bottom :: [Token]
bottom:left :: [Token]
left:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x =
[("margin-top", [Token]
top), ("margin-right", [Token]
right),
("margin-bottom", [Token]
bottom), ("margin-left", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "padding" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 4, ([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "padding-top") [[Token]]
x,
(top :: [Token]
top:right :: [Token]
right:bottom :: [Token]
bottom:left :: [Token]
left:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x =
[("padding-top", [Token]
top), ("padding-right", [Token]
right),
("padding-bottom", [Token]
bottom), ("padding-left", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-width" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 4, (top :: [Token]
top:right :: [Token]
right:bottom :: [Token]
bottom:left :: [Token]
left:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-top-width") [[Token]]
x =
[("border-top-width", [Token]
top), ("border-right-width", [Token]
right),
("border-bottom-width", [Token]
bottom), ("border-left-width", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-color", "border-style", "border-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-top" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-top-color", "border-top-style", "border-top-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-right" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-right-color", "border-right-style", "border-right-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-bottom" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-bottom-color", "border-bottom-style", "border-bottom-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-left" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-left-color", "border-left-style", "border-left-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-inline" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-inline-color", "border-inline-style", "border-inline-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-inline-start" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-inline-start-color", "border-inline-start-style",
"border-inline-start-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-inline-end" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-inline-end-color", "border-inline-end-style",
"border-inline-end-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-block" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-block-color", "border-block-style", "border-block-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-block-start" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-block-start-color", "border-block-start-style",
"border-block-start-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-block-end" toks :: [Token]
toks = CSSBox a -> [Text] -> [Token] -> Props
forall a. PropertyParser a => a -> [Text] -> [Token] -> Props
parseUnorderedShorthand CSSBox a
self [
"border-block-end-color", "border-block-end-style",
"border-block-end-width"] [Token]
toks
shorthand self :: CSSBox a
self "border-color" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 4, (top :: [Token]
top:right :: [Token]
right:bottom :: [Token]
bottom:left :: [Token]
left:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-top-color") [[Token]]
x =
[("border-top-color", [Token]
top), ("border-right-color", [Token]
right),
("border-bottom-color", [Token]
bottom), ("border-left-color", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-style" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 4, (top :: [Token]
top:right :: [Token]
right:bottom :: [Token]
bottom:left :: [Token]
left:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-top-style") [[Token]]
x =
[("border-top-style", [Token]
top), ("border-right-style", [Token]
right),
("border-bottom-style", [Token]
bottom), ("border-left-style", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-width" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 4, (top :: [Token]
top:right :: [Token]
right:bottom :: [Token]
bottom:left :: [Token]
left:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-top-width") [[Token]]
x =
[("border-top-width", [Token]
top), ("border-right-width", [Token]
right),
("border-bottom-width", [Token]
bottom), ("border-left-width", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-inline-color" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 2, (s :: [Token]
s:e :: [Token]
e:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-inline-start-color") [[Token]]
x =
[("border-inline-start-color", [Token]
s), ("border-inline-end-color", [Token]
e)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-inline-style" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 2, (s :: [Token]
s:e :: [Token]
e:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-inline-start-style") [[Token]]
x =
[("border-inline-start-style", [Token]
s), ("border-inline-end-style", [Token]
e)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-inline-width" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 2, (s :: [Token]
s:e :: [Token]
e:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-inline-start-width") [[Token]]
x =
[("border-inline-start-width", [Token]
s), ("border-inline-end-style", [Token]
e)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-block-color" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 2, (s :: [Token]
s:e :: [Token]
e:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-block-start-color") [[Token]]
x =
[("border-block-start-color", [Token]
s), ("border-block-end-color", [Token]
e)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-block-style" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 2, (s :: [Token]
s:e :: [Token]
e:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-block-start-style") [[Token]]
x =
[("border-block-start-style", [Token]
s), ("border-block-end-style", [Token]
e)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self "border-block-width" toks :: [Token]
toks
| [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= 2, (s :: [Token]
s:e :: [Token]
e:_) <- [[Token]] -> [[Token]]
forall a. [a] -> [a]
cycle [[Token]]
x,
([Token] -> Bool) -> [[Token]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (CSSBox a -> Text -> [Token] -> Bool
forall a. PropertyParser a => a -> Text -> [Token] -> Bool
validProp CSSBox a
self "border-block-start-width") [[Token]]
x =
[("border-block-start-width", [Token]
s), ("border-block-end-width", [Token]
e)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand self :: CSSBox a
self k :: Text
k v :: [Token]
v | Just _ <- CSSBox a -> CSSBox a -> Text -> [Token] -> Maybe (CSSBox a)
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand CSSBox a
self CSSBox a
self Text
k [Token]
v = [(Text
k, [Token]
v)]
shorthand self :: CSSBox a
self k :: Text
k v :: [Token]
v | ret :: Props
ret@(_:_) <- Pattern -> Text -> [Token] -> Props
forall a. PropertyParser a => a -> Text -> [Token] -> Props
shorthand (CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
self) Text
k [Token]
v = Props
ret
shorthand self :: CSSBox a
self k :: Text
k v :: [Token]
v | ret :: Props
ret@(_:_) <- CSSFont -> Text -> [Token] -> Props
forall a. PropertyParser a => a -> Text -> [Token] -> Props
shorthand (CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font' CSSBox a
self) Text
k [Token]
v = Props
ret
shorthand self :: CSSBox a
self k :: Text
k v :: [Token]
v | ret :: Props
ret@(_:_) <- CSSInline -> Text -> [Token] -> Props
forall a. PropertyParser a => a -> Text -> [Token] -> Props
shorthand (CSSBox a -> CSSInline
forall a. CSSBox a -> CSSInline
inlineStyles CSSBox a
self) Text
k [Token]
v = Props
ret
shorthand self :: CSSBox a
self k :: Text
k v :: [Token]
v | ret :: Props
ret@(_:_) <- CSSGrid -> Text -> [Token] -> Props
forall a. PropertyParser a => a -> Text -> [Token] -> Props
shorthand (CSSBox a -> CSSGrid
forall a. CSSBox a -> CSSGrid
gridStyles CSSBox a
self) Text
k [Token]
v = Props
ret
shorthand self :: CSSBox a
self k :: Text
k v :: [Token]
v | ret :: Props
ret@(_:_) <- CSSCell -> Text -> [Token] -> Props
forall a. PropertyParser a => a -> Text -> [Token] -> Props
shorthand (CSSBox a -> CSSCell
forall a. CSSBox a -> CSSCell
cellStyles CSSBox a
self) Text
k [Token]
v = Props
ret
shorthand self :: CSSBox a
self k :: Text
k v :: [Token]
v = a -> Text -> [Token] -> Props
forall a. PropertyParser a => a -> Text -> [Token] -> Props
shorthand (CSSBox a -> a
forall a. CSSBox a -> a
inner CSSBox a
self) Text
k [Token]
v
validProp :: a -> Text -> [Token] -> Bool
validProp self :: a
self key :: Text
key value :: [Token]
value = Maybe a -> Bool
forall a. Maybe a -> Bool
isJust (Maybe a -> Bool) -> Maybe a -> Bool
forall a b. (a -> b) -> a -> b
$ a -> a -> Text -> [Token] -> Maybe a
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand a
self a
self Text
key [Token]
value