hasmin-1.0.2: src/Hasmin/Properties.hs
{-# LANGUAGE OverloadedStrings #-}
-----------------------------------------------------------------------------
-- |
-- Module : Hasmin.Properties
-- Copyright : (c) 2017 Cristian Adrián Ontivero
-- License : BSD3
-- Stability : experimental
-- Portability : unknown
--
-----------------------------------------------------------------------------
module Hasmin.Properties
( PropertyInfo(..)
, Inheritance(..)
, propertiesTraits
) where
import Control.Applicative ((<|>))
import Data.Attoparsec.Text (parseOnly)
import Data.Text (Text)
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
import Hasmin.Types.Value
import Hasmin.Parser.Value
data Inheritance = Inherited | NonInherited
deriving (Eq, Show)
data PropertyInfo =
PropertyInfo { initialValues :: Maybe Values
, inheritance :: Inheritance
, overwrittenBy :: [Text] -- shorthands that overwrite it
, subproperties :: [Text] -- longhands that can be merged into it
} deriving (Show)
-- | Map relating property names to information regarding the property.
propertiesTraits :: Map Text PropertyInfo
propertiesTraits = Map.fromList $ processTuples
[("align-content", "stretch", NonInherited, mempty, mempty)
,("align-items", "stretch", NonInherited, mempty, mempty)
,("align-self", "auto", NonInherited, mempty, mempty)
,("all", mempty, NonInherited, mempty, mempty) -- No practical initial value
,("animation", mempty, NonInherited, mempty,
["animation-name", "animation-duration", "animation-timing-function",
"animation-delay", "animation-iteration-count", "animation-direction",
"animation-fill-mode", "animation-play-state"])
,("animation-delay", "0s", NonInherited, ["animation"], mempty) -- experimental
,("animation-direction", "normal", NonInherited, ["animation"], mempty) -- experimental
,("animation-duration", "0s", NonInherited, mempty, mempty) -- experimental
,("animation-fill-mode", "none", NonInherited, ["animation"], mempty) -- experimental
,("animation-iteration-count", "1", NonInherited, ["animation"], mempty) -- experimental
,("animation-name", "none", NonInherited, ["animation"], mempty) -- experimental
,("animation-play-state", "running", NonInherited, ["animation"], mempty) -- experimental
,("animation-timing-function", "ease", NonInherited, ["animation"], mempty) -- experimental
,("backface-visibility", "visible", NonInherited, mempty, mempty)
,("-webkit-backface-visibility", "visible", NonInherited, mempty, mempty)
,("backdrop-filter", "none", NonInherited, mempty, mempty) -- experimental
,("-webkit-backdrop-filter", "none", NonInherited, mempty, mempty) -- experimental
,("background", mempty {-shorthand-}, NonInherited, mempty,
["background-image", "background-position", "background-size",
"background-repeat", "background-origin", "background-clip",
"background-attachment", "background-color"])
,("background-attachment", "scroll", NonInherited, ["background"], mempty)
,("background-blend-mode", "normal", NonInherited, mempty, mempty) -- TODO find out if these mempty are alright!
,("background-clip", "border-box", NonInherited, ["background"], mempty)
,("-webkit-background-clip", "border-box", NonInherited, ["background"], mempty)
,("background-color", "transparent", NonInherited, ["background"], mempty)
,("background-image", "none", NonInherited, ["background"], mempty)
,("background-origin", "padding-box", NonInherited, ["background"], mempty)
,("background-position", mempty, NonInherited, ["background"], ["background-position-x", "background-position-y"]) --shorthand
,("background-position-x", "left", NonInherited, ["background", "background-position"], mempty)
,("background-position-inline", mempty {-not applicable-}, NonInherited, mempty, mempty)
,("background-position-block", mempty {-not applicable-}, NonInherited, mempty, mempty)
,("background-position-y", "top", NonInherited, ["background", "background-position"], mempty)
,("background-repeat", "repeat", NonInherited, ["background"], mempty)
,("background-size", "auto", NonInherited, ["background"], mempty)
,("block-size", "auto", NonInherited, mempty, mempty) -- experimental
,("border", "medium none currentcolor", NonInherited, mempty, ["border-width", "border-style", "border-color"]) -- shorthand!
-- border-block-* would go here
,("border-bottom", "medium none currentcolor", NonInherited, ["border"],
["border-bottom-color", "border-bottom-style", "border-bottom-width"]) -- shorthand!
,("border-bottom-color", "currentcolor", NonInherited, ["border", "border-color", "border-bottom"], mempty)
,("border-bottom-left-radius", "0", NonInherited, ["border-radius"], mempty)
,("border-bottom-right-radius", "0", NonInherited, ["border-radius"], mempty)
,("border-bottom-style", "none", NonInherited, ["border", "border-style", "border-bottom"], mempty)
,("border-bottom-width", "medium", NonInherited, ["border", "border-width", "border-bottom"], mempty)
,("border-collapse", "separate", Inherited, mempty, mempty)
,("border-color", mempty, NonInherited, ["border"],
["border-top-color", "border-right-color", "border-bottom-color",
"border-left-color"]) -- shorthand!
,("border-image", mempty, NonInherited, ["border"],
["border-image-source", "border-image-slice", "border-image-width",
"border-image-outset", "border-image-repeat"]) -- shorthand
,("border-image-outset", "0", NonInherited, ["border", "border-image"], mempty)
,("border-image-repeat", "stretch", NonInherited, ["border", "border-image"], mempty)
,("border-image-slice", "100%", NonInherited, ["border", "border-image"], mempty)
,("border-image-source", "none", NonInherited, ["border", "border-image"], mempty)
,("border-image-width", "1", NonInherited, ["border", "border-image"], mempty)
-- border-inline-* would go here
,("border-left", "medium none currentcolor", NonInherited, ["border"], ["border-left-color", "border-left-style", "border-left-width"]) -- shorthand!
,("border-left-color", "currentcolor", NonInherited, ["border", "border-color", "border-left"], mempty)
,("border-left-style", "none", NonInherited, ["border", "border-style", "border-left"], mempty)
,("border-left-width", "medium", NonInherited, ["border", "border-width", "border-left"], mempty)
,("border-radius", mempty {-shorthand-}, NonInherited, mempty,
["border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius"])
,("border-right", "medium none currentcolor", NonInherited, ["border"],
["border-right-color", "border-right-style", "border-right-width"]) -- shorthand!
,("border-right-color", "currentcolor", NonInherited, ["border", "border-color", "border-right"], mempty)
,("border-right-style", "none", NonInherited, ["border", "border-style", "border-right"], mempty)
,("border-right-width", "medium", NonInherited, ["border", "border-width", "border-right"], mempty)
,("border-spacing", "0", Inherited, mempty, mempty)
,("border-style", mempty {-shorthand-}, NonInherited, ["border"], ["border-top-style", "border-right-style", "border-bottom-style", "border-left-style"])
,("border-top", "medium none currentcolor", NonInherited, ["border"], ["border-top-color", "border-top-style", "border-top-width"]) -- shorthand
,("border-top-color", "currentcolor", NonInherited, ["border", "border-color", "border-top"], mempty)
,("border-top-style", "none", NonInherited, ["border", "border-style", "border-top"], mempty)
,("border-top-width", "medium", NonInherited, ["border", "border-style", "border-top"], mempty)
,("border-top-left-radius", "0", NonInherited, ["border-radius"], mempty)
,("border-top-right-radius", "0", NonInherited, ["border-radius"], mempty)
,("border-width", mempty {-shorthand-}, NonInherited, ["border"], ["border-top-width", "border-right-width", "border-bottom-width", "border-left-width"])
,("bottom", "auto", NonInherited, mempty, mempty)
,("box-decoration-break", "slice", NonInherited, mempty, mempty) -- experimental
,("-webkit-box-decoration-break", "slice", NonInherited, mempty, mempty) -- experimental
,("-o-box-decoration-break", "slice", NonInherited, mempty, mempty) -- experimental
,("box-shadow", "none", NonInherited, mempty, mempty)
,("-webkit-box-shadow", "none", NonInherited, mempty, mempty)
,("box-sizing", "content-box", NonInherited, mempty, mempty) -- experimental
,("-webkit-box-sizing", "content-box", NonInherited, mempty, mempty) -- experimental
,("-moz-box-sizing", "content-box", NonInherited, mempty, mempty) -- experimental
,("break-after", "auto", NonInherited, mempty, mempty)
,("break-before", "auto", NonInherited, mempty, mempty)
,("break-inside", "auto", NonInherited, mempty, mempty)
,("caption-side", "top", Inherited, mempty, mempty)
,("caret-color", "auto", Inherited, mempty, mempty)
,("clear", "none", NonInherited, mempty, mempty)
,("clip", "auto", NonInherited, mempty, mempty) -- deprecated!
,("color", mempty {-UA dependent-}, Inherited, mempty, mempty)
,("column-count", "auto", NonInherited, ["columns"], mempty)
,("column-fill", "balance", NonInherited, mempty, mempty)
,("column-gap", "normal", NonInherited, mempty, mempty)
,("column-rule", "medium none currentcolor", NonInherited, mempty,
["column-rule-color", "column-rule-style", "column-rule-width"]) -- shorthand
,("column-rule-color", "currentcolor", NonInherited, ["column-rule"], mempty)
,("column-rule-style", "none", NonInherited, ["column-rule"], mempty)
,("column-rule-width", "medium", NonInherited, ["column-rule"], mempty)
,("column-span", "none", NonInherited, mempty, mempty)
,("column-width", "auto", NonInherited, ["columns"], mempty)
,("columns", mempty {-shorthand-}, NonInherited, mempty, ["column-width", "column-count"])
,("content", "normal", NonInherited, mempty, mempty)
,("counter-increment", "none", NonInherited, mempty, mempty)
,("counter-reset", "none", NonInherited, mempty, mempty)
,("cursor", "auto", Inherited, mempty, mempty)
,("direction", "ltr", Inherited, mempty, mempty)
,("display", "inline", NonInherited, mempty, mempty)
,("empty-cells", "show", Inherited, mempty, mempty)
,("filter", "none", NonInherited, mempty, mempty) -- experimental
,("-webkit-filter", "none", NonInherited, mempty, mempty) -- experimental
,("flex", mempty {-shorthand-}, NonInherited, mempty, ["flex-grow", "flex-shrink", "flex-basis"])
,("flex-basis", "auto", NonInherited, ["flex"], mempty)
,("flex-direction", "row", NonInherited, ["flex-flow"], mempty)
,("flex-flow", "row nowrap", NonInherited, mempty, ["flex-direction", "flex-wrap"]) -- shorthand
,("flex-grow", "0", NonInherited, ["flex"], mempty)
,("flex-shrink", "1", NonInherited, ["flex"], mempty)
,("flex-wrap", "nowrap", NonInherited, ["flex-flow"], mempty)
,("float", "none", NonInherited, mempty, mempty)
-- It seems it's neither inherited nor not inherited. It's not even a
-- property, but an @font-face "descriptor".
,("font-display", "auto", NonInherited, mempty, mempty)
,("font-family", mempty {-UA dependent-}, Inherited, ["font"], mempty)
,("font-feature-settings", "normal", Inherited, mempty, mempty)
,("font-kerning", "auto", Inherited, ["font"], mempty)
,("font-language-override", "normal", Inherited, ["font"], mempty)
,("font", mempty {-shorthand-}, Inherited, mempty, ["font-style", "font-variant", "font-weight", "font-stretch", "font-size", "line-height", "font-family"])
,("font-size-adjust", "none", Inherited, ["font"], mempty)
,("font-size", "medium", Inherited, ["font"], mempty)
,("font-stretch", "normal", Inherited, ["font"], mempty)
,("font-style", "normal", Inherited, ["font"], mempty)
,("font-synthesis", "weight style", Inherited, mempty, mempty)
,("font-variant-alternates", "normal", Inherited, mempty, mempty)
,("font-variant-caps", "normal", Inherited, mempty, mempty)
,("font-variant-east-asian", "normal", Inherited, mempty, mempty)
,("font-variant-ligatures", "normal", Inherited, mempty, mempty)
,("font-variant", "normal", Inherited, ["font"], mempty)
,("font-variant-numeric", "normal", Inherited, mempty, mempty)
,("font-variant-position", "normal", Inherited, mempty, mempty)
,("font-weight", "normal", Inherited, ["font"], mempty)
,("grid", mempty {-shorthand-}, NonInherited, mempty, ["grid-template-rows", "grid-template-columns", "grid-template-areas", "grid-auto-rows", "grid-auto-columns", "grid-auto-flow", "grid-column-gap", "grid-row-gap"])-- shorthand, experimental
,("grid-area", mempty {-shorthand-}, NonInherited, mempty, ["grid-row-start", "grid-row-end", "grid-column-start", "grid-column-end"]) -- shorthand, experimental
,("grid-auto-columns", "auto", NonInherited, mempty, mempty) -- experimental
,("-ms-grid-auto-columns", "auto", NonInherited, mempty, mempty) -- experimental
,("-webkit-grid-auto-columns", "auto", NonInherited, mempty, mempty) -- experimental
,("grid-auto-flow", "row", NonInherited, mempty, mempty) -- experimental
,("-webkit-grid-auto-flow", "row", NonInherited, mempty, mempty) -- experimental
,("grid-auto-rows", "auto", NonInherited, mempty, mempty) -- experimental
,("-ms-grid-auto-rows", "auto", NonInherited, mempty, mempty) -- experimental
,("-webkit-grid-auto-rows", "auto", NonInherited, mempty, mempty) -- experimental
,("grid-column", mempty {-shorthand-}, NonInherited, mempty, ["grid-column-start", "grid-column-end"])
,("grid-column-end", "auto", NonInherited, ["grid-column", "grid-area"], mempty) -- experimental
,("-ms-grid-column-end", "auto", NonInherited, ["grid-column", "grid-area"], mempty) -- experimental
,("-webkit-grid-column-end", "auto", NonInherited, ["grid-column", "grid-area"], mempty) -- experimental
,("grid-column-gap", "0", NonInherited, ["grid-gap"], mempty)
,("-ms-grid-column-gap", "0", NonInherited, ["grid-gap"], mempty)
,("grid-column-start", "auto", NonInherited, mempty, mempty) -- experimental
,("-ms-grid-column-start", "auto", NonInherited, mempty, mempty) -- experimental
,("-webkit-grid-column-start", "auto", NonInherited, mempty, mempty) -- experimental
,("grid-gap", mempty {-shorthand-}, NonInherited, mempty, ["grid-row-gap", "grid-column-gap"])
,("grid-row", mempty {-shorthand-}, NonInherited, mempty, ["grid-row-start", "grid-row-end"])
,("grid-row-end", "auto", NonInherited, ["grid-row", "grid-area"], mempty)
,("-ms-grid-row-end", "auto", NonInherited, ["grid-row", "grid-area"], mempty)
,("-webkit-grid-row-end", "auto", NonInherited, ["grid-row", "grid-area"], mempty)
,("grid-row-gap", "0", NonInherited, ["grid-gap"], mempty)
,("-webkit-grid-row-gap", "0", NonInherited, ["grid-gap"], mempty)
,("grid-row-start", "auto", NonInherited, ["grid-row", "grid-area"], mempty)
,("-ms-grid-row-start", "auto", NonInherited, ["grid-row", "grid-area"], mempty)
,("-webkit-grid-row-start", "auto", NonInherited, ["grid-row", "grid-area"], mempty)
,("grid-template", mempty {-shorthand-}, NonInherited, mempty, ["grid-template-columns", "grid-template-rows", "grid-template-areas"])
,("grid-template-areas", "none", NonInherited, ["grid-template"], mempty)
,("-webkit-grid-template-areas", "none", NonInherited, ["grid-template"], mempty)
,("grid-template-columns", "none", NonInherited, ["grid-template"], mempty)
,("-ms-grid-template-columns", "none", NonInherited, ["grid-template"], mempty)
,("-webkit-grid-template-columns", "none", NonInherited, ["grid-template"], mempty)
,("grid-template-rows", "none", NonInherited, ["grid-template"], mempty)
,("-ms-grid-template-rows", "none", NonInherited, ["grid-template"], mempty)
,("-webkit-grid-template-rows", "none", NonInherited, ["grid-template"], mempty)
,("height", "auto", NonInherited, mempty, mempty)
,("hyphens", "manual", NonInherited, mempty, mempty)
-- ,("image-orientation" --experimental
-- ,("image-rendering" --experimental
-- ,("inline-size", -- experimental
,("isolation", "auto", NonInherited, mempty, mempty)
,("justify-content", "flex-start", NonInherited, mempty, mempty)
,("left", "auto", NonInherited, mempty, mempty)
,("letter-spacing", "normal", Inherited, mempty, mempty)
,("line-break", "auto", NonInherited, mempty, mempty)
,("line-height", "normal", Inherited, ["font"], mempty)
,("list-style", "none disc outside", Inherited, mempty, ["list-style-type", "list-style-position", "list-style-image"]) -- none must go first, for entropy reasons.
,("list-style-image", "none", Inherited, ["list-style"], mempty)
,("list-style-position", "outside", Inherited, ["list-style"], mempty)
,("list-style-type", "disc", Inherited, ["list-style"], mempty)
,("margin", mempty {-shorthand-}, NonInherited, mempty, ["margin-top", "margin-right", "margin-bottom", "margin-left"]) -- shorthand
-- ,("margin-block-* -- experimental
,("margin-bottom", "0", NonInherited, ["margin"], mempty)
-- ,("margin-inline-*" --experimental
,("margin-left", "0", NonInherited, ["margin"], mempty)
,("margin-right", "0", NonInherited, ["margin"], mempty)
,("margin-top", "0", NonInherited, ["margin"], mempty)
,("mask", mempty {-shorthand-}, NonInherited, mempty, ["mask-clip", "mask-origin", "mask-border"])
,("mask-border", mempty {-shorthand-}, NonInherited, ["mask"], ["mask-border-source", "mask-border-slice", "mask-border-width", "mask-border-outset", "mask-border-repeat"])
,("mask-border-outset", "0", NonInherited, ["mask", "mask-border"], mempty)
,("mask-border-repeat", "stretch", NonInherited, ["mask", "mask-border"], mempty)
,("mask-border-slice", "0", NonInherited, ["mask", "mask-border"], mempty)
,("mask-border-source", "none", NonInherited, ["mask", "mask-border"], mempty)
,("mask-border-width", "auto", NonInherited, ["mask", "mask-border"], mempty)
,("mask-clip", "border-box", NonInherited, ["mask"], mempty) -- experimental
,("-webkit-mask-clip", "border-box", NonInherited, ["mask"], mempty) -- experimental
,("mask-composite", "add", NonInherited, ["mask"], mempty) -- experimental
,("mask-image", "none", NonInherited, ["mask"], mempty) -- experimental
,("-webkit-mask-image", "none", NonInherited, ["mask"], mempty) -- experimental
-- ,("mask-mode", "match-source", NonInherited) -- experimental, no support
,("mask-origin", "border-box", NonInherited, ["mask"], mempty) -- experimental
,("-webkit-mask-origin", "border-box", NonInherited, ["mask"], mempty) -- experimental
,("mask-position", "center", NonInherited, ["mask"], mempty) -- experimental
,("-webkit-mask-position", "center", NonInherited, ["mask"], mempty) -- experimental
,("mask-repeat", "no-repeat", NonInherited, ["mask"], mempty) -- experimental
,("-webkit-mask-repeat", "no-repeat", NonInherited, ["mask"], mempty) -- experimental
,("mask-size", "auto", NonInherited, ["mask"], mempty) -- experimental
,("mask-type", "luminance", NonInherited, mempty, mempty) -- experimental
-- ,("max-block-size", ("0", NonInherited)) -- experimental
,("max-height", "none", NonInherited, mempty, mempty)
-- ,("max-inline-size", ("0", NonInherited)) -- experimental
,("max-width", "none", NonInherited, mempty, mempty)
-- ,("min-block-size", ("0", NonInherited)) -- experimental
,("min-height", "0", NonInherited, mempty, mempty)
-- ,("min-inline-size", ("0", NonInherited)) -- experimental
,("min-width", "0", NonInherited, mempty, mempty)
,("mix-blend-mode", "normal", NonInherited, mempty, mempty)
,("object-fit", "fill", Inherited, mempty, mempty)
,("object-position", "50% 50%", Inherited, mempty, mempty)
-- ,("offset-*", ("auto", NonInherited)) -- experimental
,("opacity", "1", NonInherited, mempty, mempty)
,("order", "0", NonInherited, mempty, mempty)
,("orphans", "2", Inherited, mempty, mempty)
,("outline", "medium none invert", NonInherited, mempty, ["outline-width", "outline-style", "outline-color"]) -- shorthand
,("outline-color", "invert" , NonInherited, ["outline"], mempty)
,("outline-offset", "0", NonInherited, mempty, mempty)
,("outline-style", "none", NonInherited, ["outline"], mempty)
,("outline-width", "medium", NonInherited, ["outline"], mempty)
,("overflow", "visible", NonInherited, mempty, mempty)
,("overflow-wrap", "normal", Inherited, mempty, mempty) -- also called word-wrap
,("overflow-x", "visible", NonInherited, mempty, mempty) -- experimental
,("overflow-y", "visible", NonInherited, mempty, mempty) -- experimental
,("padding", mempty {-shorthand-}, NonInherited, mempty, ["padding-top", "padding-right", "padding-bottom", "padding-left"])
-- ,("padding-block*", ("0", NonInherited)) -- experimental
,("padding-bottom", "0", NonInherited, ["padding"], mempty)
-- ,("padding-inline-*", ("0", NonInherited)) -- experimental
,("padding-left", "0", NonInherited, ["padding"], mempty)
,("padding-right", "0", NonInherited, ["padding"], mempty)
,("padding-top", "0", NonInherited, ["padding"], mempty)
,("page-break-after", "auto", NonInherited, mempty, mempty)
,("page-break-before", "auto", NonInherited, mempty, mempty)
,("page-break-inside", "auto", NonInherited, mempty, mempty)
,("perspective", "none", NonInherited, mempty, mempty) -- experimental
,("perspective-origin", "50% 50%", NonInherited, mempty, mempty) -- experimental
,("pointer-events", "auto", Inherited, mempty, mempty)
,("position", "static", NonInherited, mempty, mempty)
,("quotes", mempty {-UA dependent-}, Inherited, mempty, mempty)
,("resize", "none", NonInherited, mempty, mempty)
,("right", "auto", NonInherited, mempty, mempty)
,("right", "auto", NonInherited, mempty, mempty)
-- ,("ruby-*", -- experimental
,("scroll-behavior", "auto", NonInherited, mempty, mempty)
-- ,("scroll-snap-coordinate", ("none", NonInherited)) -- experimental
-- ,("scroll-snap-destination",("0 0", NonInherited)) -- experimental, actually 0px 0px
-- ,("scroll-snap-type", -- experimental
,("shape-image-threshold", "0", NonInherited, mempty, mempty)
,("shape-margin", "0", NonInherited, mempty, mempty)
,("shape-outside", "none", NonInherited, mempty, mempty)
,("tab-size", "8", Inherited, mempty, mempty) -- experimental
,("-moz-tab-size", "8", Inherited, mempty, mempty) -- experimental
,("-o-tab-size", "8", Inherited, mempty, mempty) -- experimental
,("table-layout", "auto", NonInherited, mempty, mempty)
,("text-align", "start", NonInherited, mempty, mempty)
,("text-align-last", "auto", Inherited, mempty, mempty) -- experimental
,("text-combine-upright", "none", Inherited, mempty, mempty) -- experimental
,("-webkit-text-combine-upright", "none", Inherited, mempty, mempty) -- experimental
,("text-decoration", "currentcolor solid none", NonInherited, mempty, ["text-decoration-color", "text-decoration-style", "text-decoration-line"]) -- shorthand
,("text-decoration-color", "currentcolor", NonInherited, ["text-decoration"], mempty)
,("text-decoration-line", "none", NonInherited, ["text-decoration"], mempty)
,("text-decoration-style", "solid", NonInherited, ["text-decoration"], mempty)
,("text-emphasis", "none currentcolor", NonInherited, mempty, ["text-emphasis-color", "text-emphasis-style"]) -- shorthand
,("text-emphasis-color", "currentcolor", NonInherited, ["text-emphasis"], mempty)
,("text-emphasis-position", mempty {-"over right"-}, NonInherited, mempty, mempty)
,("text-emphasis-style", "none", NonInherited, ["text-emphasis"], mempty)
,("text-indent", "0", Inherited, mempty, mempty)
,("text-orientation", "mixed", Inherited, mempty, mempty) -- experimental
,("-webkit-text-orientation", "mixed", Inherited, mempty, mempty) -- experimental
,("text-overflow", "clip", NonInherited, mempty, mempty)
,("text-rendering", "auto", Inherited, mempty, mempty)
,("text-shadow", "none", Inherited, mempty, mempty)
,("text-transform", "none", Inherited, mempty, mempty)
,("text-underline-position", "auto", Inherited, mempty, mempty)
,("top", "auto", NonInherited, mempty, mempty)
,("touch-action", "auto", NonInherited, mempty, mempty)
,("transform", "none", NonInherited, mempty, mempty) -- experimental!
,("-webkit-transform", "none", NonInherited, mempty, mempty) -- experimental!
,("transform-box", "border-box", NonInherited, mempty, mempty) -- experimental!
,("transform-origin", mempty {-"50% 50% 0"-}, NonInherited, mempty, mempty) -- experimental!
,("-webkit-transform-origin", mempty {-"50% 50% 0"-}, NonInherited, mempty, mempty) -- experimental!
,("transform-style", "flat", NonInherited, mempty, mempty) -- experimental!
,("-webkit-transform-style", "flat", NonInherited, mempty, mempty) -- experimental!
,("transition", mempty {-shorthand-}, NonInherited, mempty,
["transition-property", "transition-duration",
"transition-timing-function", "transition-delay"])
,("transition-delay", "0s", NonInherited, ["transition"], mempty) -- experimental
,("transition-duration", "0s", NonInherited, ["transition"], mempty) -- experimental
,("-webkit-transition-duration", "0s", NonInherited, ["transition"], mempty) -- experimental
,("-o-transition-duration", "0s", NonInherited, ["transition"], mempty) -- experimental
,("-webkit-transition-delay", "0s", NonInherited, ["transition"], mempty) -- experimental
,("transition-property", "all", NonInherited, ["transition"], mempty) -- experimental
,("-webkit-transition-property", "all", NonInherited, ["transition"], mempty) -- experimental
,("-o-transition-property", "all", NonInherited, ["transition"], mempty) -- experimental
,("transition-timing-function", "ease", NonInherited, ["transition"], mempty) -- experimental
,("-webkit-transition-timing-function", "ease", NonInherited, ["transition"], mempty) -- experimental
,("unicode-bidi", "normal", NonInherited, mempty, mempty)
,("user-select", "none", NonInherited, mempty, mempty) -- experimental
,("-moz-user-select", "none", NonInherited, mempty, mempty) -- experimental
,("-webkit-user-select", "none", NonInherited, mempty, mempty) -- experimental
,("-ms-user-select", "none", NonInherited, mempty, mempty) -- experimental
,("vertical-align", "baseline", NonInherited, mempty, mempty)
,("white-space", "normal", Inherited, mempty, mempty)
,("widows", "2", Inherited, mempty, mempty)
,("width", "auto", NonInherited, mempty, mempty)
,("will-change", "auto", NonInherited, mempty, mempty)
,("word-break", "normal", Inherited, mempty, mempty)
,("word-spacing", "normal", Inherited, mempty, mempty)
,("writing-mode", "horizontal-tb", Inherited, mempty, mempty) -- experimental
,("-ms-writing-mode", "horizontal-tb", Inherited, mempty, mempty) -- experimental
,("-webkit-writing-mode", "horizontal-tb", Inherited, mempty, mempty) -- experimental
,("z-index", "auto", NonInherited, mempty, mempty)
]
where
-- Converts the tuples with CSS properties data into a tuple containing a
-- property's name, and its traits. Allows keeping the table in a more readable
-- and maintainable format.
processTuples :: [(Text, Text, Inheritance, [Text], [Text])] -> [(Text, PropertyInfo)]
processTuples = foldr (\(p,t,i,a,b) xs -> (p, PropertyInfo (getValues p t) i a b) : xs) []
getValues p s = case parseOnly (valuesFor p <|> valuesFallback) s of
Right initValues -> Just initValues
Left _ -> Nothing