From 1bb6f74645e39bb45e33a7413771ea7f971628c9 Mon Sep 17 00:00:00 2001 From: Volpeon Date: Sat, 27 May 2023 12:10:51 +0200 Subject: Structural improvements --- src/Data/JLD/Expansion.hs | 56 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 17 deletions(-) (limited to 'src/Data/JLD/Expansion.hs') diff --git a/src/Data/JLD/Expansion.hs b/src/Data/JLD/Expansion.hs index 18d7fc6..ff2d9c3 100644 --- a/src/Data/JLD/Expansion.hs +++ b/src/Data/JLD/Expansion.hs @@ -3,19 +3,19 @@ module Data.JLD.Expansion (JLDEParams (..), expand) where import Data.JLD.Prelude import Data.JLD.Control.Monad.RES (REST, withEnvRES, withStateRES) -import Data.JLD.Context (BACParams (..), EIParams (..), buildActiveContext, expandIri) +import Data.JLD.Error (JLDError (..)) +import Data.JLD.Expansion.Context (BACParams (..), EIParams (..), buildActiveContext, expandIri) +import Data.JLD.Expansion.Global (JLDExpansionEnv (..), JLDExpansionState, JLDExpansionT) import Data.JLD.Model.ActiveContext (ActiveContext (..), lookupTerm) import Data.JLD.Model.Direction (Direction (..)) -import Data.JLD.Error (JLDError (..)) import Data.JLD.Model.GraphObject (isNotGraphObject, toGraphObject) import Data.JLD.Model.Keyword (Keyword (..), isKeyword, isNotKeyword, parseKeyword) import Data.JLD.Model.Language (Language (..)) import Data.JLD.Model.ListObject (isListObject, isNotListObject, toListObject) -import Data.JLD.Monad (JLDEEnv (..), JLDEState (..), JLDET, JLDEnv (..), JLDT, modifyActiveContext) import Data.JLD.Model.NodeObject (isNotNodeObject) -import Data.JLD.Options (JLDVersion (..)) import Data.JLD.Model.TermDefinition (TermDefinition (..)) import Data.JLD.Model.ValueObject (isNotValueObject', isValueObject, isValueObject') +import Data.JLD.Options (JLDVersion (..)) import Data.JLD.Util ( allStrings, getMapDefault, @@ -44,6 +44,36 @@ import Data.Vector qualified as V (catMaybes, concat, cons, filter, fromList, ma import Data.Vector.Algorithms.Merge qualified as V import Text.URI (URI) +type JLDET e m = REST (JLDEEnv e m) (JLDError e) JLDEState m + +data JLDEEnv e m = JLDEEnv + { jldeEnvGlobal :: JLDExpansionEnv e m + , jldeEnvFrameExpansion :: Bool + , jldeEnvFromMap :: Bool + , jldeEnvBaseUrl :: URI + , jldeEnvActiveProperty :: Maybe Text + } + deriving (Show) + +data JLDEState = JLDEState + { jldeStateGlobal :: JLDExpansionState + , jldeStateActiveContext :: ActiveContext + } + deriving (Show, Eq) + +data JLDEParams = JLDEParams + { jldeParamsFrameExpansion :: Bool + , jldeParamsFromMap :: Bool + , jldeParamsBaseUrl :: URI + , jldeParamsActiveProperty :: Maybe Text + } + deriving (Show, Eq) + +modifyActiveContext :: MonadState JLDEState m => (ActiveContext -> ActiveContext) -> m () +modifyActiveContext fn = modify \s -> s{jldeStateActiveContext = fn (jldeStateActiveContext s)} + +-- + type EO1314T e m = REST (JLDEEnv e m) (JLDError e) EO1314State m data EO1314State = EO1314State @@ -141,7 +171,7 @@ eo1314ExpandValue activeProperty value = do eo1314ExpandKeywordItem :: Monad m => Maybe Text -> Key -> Keyword -> Value -> EO1314T e m () eo1314ExpandKeywordItem inputType key keyword value = do JLDEEnv{..} <- ask - let JLDEnv{..} = jldeEnvGlobal + let JLDExpansionEnv{..} = jldeEnvGlobal -- 13.4.1. when (jldeEnvActiveProperty == Just (show KeywordReverse)) <| throwError InvalidReversePropertyMap @@ -222,7 +252,7 @@ eo1314ExpandKeywordItem inputType key keyword value = do -- 13.4.6. KeywordIncluded -- 13.4.6.1. - | JLD1_0 <- jldEnvProcessingMode -> pure Nothing + | JLD1_0 <- jldExpansionEnvProcessingMode -> pure Nothing -- 13.4.6.2. | otherwise -> do expandedValue <- valueToArray <$> eo1314ExpandAC Nothing value id @@ -242,7 +272,7 @@ eo1314ExpandKeywordItem inputType key keyword value = do expandedValue <- case value of -- 13.4.7.1. _ | inputType == Just (show KeywordJson) -> do - if jldEnvProcessingMode == JLD1_0 + if jldExpansionEnvProcessingMode == JLD1_0 then throwError InvalidValueObjectValue else pure value -- 13.4.7.2. @@ -269,7 +299,7 @@ eo1314ExpandKeywordItem inputType key keyword value = do _ -> throwError InvalidLanguageTaggedString -- 13.4.9. KeywordDirection - | JLD1_0 <- jldEnvProcessingMode -> pure Nothing + | JLD1_0 <- jldExpansionEnvProcessingMode -> pure Nothing | otherwise -> case value of String ((`elem` ["ltr", "rtl"]) -> True) | jldeEnvFrameExpansion -> pure <. Just <. Array <| V.singleton value @@ -815,14 +845,6 @@ expandValue activeProperty value = do -- -data JLDEParams = JLDEParams - { jldeParamsFrameExpansion :: Bool - , jldeParamsFromMap :: Bool - , jldeParamsBaseUrl :: URI - , jldeParamsActiveProperty :: Maybe Text - } - deriving (Show, Eq) - exModifyActiveContext :: Monad m => (ActiveContext -> ActiveContext) -> JLDET e m () exModifyActiveContext fn = modify \st -> st{jldeStateActiveContext = fn (jldeStateActiveContext st)} @@ -911,7 +933,7 @@ expand' = \case -- 4.3. | otherwise -> Object <$> expandValue activeProperty value -expand :: Monad m => ActiveContext -> Value -> URI -> (JLDEParams -> JLDEParams) -> JLDT e m Value +expand :: Monad m => ActiveContext -> Value -> URI -> (JLDEParams -> JLDEParams) -> JLDExpansionT e m Value expand activeContext value baseUrl paramsFn = expand' value |> withEnvRES env -- cgit v1.2.3-54-g00ecf