Logic_FreeCAD.hs revision e9458b1a7a19a63aa4c179f9ab20f4d50681c168
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, DeriveDataTypeable
, GeneralizedNewtypeDeriving, TypeSynonymInstances #-}
{- |
Module : ./FreeCAD/Logic_FreeCAD.hs
Description : Instance of class Logic for FreeCAD
Copyright : (c) Christian Maeder DFKI, Uni Bremen 2009
License : GPLv2 or higher, see LICENSE.txt
Maintainer : Christian.Maeder@dfki.de
Stability : provisional
Portability : non-portable (imports Logic.Logic)
instance of class Logic for FreeCAD
-}
module FreeCAD.Logic_FreeCAD where
import Logic.Logic
import Common.DefaultMorphism
import Common.Doc
import Common.DocUtils
import Common.ExtSign
import Common.Id
import Common.IRI (simpleIdToIRI)
import Common.LibName
import Common.AS_Annotation
import Common.GlobalAnnotations
import Common.Result
import ATerm.Lib
import qualified Data.Map as Map
import qualified Data.Set as Set
import Data.Typeable
import FreeCAD.As
import FreeCAD.ATC_FreeCAD ()
import FreeCAD.PrintAs ()
import FreeCAD.Translator (processFile)
import Logic.Grothendieck (G_basic_spec (..))
import Syntax.AS_Library (fromBasicSpec, LIB_DEFN)
data FreeCAD = FreeCAD deriving Show
instance Language FreeCAD where
description _ = "FreeCAD object representation language"
instance Pretty Text where
pretty (Text s) = text s
newtype Text = Text { fromText :: String }
deriving (Show, Eq, Ord, GetRange, Typeable, ShATermConvertible)
type FCMorphism = DefaultMorphism Sign
-- use generic Category instance from Logic.Logic
instance Syntax FreeCAD Document () () () where
parse_basic_spec FreeCAD = Nothing
instance Sentences FreeCAD () Sign FCMorphism () where
map_sen FreeCAD _ = return
sym_of FreeCAD _ = [Set.singleton ()]
symmap_of FreeCAD _ = Map.empty
sym_name FreeCAD _ = genName "FreeCAD"
instance StaticAnalysis FreeCAD Document () () () Sign FCMorphism () ()
where
basic_analysis FreeCAD = Just basicFCAnalysis
empty_signature FreeCAD = Sign { objects = Set.empty }
is_subsig FreeCAD s1 s2 = Set.isSubsetOf (objects s1) $ objects s2
instance Logic FreeCAD
() -- Sublogics
Document -- basic_spec
() -- no sentences
() -- no symb_items
() -- no symb_map_items
Sign -- sign
(DefaultMorphism Sign) -- morphism
() -- no symbol
() -- no raw_symbol
() -- no proof_tree
where
stability FreeCAD = Experimental
readFreeCADLib :: FilePath -> LibName -> IO LIB_DEFN
readFreeCADLib fp ln = do
bs <- processFile fp
let sn = simpleIdToIRI $ mkSimpleId "FreeCAD-Design"
return $ fromBasicSpec ln sn $ G_basic_spec FreeCAD bs
basicFCAnalysis :: (Document, Sign, GlobalAnnos)
-> Result (Document, ExtSign Sign (), [Named ()])
basicFCAnalysis (bs, _, _) = return (bs, mkExtSign $ bsToSign bs, [])
bsToSign :: Document -> Sign
bsToSign doc = Sign $ Set.fromList doc