-- | The logic to render MATLAB auxiliary files is contained in this module
module Language.Drasil.Code.Imperative.GOOL.LanguageRenderer.MatlabRenderer (
  MatlabProject(..)
) where

import Prelude hiding (break,print,(<>),sin,cos,tan,floor)

import Drasil.GProc (mlName, mlVersion)

import Language.Drasil.SoftwareDossier.SoftwareDossierSym (SoftwareDossierSym(..))
import Language.Drasil.Code.Imperative.README.Core (ReadMeInfo(..))
import qualified
  Language.Drasil.Code.Imperative.GOOL.LanguageRenderer.LanguagePolymorphic as
  G (readMe, makefile, noRunIfLib, docIfEnabled)
import Language.Drasil.Code.Imperative.Build.AST (Runnable, DocConfig(..), interpMM)

-- | Holds a MATLAB project
newtype MatlabProject a = MLP {forall a. MatlabProject a -> a
unMLP :: a}

instance Functor MatlabProject where
  fmap :: forall a b. (a -> b) -> MatlabProject a -> MatlabProject b
fmap a -> b
f (MLP a
x) = b -> MatlabProject b
forall a. a -> MatlabProject a
MLP (a -> b
f a
x)

instance Applicative MatlabProject where
  pure :: forall a. a -> MatlabProject a
pure = a -> MatlabProject a
forall a. a -> MatlabProject a
MLP
  (MLP a -> b
f) <*> :: forall a b.
MatlabProject (a -> b) -> MatlabProject a -> MatlabProject b
<*> (MLP a
x) = b -> MatlabProject b
forall a. a -> MatlabProject a
MLP (a -> b
f a
x)

instance Monad MatlabProject where
  MLP a
x >>= :: forall a b.
MatlabProject a -> (a -> MatlabProject b) -> MatlabProject b
>>= a -> MatlabProject b
f = a -> MatlabProject b
f a
x

instance SoftwareDossierSym MatlabProject where
  doxConfig :: String
-> SoftwareDossierState
-> Verbosity
-> Maybe (MatlabProject FileLayout)
doxConfig String
_ SoftwareDossierState
_ Verbosity
_ = Maybe (MatlabProject FileLayout)
forall a. Maybe a
Nothing
  readMe :: ReadMeInfo -> MatlabProject FileLayout
readMe ReadMeInfo
rmi = ReadMeInfo -> MatlabProject FileLayout
forall (r :: * -> *). Applicative r => ReadMeInfo -> r FileLayout
G.readMe ReadMeInfo
rmi {
        langName = mlName,
        langVersion = mlVersion}

  optimizeDox :: MatlabProject Doc
optimizeDox = String -> MatlabProject Doc
forall a. HasCallStack => String -> a
error String
doxError

  makefile :: [String]
-> ImplementationType
-> [Comments]
-> SoftwareDossierState
-> ProgData
-> MatlabProject FileLayout
makefile [String]
_ ImplementationType
it [Comments]
cms = Maybe BuildConfig
-> Maybe Runnable
-> Maybe DocConfig
-> SoftwareDossierState
-> ProgData
-> MatlabProject FileLayout
forall (r :: * -> *).
Applicative r =>
Maybe BuildConfig
-> Maybe Runnable
-> Maybe DocConfig
-> SoftwareDossierState
-> ProgData
-> r FileLayout
G.makefile Maybe BuildConfig
forall a. Maybe a
Nothing (ImplementationType -> Maybe Runnable -> Maybe Runnable
G.noRunIfLib ImplementationType
it Maybe Runnable
mlRunnable)
                            ([Comments] -> DocConfig -> Maybe DocConfig
G.docIfEnabled [Comments]
cms (Dependencies -> [Command] -> DocConfig
DocConfig [] []))

  unReprDoc :: MatlabProject Doc -> Doc
unReprDoc = MatlabProject Doc -> Doc
forall a. MatlabProject a -> a
unMLP

-- | Default runnable information for MATLAB files
mlRunnable :: Maybe Runnable
mlRunnable :: Maybe Runnable
mlRunnable = String -> Maybe Runnable
interpMM String
"octave"

doxError :: String
doxError :: String
doxError = String
mlName String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" is not compatible with Doxygen."