module Stylish.Style.Selector( QueryableStyleSheet(..), queryableStyleSheet, queryRules ) where import Stylish.Style.Selector.Index import Stylish.Style.Selector.Interpret import Stylish.Style.Selector.Specificity import Stylish.Style.Selector.Importance import Stylish.Style.Selector.Common import Stylish.Parse (StyleSheet(..)) -- TODO do performance tests to decide beside between strict/lazy, -- or is another Map implementation better? import Data.HashMap.Strict import Data.Text.Internal (Text(..)) import Data.CSS.Syntax.Tokens type QueryableStyleSheet = QueryableStyleSheet' (ImportanceSplitter ( OrderedRuleStore (InterpretedRuleStore StyleIndex) )) data QueryableStyleSheet' store = QueryableStyleSheet' { store :: store, priority :: Int -- author vs user agent vs user styles } queryableStyleSheet :: QueryableStyleSheet queryableStyleSheet = QueryableStyleSheet' {store = new, priority = 0} instance RuleStore s => StyleSheet (QueryableStyleSheet' s) where addRule self@(QueryableStyleSheet' store priority) rule = self { store = addStyleRule store priority $ styleRule' rule } queryRules (QueryableStyleSheet' store _) el = lookupRules store el -------- ---- Cascade -------- cascadeRules rules = cascadeProperties $ concat $ Prelude.map properties rules cascadeProperties ((name, value):props) = insert name value $ cascadeProperties props