{-# 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, ParagraphOptions,
defaultParagraphOptions, paragraphAlignment, ParagraphAlignment(..))
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, units)
import Graphics.Layout.CSS.Font (CSSFont)
import Graphics.Layout.Grid.CSS (CSSGrid(..), CSSCell(..), Placement(..))
import Graphics.Layout.Grid.Table (TableOptions)
import Graphics.Layout.Inline.CSS (CSSInline(..))
import Graphics.Layout.Flex.CSS (CSSFlex(..))
import Data.Maybe (isJust, fromMaybe)
import Text.Read (readMaybe)
import qualified Data.HashMap.Lazy as HM
import Data.Text (Text, unpack)
import Debug.Trace (trace)
data CSSBox a = CSSBox {
forall a. CSSBox a -> Display
display :: Display,
forall a. CSSBox a -> BoxSizing
boxSizing :: BoxSizing,
forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox :: PaddedBox Unitted Unitted,
forall a. CSSBox a -> Pattern
font :: Pattern,
forall a. CSSBox a -> CSSFont
font' :: CSSFont,
forall a. CSSBox a -> a
inner :: a,
forall a. CSSBox a -> [(Text, [Token])]
innerProperties :: [(Text, [Token])],
forall a. CSSBox a -> a
innerParent :: a,
forall a. CSSBox a -> CSSGrid
gridStyles :: CSSGrid,
forall a. CSSBox a -> CSSCell
cellStyles :: CSSCell,
forall a. CSSBox a -> CSSInline
inlineStyles :: CSSInline,
forall a. CSSBox a -> PageOptions
pageOptions :: PageOptions,
forall a. CSSBox a -> ParagraphOptions
paragraphOptions :: ParagraphOptions,
forall a. CSSBox a -> TableOptions
tableOptions :: TableOptions,
forall a. CSSBox a -> CSSFlex
flexOptions :: CSSFlex
}
flexOpts' :: CSSBox a -> CSSFlex
flexOpts' self :: CSSBox a
self@CSSBox { flexOptions :: forall a. CSSBox a -> CSSFlex
flexOptions = CSSFlex
ret } = CSSFlex
ret { textRTL :: Bool
textRTL = CSSBox a -> Direction
forall {a}. CSSBox a -> Direction
direction CSSBox a
self Direction -> Direction -> Bool
forall a. Eq a => a -> a -> Bool
== Direction
DirRTL }
direction :: CSSBox a -> Direction
direction CSSBox { inlineStyles :: forall a. CSSBox a -> CSSInline
inlineStyles = CSSInline Text
_ TextOptions
opts UnicodeBidi
_ } = TextOptions -> Direction
textDirection TextOptions
opts
txtOpts :: CSSBox a -> TextOptions
txtOpts CSSBox { inlineStyles :: forall a. CSSBox a -> CSSInline
inlineStyles = CSSInline Text
_ TextOptions
opts UnicodeBidi
_ } = 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 (Double
0,Text
"px") (Double
0,Text
"px") (Double
0,Text
"px") (Double
0,Text
"px")
data Display = Block | Grid | Inline | Table | None |
TableRow | | TableRowGroup | | TableCell |
TableColumn | TableColumnGroup | TableCaption | Flex | Inline' Display deriving Display -> Display -> Bool
(Display -> Display -> Bool)
-> (Display -> Display -> Bool) -> Eq Display
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Display -> Display -> Bool
== :: Display -> Display -> Bool
$c/= :: Display -> Display -> Bool
/= :: 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 a. Eq a => a -> [a] -> 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 {
boxSizing :: BoxSizing
boxSizing = BoxSizing
ContentBox,
display :: Display
display = Display
Inline,
cssBox :: PaddedBox Unitted Unitted
cssBox = 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 Double
0 Double
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,
innerProperties :: [(Text, [Token])]
innerProperties = [],
innerParent :: a
innerParent = [Char] -> a -> a
forall a. [Char] -> a -> a
trace ([Char]
"Parent not overriden upon " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++
[Char]
"buffering inner properties for length resolution!") 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,
pageOptions :: PageOptions
pageOptions = Int32 -> Int32 -> Word -> Word -> PageOptions
PageOptions Int32
0 Int32
0 Word
2 Word
2,
paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
defaultParagraphOptions {
paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
AlignStart
},
tableOptions :: TableOptions
tableOptions = TableOptions
forall a. PropertyParser a => a
temp,
flexOptions :: CSSFlex
flexOptions = CSSFlex
forall a. PropertyParser a => a
temp
}
inherit :: CSSBox a -> CSSBox a
inherit CSSBox a
parent = 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,
innerProperties :: [(Text, [Token])]
innerProperties = [],
innerParent :: a
innerParent = 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,
pageOptions :: PageOptions
pageOptions = CSSBox a -> PageOptions
forall a. CSSBox a -> PageOptions
pageOptions CSSBox a
parent,
paragraphOptions :: ParagraphOptions
paragraphOptions = CSSBox a -> ParagraphOptions
forall a. CSSBox a -> ParagraphOptions
paragraphOptions CSSBox a
parent,
tableOptions :: TableOptions
tableOptions = TableOptions -> TableOptions
forall a. PropertyParser a => a -> a
inherit (TableOptions -> TableOptions) -> TableOptions -> TableOptions
forall a b. (a -> b) -> a -> b
$ CSSBox a -> TableOptions
forall a. CSSBox a -> TableOptions
tableOptions CSSBox a
parent,
flexOptions :: CSSFlex
flexOptions = CSSFlex -> CSSFlex
forall a. PropertyParser a => a -> a
inherit (CSSFlex -> CSSFlex) -> CSSFlex -> CSSFlex
forall a b. (a -> b) -> a -> b
$ CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOptions CSSBox a
parent
}
priority :: CSSBox a -> [Text]
priority CSSBox a
self = [[Text]] -> [Text]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [(CSSBox a -> CSSInline) -> [Text]
forall {a}. PropertyParser a => (CSSBox a -> a) -> [Text]
x CSSBox a -> CSSInline
forall a. CSSBox a -> CSSInline
inlineStyles, (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 -> CSSFlex) -> [Text]
forall {a}. PropertyParser a => (CSSBox a -> a) -> [Text]
x CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOptions, (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 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 CSSBox a
_ CSSBox a
self Text
"font-family" [Ident Text
"initial"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { font :: Pattern
font = [Char] -> Pattern -> Pattern
forall {a} {b}. Eq a => a -> [(a, b)] -> [(a, b)]
unset [Char]
"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 CSSBox a
_ CSSBox a
self Text
"box-sizing" [Ident Text
"content-box"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self {boxSizing :: BoxSizing
boxSizing = BoxSizing
ContentBox}
longhand CSSBox a
_ CSSBox a
self Text
"box-sizing" [Ident Text
"border-box"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self {boxSizing :: BoxSizing
boxSizing = BoxSizing
BorderBox}
longhand CSSBox a
_ CSSBox a
self Text
"box-sizing" [Ident Text
"initial"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self {boxSizing :: BoxSizing
boxSizing = BoxSizing
ContentBox}
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"padding-top" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"padding-bottom" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"padding-left" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"padding-right" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"padding-inline-start" [Token]
toks
| Just 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 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"padding-inline-end" [Token]
toks
| Just 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 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"border-top-width" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"border-bottom-width" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"border-left-width" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"border-right-width" [Token]
toks | Just 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 CSSBox a
p CSSBox a
self Text
"border-inline-start-color" [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 Text
"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 Text
"border-right-color" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-inline-start-width" [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 Text
"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 Text
"border-right-width" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-inline-start-style" [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 Text
"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 Text
"border-right-style" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-inline-end-color" [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 Text
"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 Text
"border-left-color" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-inline-end-width" [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 Text
"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 Text
"border-left-width" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-inline-end-style" [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 Text
"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 Text
"border-left-style" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-start-start-radius" [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 Text
"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 Text
"border-top-right-radius" [Token]
t
longhand CSSBox a
p CSSBox a
self Text
"border-start-end-radius" [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 Text
"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 Text
"border-top-left-radius" [Token]
t
longhand CSSBox a
p CSSBox a
s Text
"border-end-start-radius" [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 Text
"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 Text
"border-bottom-right-radius" [Token]
t
longhand CSSBox a
p CSSBox a
s Text
"border-end-end-radius" [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 Text
"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 Text
"border-bottom-left-radius" [Token]
t
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"margin-top" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"margin-bottom" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"margin-left" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"margin-right" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"margin-inline-start" [Token]
toks
| Just 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 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"margin-inline-end" [Token]
toks
| Just 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 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 CSSBox a
p CSSBox a
self Text
"padding-block-start" [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 Text
"padding-top" [Token]
t
longhand CSSBox a
p CSSBox a
self Text
"padding-block-end" [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 Text
"padding-bottom" [Token]
t
longhand CSSBox a
p CSSBox a
self Text
"margin-block-start" [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 Text
"margin-top" [Token]
t
longhand CSSBox a
p CSSBox a
self Text
"margin-block-end" [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 Text
"margin-bottom" [Token]
t
longhand CSSBox a
p CSSBox a
self Text
"border-block-start-color" [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 Text
"border-top-color" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-block-start-style" [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 Text
"border-top-style" [Token]
toks
longhand CSSBox a
p CSSBox a
self Text
"border-block-start-width" [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 Text
"border-top-width" [Token]
toks
longhand CSSBox a
p CSSBox a
s Text
"border-block-end-color" [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 Text
"border-bottom-color" [Token]
t
longhand CSSBox a
p CSSBox a
s Text
"border-block-end-style" [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 Text
"border-bottom-style" [Token]
t
longhand CSSBox a
p CSSBox a
s Text
"border-block-end-width" [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 Text
"border-bottom-width" [Token]
t
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"width" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"height" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"max-width" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"min-width" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"max-height" [Token]
toks | Just 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {cssBox :: forall a. CSSBox a -> PaddedBox Unitted Unitted
cssBox = PaddedBox Unitted Unitted
box} Text
"min-height" [Token]
toks | Just 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 CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"block"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Block }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"none"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
None }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"grid"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Grid }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"table"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Table }
longhand CSSBox { display :: forall a. CSSBox a -> Display
display = Display
Table } CSSBox a
self Text
"display" [Ident Text
"table-row-group"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display=Display
TableRowGroup }
longhand CSSBox { display :: forall a. CSSBox a -> Display
display = Display
Table } CSSBox a
self Text
"display" [Ident Text
"table-header-group"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
TableHeaderGroup }
longhand CSSBox { display :: forall a. CSSBox a -> Display
display = Display
Table } CSSBox a
self Text
"display" [Ident Text
"table-footer-group"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
TableFooterGroup }
longhand CSSBox a
parent CSSBox a
self Text
"display" [Ident Text
"table-row"] | CSSBox a -> Bool
forall {a}. CSSBox a -> Bool
rowContainer CSSBox a
parent =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
TableRow }
longhand CSSBox { display :: forall a. CSSBox a -> Display
display = Display
TableRow } CSSBox a
self Text
"display" [Ident Text
"table-cell"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
TableCell }
longhand CSSBox { display :: forall a. CSSBox a -> Display
display = Display
Table } CSSBox a
self Text
"display" [Ident Text
"table-column-group"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
TableColumnGroup }
longhand CSSBox { display :: forall a. CSSBox a -> Display
display = Display
TableColumnGroup } CSSBox a
self Text
"display" [Ident Text
"table-column"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
TableColumn }
longhand CSSBox { display :: forall a. CSSBox a -> Display
display = Display
Table } CSSBox a
self Text
"display" [Ident Text
"table-caption"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display=Display
TableCaption }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Inline }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"flex"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Flex }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline-block"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Block }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline", Ident Text
"block"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Block }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline-flex"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Flex }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline", Ident Text
"flex"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Flex }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline-grid"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Grid }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline", Ident Text
"grid"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Grid }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline-table"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Table }
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"inline", Ident Text
"table"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display -> Display
Inline' Display
Table}
longhand CSSBox a
p CSSBox a
self Text
"display" (Ident Text
"block":[Token]
v) = 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 Text
"display" [Token]
v
longhand CSSBox a
_ CSSBox a
self Text
"display" [Ident Text
"initial"] = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { display :: Display
display = Display
Inline }
longhand CSSBox a
_ CSSBox a
self Text
"orphans" [Number Text
_ (NVInteger 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 CSSBox a
_ CSSBox a
self Text
"widows" [Number Text
_ (NVInteger 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 CSSBox a
_ self :: CSSBox a
self@CSSBox {paragraphOptions :: forall a. CSSBox a -> ParagraphOptions
paragraphOptions=ParagraphOptions
o} Text
"text-align" [Ident Text
"initial"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
o { paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
AlignStart } }
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {paragraphOptions :: forall a. CSSBox a -> ParagraphOptions
paragraphOptions=ParagraphOptions
o} Text
"text-align" [Ident Text
"start"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
o { paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
AlignStart } }
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {paragraphOptions :: forall a. CSSBox a -> ParagraphOptions
paragraphOptions=ParagraphOptions
o} Text
"text-align" [Ident Text
"end"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
o { paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
AlignEnd } }
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {paragraphOptions :: forall a. CSSBox a -> ParagraphOptions
paragraphOptions=ParagraphOptions
o} Text
"text-align" [Ident Text
"left"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
o { paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
AlignLeft } }
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {paragraphOptions :: forall a. CSSBox a -> ParagraphOptions
paragraphOptions=ParagraphOptions
o} Text
"text-align" [Ident Text
"right"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
o { paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
AlignRight } }
longhand CSSBox a
_ self :: CSSBox a
self@CSSBox {paragraphOptions :: forall a. CSSBox a -> ParagraphOptions
paragraphOptions=ParagraphOptions
o} Text
"text-align" [Ident Text
"center"] =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
o { paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
AlignCentreH } }
longhand CSSBox a
p self :: CSSBox a
self@CSSBox { paragraphOptions :: forall a. CSSBox a -> ParagraphOptions
paragraphOptions = ParagraphOptions
o } Text
"text-align"
[Ident Text
"match-parent"] = case ParagraphOptions -> ParagraphAlignment
paragraphAlignment(ParagraphOptions -> ParagraphAlignment)
-> ParagraphOptions -> ParagraphAlignment
forall a b. (a -> b) -> a -> b
$CSSBox a -> ParagraphOptions
forall a. CSSBox a -> ParagraphOptions
paragraphOptions CSSBox a
p of
ParagraphAlignment
AlignStart | Direction
DirLTR <- CSSBox a -> Direction
forall {a}. CSSBox a -> Direction
direction CSSBox a
p -> ParagraphAlignment -> Maybe (CSSBox a)
ret ParagraphAlignment
AlignLeft
ParagraphAlignment
AlignStart | Direction
DirRTL <- CSSBox a -> Direction
forall {a}. CSSBox a -> Direction
direction CSSBox a
p -> ParagraphAlignment -> Maybe (CSSBox a)
ret ParagraphAlignment
AlignRight
ParagraphAlignment
AlignEnd | Direction
DirLTR <- CSSBox a -> Direction
forall {a}. CSSBox a -> Direction
direction CSSBox a
p -> ParagraphAlignment -> Maybe (CSSBox a)
ret ParagraphAlignment
AlignRight
ParagraphAlignment
AlignEnd | Direction
DirRTL <- CSSBox a -> Direction
forall {a}. CSSBox a -> Direction
direction CSSBox a
p -> ParagraphAlignment -> Maybe (CSSBox a)
ret ParagraphAlignment
AlignLeft
ParagraphAlignment
x -> ParagraphAlignment -> Maybe (CSSBox a)
ret ParagraphAlignment
x
where ret :: ParagraphAlignment -> Maybe (CSSBox a)
ret ParagraphAlignment
x = CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
self { paragraphOptions :: ParagraphOptions
paragraphOptions = ParagraphOptions
o { paragraphAlignment :: ParagraphAlignment
paragraphAlignment = ParagraphAlignment
x } }
longhand CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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 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 CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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 CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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 CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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 CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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,
Just CSSFlex
flex' <- CSSFlex -> CSSFlex -> Text -> [Token] -> Maybe CSSFlex
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOpts' CSSBox a
a) (CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOpts' 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', flexOptions :: CSSFlex
flexOptions = CSSFlex
flex' }
longhand CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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,
Just CSSFlex
flex' <- CSSFlex -> CSSFlex -> Text -> [Token] -> Maybe CSSFlex
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOpts' CSSBox a
a) (CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOpts' 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', flexOptions :: CSSFlex
flexOptions = CSSFlex
flex' }
longhand CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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 CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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 CSSBox a
a CSSBox a
b Text
c [Token]
d | Just TableOptions
table'<-TableOptions
-> TableOptions -> Text -> [Token] -> Maybe TableOptions
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> TableOptions
forall a. CSSBox a -> TableOptions
tableOptions CSSBox a
a) (CSSBox a -> TableOptions
forall a. CSSBox a -> TableOptions
tableOptions CSSBox a
b) Text
c [Token]
d
= CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b { tableOptions :: TableOptions
tableOptions = TableOptions
table' }
longhand CSSBox a
a CSSBox a
b Text
c [Token]
d | Just CSSFlex
flex' <- CSSFlex -> CSSFlex -> Text -> [Token] -> Maybe CSSFlex
forall a. PropertyParser a => a -> a -> Text -> [Token] -> Maybe a
longhand (CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOpts' CSSBox a
a) (CSSBox a -> CSSFlex
forall a. CSSBox a -> CSSFlex
flexOpts' CSSBox a
b) Text
c [Token]
d =
CSSBox a -> Maybe (CSSBox a)
forall a. a -> Maybe a
Just CSSBox a
b { flexOptions :: CSSFlex
flexOptions = CSSFlex
flex' }
longhand CSSBox a
a CSSBox a
b Text
c [Token]
d
| ([Token]
d', Token
_:[Token]
_)<-[Token] -> ([Token], [Token])
testLengthProp [Token]
d, Just a
_<-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 {
innerProperties :: [(Text, [Token])]
innerProperties = (Text
c, [Token]
d)(Text, [Token]) -> [(Text, [Token])] -> [(Text, [Token])]
forall a. a -> [a] -> [a]
:CSSBox a -> [(Text, [Token])]
forall a. CSSBox a -> [(Text, [Token])]
innerProperties CSSBox a
b,
innerParent :: a
innerParent = CSSBox a -> a
forall a. CSSBox a -> a
inner CSSBox a
a
}
longhand CSSBox a
a CSSBox a
b Text
c [Token]
d | Just 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 } CSSBox a
self Text
"grid-area" [Ident Text
x]
| Just ((Int
colS, Int
colE), (Int
rowS, 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 a. HashMap Text a -> 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 Int
x = Int -> Maybe Text -> Placement
Numbered Int
x Maybe Text
forall a. Maybe a
Nothing
longhand CSSBox a
_ CSSBox a
_ Text
_ [Token]
_ = Maybe (CSSBox a)
forall a. Maybe a
Nothing
shorthand :: CSSBox a -> Text -> [Token] -> [(Text, [Token])]
shorthand CSSBox a
self Text
"font" [Token]
toks = case [Token] -> [[Token]]
parseOperands [Token]
toks of
([Token]
a:[Token]
b:[Token]
c:[Token]
d:[[Token]]
toks') | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- [[Token]] -> [(Text, [Token])]
unordered [[Token]
a,[Token]
b,[Token]
c,[Token]
d] -> [(Text, [Token])] -> [[Token]] -> [(Text, [Token])]
forall {a}.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner [(Text, [Token])]
ret [[Token]]
toks'
([Token]
a:[Token]
b:[Token]
c:[[Token]]
toks') | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- [[Token]] -> [(Text, [Token])]
unordered [[Token]
a,[Token]
b,[Token]
c] -> [(Text, [Token])] -> [[Token]] -> [(Text, [Token])]
forall {a}.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner [(Text, [Token])]
ret [[Token]]
toks'
([Token]
a:[Token]
b:[[Token]]
toks') | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- [[Token]] -> [(Text, [Token])]
unordered [[Token]
a,[Token]
b] -> [(Text, [Token])] -> [[Token]] -> [(Text, [Token])]
forall {a}.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner [(Text, [Token])]
ret [[Token]]
toks'
([Token]
a:[[Token]]
toks') | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- [[Token]] -> [(Text, [Token])]
unordered [[Token]
a] -> [(Text, [Token])] -> [[Token]] -> [(Text, [Token])]
forall {a}.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner [(Text, [Token])]
ret [[Token]]
toks'
[[Token]]
toks' -> [(Text, [Token])] -> [[Token]] -> [(Text, [Token])]
forall {a}.
IsString a =>
[(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner [] [[Token]]
toks'
where
unordered :: [[Token]] -> [(Text, [Token])]
unordered [[Token]]
operands = CSSBox a -> [Text] -> [[Token]] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> [Text] -> [[Token]] -> [(Text, [Token])]
parseUnorderedShorthand' CSSBox a
self [
Text
"font-style", Text
"font-variant", Text
"font-weight", Text
"font-stretch"] [[Token]]
operands
inner :: [(a, [Token])] -> [[Token]] -> [(a, [Token])]
inner [(a, [Token])]
ret ([Token]
size:[Delim Char
'/']:[Token]
height:[[Token]]
family)
| Just CSSBox a
_ <- 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
"font-size" [Token]
size,
Just CSSBox a
_ <- 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
"line-height" [Token]
height,
Just CSSBox a
_ <- 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
"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 =
(a
"font-size", [Token]
size)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:(a
"line-height", [Token]
height)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. 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 [(a, [Token])]
ret ([Token]
size:[[Token]]
family)
| Just CSSBox a
_ <- 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
"font-size" [Token]
size,
Just CSSBox a
_ <- 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
"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 =
(a
"font-size", [Token]
size)(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. a -> [a] -> [a]
:(a
"line-height", [Text -> Token
Ident Text
"initial"])(a, [Token]) -> [(a, [Token])] -> [(a, [Token])]
forall a. 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 [(a, [Token])]
_ [[Token]]
_ = []
shorthand CSSBox a
self Text
"margin" [Token]
toks
| [[Token]] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
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 Text
"margin-top") [[Token]]
x,
([Token]
top:[Token]
right:[Token]
bottom:[Token]
left:[[Token]]
_) <- [[Token]] -> [[Token]]
forall a. HasCallStack => [a] -> [a]
cycle [[Token]]
x =
[(Text
"margin-top", [Token]
top), (Text
"margin-right", [Token]
right),
(Text
"margin-bottom", [Token]
bottom), (Text
"margin-left", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand CSSBox a
self Text
"padding" [Token]
toks
| [[Token]] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
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 Text
"padding-top") [[Token]]
x,
([Token]
top:[Token]
right:[Token]
bottom:[Token]
left:[[Token]]
_) <- [[Token]] -> [[Token]]
forall a. HasCallStack => [a] -> [a]
cycle [[Token]]
x =
[(Text
"padding-top", [Token]
top), (Text
"padding-right", [Token]
right),
(Text
"padding-bottom", [Token]
bottom), (Text
"padding-left", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand CSSBox a
self Text
"border-width" [Token]
toks
| [[Token]] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
0 Bool -> Bool -> Bool
&& [[Token]] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Token]]
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
4, ([Token]
top:[Token]
right:[Token]
bottom:[Token]
left:[[Token]]
_) <- [[Token]] -> [[Token]]
forall a. HasCallStack => [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 Text
"border-top-width") [[Token]]
x =
[(Text
"border-top-width", [Token]
top), (Text
"border-right-width", [Token]
right),
(Text
"border-bottom-width", [Token]
bottom), (Text
"border-left-width", [Token]
left)]
where x :: [[Token]]
x = [Token] -> [[Token]]
parseOperands [Token]
toks
shorthand CSSBox a
self Text
k [Token]
v | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- Pattern -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> Pattern
forall a. CSSBox a -> Pattern
font CSSBox a
self) Text
k [Token]
v = [(Text, [Token])]
ret
shorthand CSSBox a
self Text
k [Token]
v | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- CSSFont -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> CSSFont
forall a. CSSBox a -> CSSFont
font' CSSBox a
self) Text
k [Token]
v = [(Text, [Token])]
ret
shorthand CSSBox a
self Text
k [Token]
v | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- CSSInline -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> CSSInline
forall a. CSSBox a -> CSSInline
inlineStyles CSSBox a
self) Text
k [Token]
v = [(Text, [Token])]
ret
shorthand CSSBox a
self Text
k [Token]
v | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- CSSGrid -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> CSSGrid
forall a. CSSBox a -> CSSGrid
gridStyles CSSBox a
self) Text
k [Token]
v = [(Text, [Token])]
ret
shorthand CSSBox a
self Text
k [Token]
v | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- CSSCell -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> CSSCell
forall a. CSSBox a -> CSSCell
cellStyles CSSBox a
self) Text
k [Token]
v = [(Text, [Token])]
ret
shorthand CSSBox a
self Text
k [Token]
v | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- TableOptions -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> TableOptions
forall a. CSSBox a -> TableOptions
tableOptions CSSBox a
self) Text
k [Token]
v = [(Text, [Token])]
ret
shorthand CSSBox a
self Text
k [Token]
v | ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_) <- a -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> a
forall a. CSSBox a -> a
inner CSSBox a
self) Text
k [Token]
v = [(Text, [Token])]
ret
shorthand CSSBox a
self Text
k [Token]
v
| ([Token]
v', [Token]
ls)<-[Token] -> ([Token], [Token])
testLengthProp [Token]
v, ret :: [(Text, [Token])]
ret@((Text, [Token])
_:[(Text, [Token])]
_)<-a -> Text -> [Token] -> [(Text, [Token])]
forall a.
PropertyParser a =>
a -> Text -> [Token] -> [(Text, [Token])]
shorthand (CSSBox a -> a
forall a. CSSBox a -> a
inner CSSBox a
self) Text
k [Token]
v' =
[(Text
key, (Token -> Token) -> [Token] -> [Token]
forall a b. (a -> b) -> [a] -> [b]
map ([Token] -> Token -> Token
restore [Token]
ls) [Token]
value) | (Text
key, [Token]
value) <- [(Text, [Token])]
ret]
where
restore :: [Token] -> Token -> Token
restore [Token]
ls (Dimension Text
_ (NVInteger Integer
x) Text
"px") | Int
x' Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< [Token] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Token]
ls = [Token]
ls [Token] -> Int -> Token
forall a. HasCallStack => [a] -> Int -> a
!! Int
x'
where x' :: Int
x' = Integer -> Int
forall a. Num a => Integer -> a
fromInteger Integer
x
restore [Token]
_ Token
ret = Token
ret
shorthand CSSBox a
self Text
k [Token]
v | Just CSSBox a
_ <- 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)]
| Bool
otherwise = []
validProp :: a -> Text -> [Token] -> Bool
validProp a
self Text
key [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
testLengthProp :: [Token] -> ([Token], [Token])
testLengthProp (tok :: Token
tok@(Dimension Text
_ NumericValue
_ Text
unit):[Token]
toks) | Text
unit Text -> [Text] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Text]
units =
let ([Token]
toks', [Token]
lengths) = [Token] -> ([Token], [Token])
testLengthProp [Token]
toks
in (Text -> NumericValue -> Text -> Token
Dimension Text
"" (Integer -> NumericValue
NVInteger (Integer -> NumericValue) -> Integer -> NumericValue
forall a b. (a -> b) -> a -> b
$ Int -> Integer
forall a. Integral a => a -> Integer
toInteger (Int -> Integer) -> Int -> Integer
forall a b. (a -> b) -> a -> b
$ Int -> Int
forall a. Enum a => a -> a
succ (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ [Token] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Token]
lengths) Text
"px"Token -> [Token] -> [Token]
forall a. a -> [a] -> [a]
:[Token]
toks',
Token
tokToken -> [Token] -> [Token]
forall a. a -> [a] -> [a]
:[Token]
lengths)
testLengthProp (Token
tok:[Token]
toks) = let ([Token]
toks',[Token]
ls) = [Token] -> ([Token], [Token])
testLengthProp [Token]
toks in (Token
tokToken -> [Token] -> [Token]
forall a. a -> [a] -> [a]
:[Token]
toks',[Token]
ls)
testLengthProp [] = ([], [])