GlobalAnnotations.hs revision 1a38107941725211e7c3f051f7a8f5e12199f03a
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder{-# LANGUAGE DeriveDataTypeable #-}
456238178f89e5a3de2988ee6c8af924297d52d9Christian MaederModule : $Header$
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederDescription : data structures for global annotations
456238178f89e5a3de2988ee6c8af924297d52d9Christian MaederCopyright : (c) Klaus Luettich, Christian Maeder and Uni Bremen 2002-2006
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederMaintainer : Christian.Maeder@dfki.de
43b4c41fbb07705c9df321221ab9cb9832460407Christian MaederStability : experimental
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederPortability : portable
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian MaederData structures for global annotations
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maederimport qualified Data.Map as Map
c0c2380bced8159ff0297ece14eba948bd236471Christian Maederimport qualified Common.Lib.Rel as Rel
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder-- | all global annotations and a field for pretty printing stuff
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maederdata GlobalAnnos = GA
3e8b136f23ed57d40ee617f49bcac37830b58cabChristian Maeder { prec_annos :: PrecedenceGraph -- ^ precedences
ef9e8535c168d3f774d9e74368a2317a9eda5826Christian Maeder , assoc_annos :: AssocMap -- ^ associativity
bab2d88d650448628730ed3b65c9f99c52500e8cChristian Maeder , display_annos :: DisplayMap -- ^ display annotations
3e8b136f23ed57d40ee617f49bcac37830b58cabChristian Maeder , literal_annos :: LiteralAnnos -- ^ literal annotations
ef9e8535c168d3f774d9e74368a2317a9eda5826Christian Maeder , literal_map :: LiteralMap -- ^ redundant literal map
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder , prefix_map :: PrefixMap -- ^ abbreviated IRI prefixes
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder } deriving (Show, Eq, Typeable, Data)
3dde4051c307b609159a097f08a05108fdd036efJonathan von Schroeder-- | empty (or initial) global annotations
3dde4051c307b609159a097f08a05108fdd036efJonathan von SchroederemptyGlobalAnnos :: GlobalAnnos
3dde4051c307b609159a097f08a05108fdd036efJonathan von SchroederemptyGlobalAnnos = GA
3dde4051c307b609159a097f08a05108fdd036efJonathan von Schroeder , display_annos = Map.empty
3dde4051c307b609159a097f08a05108fdd036efJonathan von Schroeder , literal_annos = emptyLiteralAnnos
3dde4051c307b609159a097f08a05108fdd036efJonathan von Schroeder , prefix_map = Map.empty }
3dde4051c307b609159a097f08a05108fdd036efJonathan von Schroeder-- | literal annotations for string, lists, number and floating
825a1e4ca1e768de4b4883c65a6cb1dce6aa0002Christian Maederdata LiteralAnnos = LA
3dde4051c307b609159a097f08a05108fdd036efJonathan von Schroeder { string_lit :: Maybe (Id, Id)
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder , list_lit :: Map.Map Id (Id, Id)
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder , number_lit :: Maybe Id
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder , float_lit :: Maybe (Id, Id)
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder } deriving (Show, Eq, Typeable, Data)
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder-- | empty literal annotations
456238178f89e5a3de2988ee6c8af924297d52d9Christian MaederemptyLiteralAnnos :: LiteralAnnos
4b4a0b61b72cf8478a5d4d5002bca9f699401363Christian MaederemptyLiteralAnnos = LA
4b4a0b61b72cf8478a5d4d5002bca9f699401363Christian Maeder { string_lit = Nothing
bab2d88d650448628730ed3b65c9f99c52500e8cChristian Maeder , number_lit = Nothing
9f226cec9f978edaba67aee4c4e04e3d3b994b87Daniel Calegari , float_lit = Nothing }
6a2dad705deefd1b7a7e09b84fd2d75f2213be47Christian Maeder-- | ids to be displayed according to a format
a7c27282e71cf4505026645f96d4f5cb8a284e32Christian Maedertype DisplayMap = Map.Map Id (Map.Map Display_format [Token])
014dc30f64ec25e4790cca987d4d1e6635430510Christian Maeder-- | a redundant map for 'LiteralAnnos'
f04e8f3ff56405901be968fd4c6e9769239f1a9bKlaus Luettichtype LiteralMap = Map.Map Id LiteralType
4ba08bfca0cc8d9da65397b8dfd2654fdb4c0e62Christian Maeder-- | a map for expansion of abbreviated/simple IRI to full IRI
feca1d35123d8c31aee238c9ce79947b0bf65494Christian Maedertype PrefixMap = Map.Map String IRI
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maeder-- | description of the type of a literal for a given 'Id' in 'LiteralMap'
f5c0884429b01e74c6e658ded921fb2e16dfb478Christian Maederdata LiteralType =
db675e8302ddb0d6528088ce68f5e98a00e890e3Christian Maeder StringCons Id -- ^ refer to the 'Id' of the null string
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder | ListCons Id Id -- ^ brackets (as 'Id') and 'Id' of matching empty list
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder | ListNull Id -- ^ brackets (as 'Id') for the empty list
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder | NoLiteral -- ^ and error value for a 'getLiteralType'
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder deriving (Show, Eq, Typeable, Data)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder-- | the 'LiteralType' of an 'Id' (possibly 'NoLiteral')
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaedergetLiteralType :: GlobalAnnos -> Id -> LiteralType
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaedergetLiteralType ga i =
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder Map.findWithDefault NoLiteral i $ literal_map ga
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder-- | a map of associative ids
a3c6d8e0670bf2aa71bc8e2a3b1f45d56dd65e4cChristian Maedertype AssocMap = Map.Map Id AssocEither
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder-- | check if 'Id' has a given associativity
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederisAssoc :: AssocEither -> AssocMap -> Id -> Bool
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederisAssoc ae amap i =
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder Nothing -> False
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder Just ae' -> ae' == ae
b568982efd0997d877286faa592d81b03c8c67b8Christian Maeder-- | a binary relation over ids as precedence graph
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maedertype PrecedenceGraph = Rel.Rel Id
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder-- | return precedence relation of two ids
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederprecRel :: PrecedenceGraph -- ^ Graph describing the precedences
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder -> Id -- ^ x oID (y iid z) -- outer id
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder -> Id -- ^ x oid (y iID z) -- inner id
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian Maeder{- a 'Lower' corresponds to %prec {out_id} < {in_id}
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian MaederBothDirections means <> was given (or derived by transitive closure) -}
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian MaederprecRel pg out_id in_id =
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian Maeder case (Rel.member in_id out_id pg, Rel.member out_id in_id pg) of
d946c1bfdd7d58aa7c023efe864d5999eb44a61bChristian Maeder (False, True) -> Lower
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder (True, False) -> Higher
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder (True, True) -> BothDirections
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder (False, False) -> NoDirection
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder-- | lookup of an display [string] in the GlobalAnnos record
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederlookupDisplay :: GlobalAnnos -> Display_format -> Id -> Maybe [Token]
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederlookupDisplay ga df i = case Map.lookup i (display_annos ga) of
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder Nothing -> Nothing
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder Just df_map -> case Map.lookup df df_map of
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder Nothing -> Nothing
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder r@(Just disp_toks) -> if null disp_toks then Nothing else r