ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari{- |
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerModule : ./CSMOF/Print.hs
ab8506c5100f101785452b5047259ec4f17ef436Daniel CalegariDescription : pretty printing for CSMOF
ab8506c5100f101785452b5047259ec4f17ef436Daniel CalegariCopyright : (c) Daniel Calegari Universidad de la Republica, Uruguay 2013
ab8506c5100f101785452b5047259ec4f17ef436Daniel CalegariLicense : GPLv2 or higher, see LICENSE.txt
ab8506c5100f101785452b5047259ec4f17ef436Daniel CalegariMaintainer : dcalegar@fing.edu.uy
ab8506c5100f101785452b5047259ec4f17ef436Daniel CalegariStability : provisional
ab8506c5100f101785452b5047259ec4f17ef436Daniel CalegariPortability : portable
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari-}
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegarimodule CSMOF.Print where
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariimport CSMOF.As
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariimport Common.Doc
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariimport Common.DocUtils
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty Metamodel where
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder pretty (Metamodel nam ele mode) =
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder text "metamodel" <+> text nam <+> lbrace
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder $++$ space <+> space <+> foldr (($++$) . pretty) empty ele
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder $+$ rbrace
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari $++$ foldr (($+$) . pretty) empty mode
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show Metamodel where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty NamedElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (NamedElement _ _ nes) = pretty nes
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show NamedElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty TypeOrTypedElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (TType typ) = pretty typ
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (TTypedElement _) = empty -- Do not show properties at top level but inside classes
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show TypeOrTypedElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty Type where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (Type _ sub) = pretty sub
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show Type where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty DataTypeOrClass where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (DDataType dat) = pretty dat
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (DClass cla) = pretty cla
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show DataTypeOrClass where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
1a38107941725211e7c3f051f7a8f5e12199f03acmaederinstance Pretty Datatype where
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder pretty (Datatype sup) =
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder text "datatype" <+> text (namedElementName (typeSuper sup))
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
1a38107941725211e7c3f051f7a8f5e12199f03acmaederinstance Show Datatype where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty Class where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (Class sup isa supC own) =
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder text (if isa then "abstract class" else "class")
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <+> text (namedElementName (typeSuper sup))
d658c27a8e2e75f11e83548631f759ced4ab7e74Daniel Calegari <+> (case supC of
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari [] -> lbrace
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari _ : _ -> text "extends"
d658c27a8e2e75f11e83548631f759ced4ab7e74Daniel Calegari <+> foldr ( (<+>) . text . namedElementName . typeSuper . classSuperType) empty supC
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <+> lbrace)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder $+$ space <+> space <+> foldr (($+$) . pretty) empty own
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari $+$ rbrace
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show Class where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty TypedElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (TypedElement _ _ sub) = pretty sub
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show TypedElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroederinstance Pretty Property where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (Property sup mul opp _) =
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari text "property" <+> text (namedElementName (typedElementSuper sup))
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <> pretty mul
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <+> colon <+> text (namedElementName (typeSuper (typedElementType sup)))
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <+> (case opp of
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari Just n -> text "oppositeOf" <+> text (namedElementName (typedElementSuper (propertySuper n)))
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari Nothing -> empty)
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Show Property where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty MultiplicityElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (MultiplicityElement low upp _) =
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder lbrack <> pretty low <> comma
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder <> (if upp == -1
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari then text "*"
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari else pretty upp)
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <> rbrack
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show MultiplicityElement where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari-- Model part of CSMOF
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegari
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty Model where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (Model mon obj lin mode) =
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder text "model" <+> text mon
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <+> text "conformsTo" <+> text (metamodelName mode) <+> lbrace
06d2fb58d16cd67fae8c7fe40818ae7f93449929Daniel Calegari $++$ space <+> space <+> foldr (($+$) . pretty) empty obj
06d2fb58d16cd67fae8c7fe40818ae7f93449929Daniel Calegari $++$ space <+> space <+> foldr (($+$) . pretty) empty lin
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari $+$ rbrace
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show Model where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty Object where
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder pretty (Object on ot _) =
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari text "object " <> text on
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <+> colon <+> text (namedElementName (typeSuper ot))
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show Object where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegariinstance Pretty Link where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari pretty (Link lt sou tar _) =
d658c27a8e2e75f11e83548631f759ced4ab7e74Daniel Calegari text "link" <+> text (namedElementName (typedElementSuper (propertySuper lt)))
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari <> lparen <> text (objectName sou) <> comma <> text (objectName tar) <> rparen $+$ empty
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari
ab8506c5100f101785452b5047259ec4f17ef436Daniel Calegariinstance Show Link where
acc049a844d19fb294ce7f68742390dee87447dcDaniel Calegari show m = show $ pretty m