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 Matlab code blocks
  module Text.Pandoc.Filter.Plot.Renderers.Matlab
    ( matlab,
      matlabSupportedSaveFormats,
    )
  where
  
  import Text.Pandoc.Filter.Plot.Renderers.Prelude
  
  matlab :: PlotM Renderer
  matlab = do
    cmdargs <- asksConfig matlabCmdArgs
    return
      $ Renderer
        { rendererToolkit = Matlab,
          rendererCapture = matlabCapture,
          rendererCommand = matlabCommand cmdargs,
          -- On Windows at least, "matlab -help"  actually returns -1, even though the
          -- help text is shown successfully!
          -- Therefore, we cannot rely on this behavior to know if matlab is present,
          -- like other toolkits.
          rendererAvailability = ExecutableExists,
          rendererSupportedSaveFormats = matlabSupportedSaveFormats,
          rendererChecks = mempty,
          rendererLanguage = "matlab",
          rendererComment = mappend "% ",
          rendererScriptExtension = ".m"
        }
  
  matlabSupportedSaveFormats :: [SaveFormat]
  matlabSupportedSaveFormats = [PNG, PDF, SVG, JPG, EPS, GIF, TIF]
  
  matlabCommand :: Text -> OutputSpec -> Text
  matlabCommand cmdargs OutputSpec {..} =
    -- The MATLAB 'run' function will switch to the directory where the script
    -- is located before executing the script. Therefore, we first save the current
    -- working directory in the variable 'pandoc_plot_cwd' so that we can use it
    -- when exporting the figure
    [st|#{pathToExe oExecutable} #{cmdargs} -sd '#{oCWD}' -noFigureWindows -batch "pandoc_plot_cwd=pwd; run('#{oScriptPath}')"|]
  
  matlabCapture :: FigureSpec -> FilePath -> Script
  matlabCapture = appendCapture matlabCaptureFragment
  
  matlabCaptureFragment :: FigureSpec -> FilePath -> Script
  matlabCaptureFragment FigureSpec {..} fname =
    [st|
  if java.io.File('#{fname}').isAbsolute() > 0
    exportpath = '#{fname}';
  else
    exportpath = fullfile(pandoc_plot_cwd, '#{fname}');
  end
  
  if exist("exportgraphics")>0
      exportgraphics(gcf, exportpath, 'Resolution', #{dpi});
  else
      saveas(gcf, exportpath);
  end
  |]
  