LibName.hs revision 6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aed
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederModule : $Header$
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederDescription : library names for HetCASL and development graphs
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederCopyright : (c) Christian Maeder, DFKI GmbH 2008
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederMaintainer : Christian.Maeder@dfki.de
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederStability : provisional
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederPortability : portable
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederAbstract syntax of HetCASL specification libraries
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Follows Sect. II:2.2.5 of the CASL Reference Manual.
0789323dfca89bae8f710da5bba20220b9af2feaChristian MaederomTs :: [Token]
0789323dfca89bae8f710da5bba20220b9af2feaChristian MaederomTs = [genToken "OM"]
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian MaedermkQualName :: SIMPLE_ID -> LIB_ID -> Id -> Id
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian MaedermkQualName nodeId libId i =
0789323dfca89bae8f710da5bba20220b9af2feaChristian Maeder Id omTs [i, simpleIdToId nodeId, libIdToId libId] $ posOfId i
248ab4f138caa9a594cd3fe0815e7fd4150701efChristian MaederisQualNameFrom :: SIMPLE_ID -> LIB_ID -> Id -> Bool
248ab4f138caa9a594cd3fe0815e7fd4150701efChristian MaederisQualNameFrom nodeId libId i@(Id _ cs _) = case cs of
5dc46f6d0fdd8747d730f9e79a93978145ed43bbChristian Maeder _ : n : l : _ | isQualName i ->
5dc46f6d0fdd8747d730f9e79a93978145ed43bbChristian Maeder n == simpleIdToId nodeId && libIdToId libId == l
0789323dfca89bae8f710da5bba20220b9af2feaChristian MaederisQualName :: Id -> Bool
0789323dfca89bae8f710da5bba20220b9af2feaChristian MaederisQualName (Id ts cs _) = case cs of
0789323dfca89bae8f710da5bba20220b9af2feaChristian Maeder _ : _ : _ -> ts == omTs
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst SchulzgetLibId :: Id -> Id
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst SchulzgetLibId j@(Id _ cs _) = case cs of
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz [_, _, i] | isQualName j -> i
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz | otherwise ->
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz error "Check by isQualName before calling getLibId!"
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz _ -> error "Check by isQualName before calling getLibId!"
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst SchulzgetNodeId :: Id -> Id
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst SchulzgetNodeId j@(Id _ cs _) = case cs of
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz [_, i, _] | isQualName j -> i
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz | otherwise ->
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz error "Check by isQualName before calling getNodeId!"
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz _ -> error "Check by isQualName before calling getNodeId!"
5dc46f6d0fdd8747d730f9e79a93978145ed43bbChristian MaederunQualName :: Id -> Id
5dc46f6d0fdd8747d730f9e79a93978145ed43bbChristian MaederunQualName j@(Id _ cs _) = case cs of
5dc46f6d0fdd8747d730f9e79a93978145ed43bbChristian Maeder i : _ | isQualName j -> i
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian MaederlibIdToId :: LIB_ID -> Id
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian MaederlibIdToId li = let
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder path = splitOn '/' $ show li
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder toTok s = Token s $ getRange li
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder in mkId $ map toTok $ intersperse "/" path
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederdata LIB_NAME = Lib_version
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder { getLIB_ID :: LIB_ID
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder , libVersion :: VERSION_NUMBER }
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder | Lib_id { getLIB_ID :: LIB_ID }
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederdata LIB_ID = Direct_link URL Range
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder -- pos: start of URL
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder | Indirect_link PATH Range FilePath ClockTime
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder -- pos: start of PATH
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedernoTime :: ClockTime
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedernoTime = TOD 0 0
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder-- | Returns the LIB_ID of a LIB_NAME
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedergetModTime :: LIB_ID -> ClockTime
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaedergetModTime li = case li of
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Direct_link _ _ -> noTime
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Indirect_link _ _ _ m -> m
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederupdFilePathOfLibId :: FilePath -> ClockTime -> LIB_ID -> LIB_ID
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian MaederupdFilePathOfLibId fp mt li = case li of
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Direct_link _ _ -> li
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Indirect_link p r _ _ -> Indirect_link p r fp mt
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederdata VERSION_NUMBER = Version_number [String] Range deriving (Show, Eq)
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder -- pos: "version", start of first string
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz-- | the identifier of a specification, combining the specid and the libid
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulzdata SPEC_ID = SPEC_ID { specid :: Id,
6df66a8a7be47ca0d9a4d15b89d3380c8e1f4aedEwaryst Schulz libid :: Maybe LIB_ID }
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maedertype URL = String
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maedertype PATH = String
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maederinstance GetRange LIB_ID where
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder getRange li = case li of
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder Direct_link _ r -> r
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder Indirect_link _ r _ _ -> r
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Show LIB_ID where
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder show li = case li of
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder Direct_link s _ -> s
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder Indirect_link s1 _ _ _ -> s1
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Show LIB_NAME where
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder show ln = case ln of
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder Lib_version li (Version_number vs _) ->
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder shows li $ " version " ++ intercalate "." vs
92dc581bf568c9e225aa9d0570ab0a4b6ebdab69Christian Maeder Lib_id li -> show li
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Eq LIB_ID where
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Direct_link s1 _ == Direct_link s2 _ = s1 == s2
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Indirect_link s1 _ _ _ == Indirect_link s2 _ _ _ = s1 == s2
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder _ == _ = False
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Ord LIB_ID where
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Direct_link s1 _ <= Direct_link s2 _ = s1 <= s2
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Indirect_link s1 _ _ _ <= Indirect_link s2 _ _ _ = s1 <= s2
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Direct_link _ _ <= _ = True
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Indirect_link _ _ _ _ <= _ = False
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Eq LIB_NAME where
248ab4f138caa9a594cd3fe0815e7fd4150701efChristian Maeder ln1 == ln2 = compare ln1 ln2 == EQ
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Ord LIB_NAME where
248ab4f138caa9a594cd3fe0815e7fd4150701efChristian Maeder compare ln1 ln2 = compare (getLIB_ID ln1) $ getLIB_ID ln2
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Pretty LIB_NAME where
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder pretty l = case l of
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Lib_version i v ->
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder fsep [pretty i, keyword versionS, pretty v]
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Lib_id i -> pretty i
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Pretty LIB_ID where
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder pretty l = structId $ case l of
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Direct_link u _ -> u
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder Indirect_link p _ _ _ -> p
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maederinstance Pretty VERSION_NUMBER where
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder pretty (Version_number aa _) =
697e63e30aa3c309a1ef1f9357745111f8dfc5a9Christian Maeder hcat $ punctuate dot $ map codeToken aa