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 Asymptote plots code blocks
  module Text.Pandoc.Filter.Plot.Renderers.Asymptote
    ( asymptote,
      asymptoteSupportedSaveFormats,
    )
  where
  
  import Text.Pandoc.Filter.Plot.Renderers.Prelude
  import Data.Char(toLower)
  
  asymptote :: PlotM Renderer
  asymptote = do
    cmdargs <- asksConfig asyCmdArgs
    return
      $ Renderer
        { rendererToolkit = Asymptote,
          rendererCapture = asymptoteCapture,
          rendererCommand = asymptoteCommand cmdargs,
          rendererAvailability = CommandSuccess $ \exe -> [st|#{pathToExe exe} -environment|],
          rendererSupportedSaveFormats = asymptoteSupportedSaveFormats,
          rendererChecks = mempty,
          rendererLanguage = "asy",
          rendererComment = mappend "// ",
          rendererScriptExtension = ".asy"
        }
  
  asymptoteSupportedSaveFormats :: [SaveFormat]
  asymptoteSupportedSaveFormats = [PDF, EPS, PNG]
  
  asymptoteCommand :: Text -> OutputSpec -> Text
  asymptoteCommand cmdArgs OutputSpec {..} =
    [st|#{pathToExe oExecutable} #{cmdArgs} -f #{toLower <$> show (saveFormat oFigureSpec)} -o "#{oFigurePath}" "#{oScriptPath}"|]
  
  -- Asymptote export is entirely based on command-line arguments
  -- so there is no need to modify the script itself.
  asymptoteCapture :: FigureSpec -> FilePath -> Script
  asymptoteCapture FigureSpec {..} _ = script
  