From 9d1815a24921ec0e5b9a08914368b1c50bb39a84 Mon Sep 17 00:00:00 2001 From: Adrian Cochrane Date: Wed, 3 May 2023 15:04:45 +1200 Subject: [PATCH] Add support for marker-side property. --- src/Data/CSS/Preprocessor/Text.hs | 44 ++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/src/Data/CSS/Preprocessor/Text.hs b/src/Data/CSS/Preprocessor/Text.hs index c6ac71e..9eaf6a8 100644 --- a/src/Data/CSS/Preprocessor/Text.hs +++ b/src/Data/CSS/Preprocessor/Text.hs @@ -13,7 +13,7 @@ import Data.CSS.Preprocessor.Text.CounterStyle (parseCounter, counterRender, CounterStore'(..), decimalCounter, defaultCounterStore, CounterStore, CounterStyle(..)) -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe, isJust) import qualified Data.HashMap.Lazy as M import Data.Function ((&)) @@ -36,7 +36,8 @@ data TextStyle p = TextStyle { listStyleImage :: [Token], listStyleType :: [Token], listPosInside :: Bool, - markerMatchParent :: Bool, + markerIsRight :: Maybe Bool, + isRTL :: Bool, beforePseudo :: Maybe (TextStyle p), afterPseudo :: Maybe (TextStyle p), @@ -56,7 +57,8 @@ instance PropertyParser p => PropertyParser (TextStyle p) where listStyleImage = [], listStyleType = [Ident "disc"], listPosInside = False, - markerMatchParent = False, + markerIsRight = Nothing, + isRTL = False, beforePseudo = Nothing, afterPseudo = Nothing, markerPseudo = Nothing @@ -73,7 +75,9 @@ instance PropertyParser p => PropertyParser (TextStyle p) where listStyleImage = listStyleImage parent, listStyleType = listStyleType parent, listPosInside = listPosInside parent, - markerMatchParent = markerMatchParent parent, + markerIsRight = if isJust $ markerIsRight parent + then Just $ isRTL parent else Nothing, + isRTL = isRTL parent, beforePseudo = Nothing, afterPseudo = Nothing, markerPseudo = Nothing @@ -134,12 +138,19 @@ instance PropertyParser p => PropertyParser (TextStyle p) where Just self { listPosInside = False } longhand _ self "list-style-position" [Ident "initial"] = Just self { listPosInside = False } + longhand _ self "marker-side" [Ident "match-self"] = - Just self { markerMatchParent = False } - longhand _ self "marker-side" [Ident "match-parent"] = - Just self { markerMatchParent = True } + Just self { markerIsRight = Nothing } + longhand parent self "marker-side" [Ident "match-parent"] = + Just self { markerIsRight = Just $ isRTL parent } longhand _ self "marker-side" [Ident "initial"] = - Just self { markerMatchParent = False } + Just self { markerIsRight = Nothing } + longhand _ self k@"direction" v@[Ident "ltr"] = Just self { + isRTL = False, counterProps = insertList k v $ counterProps self } + longhand _ self k@"direction" v@[Ident "rtl"] = Just self { + isRTL = True, counterProps = insertList k v $ counterProps self } + longhand _ self k@"direction" v@[Ident "initial"] = Just self { + isRTL = False, counterProps = insertList k v $ counterProps self } -- Capture `content` properties & anything else using counter(s) functions. -- This is important in Rhapsode for the sake of navigational markers. @@ -249,7 +260,10 @@ addBullet (StyleTree self@TextStyle { StyleTree self { isListItem = False } (t child { counterProps = insertList "content" txt $ counterProps child } : childs) -addBullet (StyleTree self@TextStyle { +addBullet (StyleTree self@TextStyle { markerIsRight = Nothing } childs) store txt + = addBullet (StyleTree self { markerIsRight = Just $ isRTL self } childs) + store txt +addBullet (StyleTree self@TextStyle { markerIsRight = Just False, isListItem = True, listPosInside = False, markerPseudo = Just child } childs) store txt = insertPseudos store $ StyleTree self { @@ -263,6 +277,18 @@ addBullet (StyleTree self@TextStyle { -- Generate a new layout box for the bullet to sit outside of. StyleTree temp childs ] +addBullet (StyleTree self@TextStyle { markerIsRight = Just True, + isListItem = True, listPosInside = False, markerPseudo = Just child + } childs) store txt = insertPseudos store $ + StyleTree self { + isListItem = False, + counterProps=insertList "display" [Ident "flex"] $ counterProps child + } [ + StyleTree temp childs, + t child { + counterProps= insertList "content" txt $ counterProps child + } + ] addBullet (StyleTree self childs) store _ = insertPseudos store $ StyleTree self { isListItem = False, -- 2.30.2