content: {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE QuasiQuotes #-}
  {-# LANGUAGE RecordWildCards #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  
  -- |
  -- Module      : $header$
  -- Copyright   : (c) Laurent P René de Cotret, 2019 - present
  -- License     : GNU GPL, version 2 or above
  -- Maintainer  : laurent.decotret@outlook.com
  -- Stability   : internal
  -- Portability : portable
  --
  -- Rendering Mathematica plots code blocks
  module Text.Pandoc.Filter.Plot.Renderers.Mathematica
    ( mathematica,
      mathematicaSupportedSaveFormats,
    )
  where
  
  import Text.Pandoc.Filter.Plot.Renderers.Prelude
  
  mathematica :: PlotM Renderer
  mathematica = do
    cmdargs <- asksConfig mathematicaCmdArgs
    return
      $ Renderer
        { rendererToolkit = Mathematica,
          rendererCapture = mathematicaCapture,
          rendererCommand = mathematicaCommand cmdargs,
          rendererAvailability = CommandSuccess $ \exe -> [st|#{pathToExe exe} -h|],
          -- TODO: test this
          rendererSupportedSaveFormats = mathematicaSupportedSaveFormats,
          rendererChecks = mempty,
          rendererLanguage = "mathematica",
          rendererComment = \t -> mconcat ["(*", t, "*)"],
          rendererScriptExtension = ".m"
        }
  
  mathematicaSupportedSaveFormats :: [SaveFormat]
  mathematicaSupportedSaveFormats = [PNG, PDF, SVG, JPG, EPS, GIF, TIF]
  
  mathematicaCommand :: Text -> OutputSpec -> Text
  mathematicaCommand cmdargs OutputSpec {..} = [st|#{pathToExe oExecutable} #{cmdargs} -script "#{oScriptPath}"|]
  
  mathematicaCapture :: FigureSpec -> FilePath -> Script
  mathematicaCapture = appendCapture mathematicaCaptureFragment
  
  mathematicaCaptureFragment :: FigureSpec -> FilePath -> Script
  mathematicaCaptureFragment FigureSpec {..} fname =
    [st|
  Export["#{fname}", %, #{show saveFormat}, ImageResolution -> #{dpi}]
  |]
  