%%
%% This is file `auto-pst-pdf-lua.sty', a modified version of
%% auto-pst-pdf from Will Robertson
%%
%%   Copyright (C) 2023  Herbert Voss
%% 
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%    http://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%% 
%%
\ProvidesPackage{auto-pst-pdf-lua}[2023/03/21 v0.03a using auto-pst-pdf for LuaLaTeX]
\RequirePackage{ifpdf,xkeyval,ifplatform,ifluatex}
\newif\if@app@off@
\newif\if@app@crop@
\newcounter{app@runs}
\def\app@suffix{autopp}
\edef\app@jobname{\jobname-\app@suffix}
\edef\app@pics{\jobname-pics.pdf}
\DeclareOptionX{off}[]{\@app@off@true}
\define@choicekey{auto-pst-pdf-lua.sty}{crop}[\@tempa\@tempb]{on,off}{%
  \ifcase\@tempb\relax
    \@app@crop@true
  \or
    \@app@crop@false
  \fi}
\DeclareOptionX{on}[]{\@app@off@false}
\DeclareOptionX{ext}{\def\app@ext{#1}}
\DeclareOptionX{latex}{%
  \def\app@latex@opts{%
    \ifwindows
      -disable-write18
    \else
      -no-shell-escape
    \fi
    -jobname="\app@jobname"
    -interaction=batchmode
    #1}}
\DeclareOptionX{dvips}{\def\app@dvips@opts{#1}}
\DeclareOptionX{pspdf}{\def\app@pspdf@opts{#1}}
\DeclareOptionX{pdfcrop}{\def\app@pdfcrop@opts{#1}}

\DeclareOptionX{cleanup}{%
  \let\app@rm@files\@empty
  \@for\@ii:=#1\do{%
    \edef\app@rm@files{\app@rm@files,\app@jobname.\@ii}}}

\DeclareOptionX{runs}{%
  \setcounter{app@runs}{#1}% support calc
  \ifnum\c@app@runs > \z@
  \else
    \app@PackageWarning{The number of runs must be at least one.}%
    \c@app@runs\@ne
  \fi}

\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{auto-pst-pdf}}

\ExecuteOptionsX{%
    ext=tex,
    crop=on,
    latex={},
    dvips={-Ppdf},
    pdfcrop={},
    cleanup={log,aux,dvi,ps,pdf},
    runs=1,
}
\ifluatex\else
  \PackageWarning{auto-pst-pdf-lua}%
  {^^J    No LuaTeX running!
   ^^J    Package auto-pst-pdf-lua falls back to auto-pst-pdf!}%
\fi
\ifwindows
  \ExecuteOptionsX{pspdf={}}
\else
  \ExecuteOptionsX{pspdf={-dAutoRotatePages=/None}}
\fi
\ProcessOptionsX
\def\app@exe{\immediate\write18}
\def\app@nl{^^J\space\space\space\space}
\newcommand\app@PackageError[2]{%
  \PackageError{auto-pst-pdf-lua}{\app@nl #1^^J}{#2}}
\newcommand\app@PackageWarning[1]{%
  \PackageWarning{auto-pst-pdf-lua}{\app@nl #1^^JThis warning occured}}
\newcommand\app@PackageInfo[1]{\PackageInfo{auto-pst-pdf-lua}{#1}}
\newcommand\OnlyIfFileExists[2]{\IfFileExists{#1}{#2}{}}
\newcommand\NotIfFileExists[2]{\IfFileExists{#1}{}{#2}}
\def\app@convert#1#2#3{%
  \OnlyIfFileExists{#2}{%
    \app@exe{\csname app@cmd@#1\endcsname{#2}{#3}}%
    \NotIfFileExists{#3}{\app@PackageWarning{Creation of #3 failed.}}}}
\def\app@compile{%
  \app@cleanup
  \app@remove@container
  \loop\ifnum\c@app@runs > \@ne
     \app@convert{extralatex}{\jobname.\app@ext}{\app@jobname.dvi}%
     \advance\c@app@runs\m@ne
  \repeat
  \app@convert{latex}{\jobname.\app@ext}{\app@jobname.dvi}%
  \app@convert{dvips}{\app@jobname.dvi}{\app@jobname.ps}%
  \if@app@crop@
    \app@convert{pstopdf}{\app@jobname.ps}{\app@jobname.pdf}%
    \app@convert{pdfcrop}{\app@jobname.pdf}{\app@pics}%
  \else
    \app@convert{pstopdf}{\app@jobname.ps}{\app@pics}%
  \fi
  \IfFileExists{\app@pics}
    {\app@cleanup}
    {\app@PackageWarning{Could not create \app@pics.
      Auxiliary files not deleted.}}}
\edef\app@rm{\ifwindows del \else rm -- \fi}
\newcommand\app@try@rm[1]{%
  \@for\@tempa:=#1\do{%
    \OnlyIfFileExists{\@tempa}{\app@exe{\app@rm "\@tempa"}}}}
\def\app@remove@container{\app@try@rm{\app@pics}}
\def\app@cleanup{\app@try@rm{\app@rm@files}}
\ifluatex
  \def\app@cmd@latex#1#2{dvilualatex \app@latex@opts\space
    "\unexpanded{\let\APPmakepictures\empty \input} #1"}
  \def\app@cmd@extralatex#1#2{dvilualatex \app@latex@opts\space
    "\unexpanded{\let\APPmakepictures\undefined \input} #1"}
\else
  \def\app@cmd@latex#1#2{latex \app@latex@opts\space
    "\unexpanded{\let\APPmakepictures\empty\input} #1"}
  \def\app@cmd@extralatex#1#2{latex \app@latex@opts\space
    "\unexpanded{\let\APPmakepictures\undefined\input} #1"}
\fi
\def\app@cmd@dvips#1#2{dvips \app@dvips@opts\space -o "#2" "#1"}
\def\app@cmd@pstopdf#1#2{ps2pdf \app@pspdf@opts\space "#1" "#2"}
\def\app@cmd@pdfcrop#1#2{pdfcrop \app@pdfcrop@opts\space "#1" "#2"}
\ifpdf
  \if@app@off@\else
    \ifshellescape
      \app@exe{echo "  "}
      \app@exe{echo "-------------------------------------------------"}
      \app@exe{echo "auto-pst-pdf-lua: Auxiliary LaTeX compilation"}
      \app@exe{echo "-------------------------------------------------"}
      \app@compile
      \app@exe{echo "-------------------------------------------------"}
      \app@exe{echo "auto-pst-pdf-lua: End auxiliary LaTeX compilation"}
      \app@exe{echo "-------------------------------------------------"}
    \else
      \app@PackageError{%
        "shell escape" (or "write18") is not enabled:\app@nl
        auto-pst-pdf-lua will not work!}
       {You need to run LaTeX with the equivalent of
        "lualatex -shell-escape"\app@nl
        Or turn off auto-pst-pdf-lua.}%
    \fi
  \fi
  \if@app@crop@
    \PassOptionsToPackage{notightpage}{pst-pdf}
  \fi
\else
  \ifx\APPmakepictures\@undefined
    \PassOptionsToPackage{inactive}{pst-pdf}
  \else
    \if@app@crop@
      \PassOptionsToPackage{notightpage}{pst-pdf}
    \fi
  \fi
\fi
\RequirePackage{pst-pdf}
\let\app@ig\includegraphics
\newcommand\matlabfig[2][]{%
  \begin{postscript}
    \renewcommand\resizebox[3]{##3}%
    \renewcommand\includegraphics[2][]{\app@ig[#1]{##2}}%
    \input{#2}%
  \end{postscript}}
\newcommand\mathfig[2][]{%
  \begin{postscript}
    \input{#2-psfrag}%
    \includegraphics[#1]{#2-psfrag}%
  \end{postscript}}
\newcommand\psfragfig[2][]{%
  \@ifnextchar[
    {\app@psfragfig[#1]{#2}}
    {\app@psfragfig[#1]{#2}[]}}
\def\app@psfragfig[#1]#2[#3]{%
  \begin{postscript}
    \InputIfFileExists{#2-psfrag}{}{}%
    #3
    \includegraphics[#1]{#2}%
  \end{postscript}}
\InputIfFileExists{\jobname-psfrag}{}{}
