{-# LANGUAGE PatternGuards #-}
module Text.XML.HaXml.Schema.Environment
( module Text.XML.HaXml.Schema.Environment
) where
import Text.XML.HaXml.Types (QName(..),Name(..),Namespace(..))
import Text.XML.HaXml.Schema.XSDTypeModel
import Text.XML.HaXml.Schema.NameConversion (wordsBy)
import Text.XML.HaXml.Schema.Parse (targetPrefix)
import qualified Data.Map as Map
import Data.Map (Map)
import Data.List (foldl')
data Environment = Environment
{ Environment -> Map QName (Either SimpleType ComplexType)
env_type :: Map QName (Either SimpleType ComplexType)
, Environment -> Map QName (Either SimpleType ComplexType)
env_allTypes :: Map QName (Either SimpleType ComplexType)
, Environment -> Map QName ElementDecl
env_element :: Map QName ElementDecl
, Environment -> Map QName AttributeDecl
env_attribute :: Map QName AttributeDecl
, Environment -> Map QName Group
env_group :: Map QName Group
, Environment -> Map QName AttrGroup
env_attrgroup :: Map QName AttrGroup
, Environment -> Map String String
env_namespace :: Map String String
, Environment -> Map QName [(QName, String)]
env_extendty :: Map QName [(QName,FilePath)]
, Environment -> Map QName [(QName, String)]
env_substGrp :: Map QName [(QName,FilePath)]
, Environment -> Map QName String
env_typeloc :: Map QName FilePath
}
emptyEnv :: Environment
emptyEnv :: Environment
emptyEnv = Map QName (Either SimpleType ComplexType)
-> Map QName (Either SimpleType ComplexType)
-> Map QName ElementDecl
-> Map QName AttributeDecl
-> Map QName Group
-> Map QName AttrGroup
-> Map String String
-> Map QName [(QName, String)]
-> Map QName [(QName, String)]
-> Map QName String
-> Environment
Environment Map QName (Either SimpleType ComplexType)
forall k a. Map k a
Map.empty Map QName (Either SimpleType ComplexType)
forall k a. Map k a
Map.empty Map QName ElementDecl
forall k a. Map k a
Map.empty Map QName AttributeDecl
forall k a. Map k a
Map.empty Map QName Group
forall k a. Map k a
Map.empty
Map QName AttrGroup
forall k a. Map k a
Map.empty Map String String
forall k a. Map k a
Map.empty Map QName [(QName, String)]
forall k a. Map k a
Map.empty Map QName [(QName, String)]
forall k a. Map k a
Map.empty Map QName String
forall k a. Map k a
Map.empty
combineEnv :: Environment -> Environment -> Environment
combineEnv :: Environment -> Environment -> Environment
combineEnv e1 :: Environment
e1 e0 :: Environment
e0 = Environment :: Map QName (Either SimpleType ComplexType)
-> Map QName (Either SimpleType ComplexType)
-> Map QName ElementDecl
-> Map QName AttributeDecl
-> Map QName Group
-> Map QName AttrGroup
-> Map String String
-> Map QName [(QName, String)]
-> Map QName [(QName, String)]
-> Map QName String
-> Environment
Environment
{ env_type :: Map QName (Either SimpleType ComplexType)
env_type = Map QName (Either SimpleType ComplexType)
-> Map QName (Either SimpleType ComplexType)
-> Map QName (Either SimpleType ComplexType)
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union (Environment -> Map QName (Either SimpleType ComplexType)
env_type Environment
e1) (Environment -> Map QName (Either SimpleType ComplexType)
env_type Environment
e0)
, env_allTypes :: Map QName (Either SimpleType ComplexType)
env_allTypes = Map QName (Either SimpleType ComplexType)
-> Map QName (Either SimpleType ComplexType)
-> Map QName (Either SimpleType ComplexType)
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union (Environment -> Map QName (Either SimpleType ComplexType)
env_allTypes Environment
e1) (Environment -> Map QName (Either SimpleType ComplexType)
env_allTypes Environment
e0)
, env_element :: Map QName ElementDecl
env_element = Map QName ElementDecl
-> Map QName ElementDecl -> Map QName ElementDecl
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union (Environment -> Map QName ElementDecl
env_element Environment
e1) (Environment -> Map QName ElementDecl
env_element Environment
e0)
, env_attribute :: Map QName AttributeDecl
env_attribute = Map QName AttributeDecl
-> Map QName AttributeDecl -> Map QName AttributeDecl
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union (Environment -> Map QName AttributeDecl
env_attribute Environment
e1) (Environment -> Map QName AttributeDecl
env_attribute Environment
e0)
, env_group :: Map QName Group
env_group = Map QName Group -> Map QName Group -> Map QName Group
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union (Environment -> Map QName Group
env_group Environment
e1) (Environment -> Map QName Group
env_group Environment
e0)
, env_attrgroup :: Map QName AttrGroup
env_attrgroup = Map QName AttrGroup -> Map QName AttrGroup -> Map QName AttrGroup
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union (Environment -> Map QName AttrGroup
env_attrgroup Environment
e1) (Environment -> Map QName AttrGroup
env_attrgroup Environment