%% $Id: luatexkomplib.tex,v 1.3 2011/07/04 15:26:25 nomos Exp $
%%
%% written by Dohyun Kim <nomos at ktug dot kr>
%% modified from luamplib.sty
%% public domain

\bgroup\expandafter\expandafter\expandafter\egroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
  \input luatexbase-modutils.sty
\else
  \RequirePackage{luatexbase-modutils}
\fi
%%%%%%%%%%
\RequireLuaModule{luatexkomplib}
%%%%%%%%%%
\def\mplibsetformat#1{%
  \directlua{luatexkomplib.setformat("\luatexluaescapestring{#1}")}}
\ifnum\pdfoutput>0
    \let\mplibtoPDF\pdfliteral
\else
    %\def\MPLIBtoPDF#1{\special{pdf:literal direct #1}} % not ok yet
    \def\mplibtoPDF#1{}
    \expandafter\ifx\csname PackageWarning\endcsname\relax
      \write16{}
      \write16{Warning: MPLib only works in PDF mode, no figure will be output.}
      \write16{}
    \else
      \PackageWarning{mplib}{MPLib only works in PDF mode, no figure will be output.}
    \fi
\fi

%%%%%%%%%%
\def\mplibsetupcatcodes{% exclude comment sign
  \catcode`\{=12 \catcode`\}=12 \catcode`\#=12 \catcode`\^=12 \catcode`\~=12
  \catcode`\_=12 \catcode`\&=12 \catcode`\$=12 }
\def\mplibputtextbox#1{\vbox to 0pt{\vss\hbox to 0pt{\raise\dp#1\box#1\hss}}}
%%%%%%%%%%

\bgroup\expandafter\expandafter\expandafter\egroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
\def\mplibcode{%
  \bgroup %
  \mplibsetupcatcodes %
  \mplibdocode %
}
%%%%%%%%%%
\long\def\mplibdocode#1\endmplibcode{\egroup
\directlua{ luatexkomplib.luakosetboxes([===[\unexpanded{#1}]===]) }%
\directlua{ local data = luatexkomplib.luakogetboxes([===[\unexpanded{#1}]===])
  luatexkomplib.process(data) }}
%%%%%%%%%%
\else
%%%%%%%%%%
\newenvironment{mplibcode}{\toks@{}\ltxdomplibcode}{}
\def\ltxdomplibcode{\bgroup\mplibsetupcatcodes\ltxdomplibcodeX}
\long\def\ltxdomplibcodeX#1\end{\egroup
  \toks@\expandafter{\the\toks@#1}\ltxdomplibcodeXX}
\def\ltxdomplibcodeXX#1{%
  \ifnum\pdfstrcmp{#1}{mplibcode}=\z@
    \directlua{luatexkomplib.luakosetboxes([===[\the\toks@]===])}%
    \directlua{local data = luatexkomplib.luakogetboxes([===[\the\toks@]===])
      luatexkomplib.process(data)}\end{mplibcode}%
  \else
    \toks@\expandafter{\the\toks@\end{#1}}\expandafter\ltxdomplibcode
  \fi}
%%%%%%%%%%
\fi
\ifx\mplibscratchbox\undefined \newbox\mplibscratchbox \fi
\def\mplibstarttoPDF#1#2#3#4{
  \hbox\bgroup
  \xdef\MPllx{#1}\xdef\MPlly{#2}%
  \xdef\MPurx{#3}\xdef\MPury{#4}%
  \xdef\MPwidth{\the\dimexpr#3bp-#1bp\relax}%
  \xdef\MPheight{\the\dimexpr#4bp-#2bp\relax}%
  \parskip0pt%
  \leftskip0pt%
  \parindent0pt%
  \everypar{}%
  \setbox\mplibscratchbox\vbox\bgroup
  \noindent
}
\def\mplibstoptoPDF{%
  \egroup %
  \setbox\mplibscratchbox\hbox %
    {\hskip-\MPllx bp%
     \raise-\MPlly bp%
     \box\mplibscratchbox}%
  \setbox\mplibscratchbox\vbox to \MPheight
    {\vfill
     \hsize\MPwidth
     \wd\mplibscratchbox0pt%
     \ht\mplibscratchbox0pt%
     \dp\mplibscratchbox0pt%
     \box\mplibscratchbox}%
  \wd\mplibscratchbox\MPwidth
  \ht\mplibscratchbox\MPheight
  \box\mplibscratchbox
  \egroup
}
\def\mplibtextext#1#2#3#4#5{%
  \begingroup
  \setbox\mplibscratchbox\hbox
    {\font\temp=#1 at #2bp%
     \temp
     #3}%
  \setbox\mplibscratchbox\hbox
    {\hskip#4 bp%
     \raise#5 bp%
     \box\mplibscratchbox}%
  \wd\mplibscratchbox0pt%
  \ht\mplibscratchbox0pt%
  \dp\mplibscratchbox0pt%
  \box\mplibscratchbox
  \endgroup
}
\endinput
