diagrams-builder-0.8.0.4: latex/diagrams-latex.sty
%% To use, simply create diagram environments with code, being sure to
%% declare something named 'dia' in each, which will be rendered. For example:
%%
%% \begin{diagram}[width=200]
%% import Data.List
%% dia = hcat . map circle . sort $ [4,8,9,2,3,6]
%% \end{diagram}
%% diagrams-latex.sty
%% Copyright (c) 2011-2012, Ryan Yates
%%
%% Large portions copied from dot2texi.sty
%%
%% Copyright (c) 2007-2008, Kjell Magne Fauske
%%
%% Author: Kjell Magne Fauske <km@fauskes.net>
%% http://www.fauskes.net
%%
%% Copyright (c) 2005, Lars Kotthoff <metalhead@metalhead.ws>
%%
%% Large portions copied from pdftex,
%% Copyright (c) 2001-3, Radhakrishnan CV <cvr@river-valley.com>
%% Rajagopal CV <cvr3@river-valley.com>
%% http://www.river-valley.com
%%
%% River Valley Technologies, Floor III, SJP Buildings, Cotton Hills
%% Trivandrum, India 695014
%%
%% Tel: +91 471 233 7501
%%
%% Antoine Chambert-Loir
%% <chambert@math.polytechnique.fr>
%% http://www.math.polytechnique.fr/\protect \unhbox \voidb@x \penalty \@M \ {}chambert
%%
%% Ecole polytechnique, Palaiseau Cedex, France
%%
%% This program is free software; you can redistribute it and/or
%% modify it under the terms of the GNU General Public License
%% as published by the Free Software Foundation; either version 2
%% of the License, or (at your option) any later version.
%%
%% This program is distributed in the hope that it will be useful,
%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%% GNU General Public License for more details.
%%
%% You should have received a copy of the GNU General Public License
%% along with this program (gpl.txt); if not, write to the Free
%% Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
%% MA 02111-1307, USA.
%%
%% Copyright (C) 2007 by Will Robertson & Johannes Große
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{diagrams-latex}[2012/04/07 v0.1 Generate diagrams embedded within LaTeX]
\RequirePackage{moreverb}
\RequirePackage{xkeyval}[2005/02/22]
\RequirePackage{ifthen}
\RequirePackage{graphics}
\newif\ifdtt@ShellEscape
%\newif\ifmiktex \miktexfalse
\newif\ifdtt@ForceShellEscape \dtt@ForceShellEscapefalse
\newif\ifdtt@debug \dtt@debugfalse
\newif\ifdtt@autosize \dtt@autosizefalse
% Options related to shell escape
\DeclareOptionX{shell}{\dtt@ShellEscapetrue}
\DeclareOptionX{noshell}{\dtt@ShellEscapefalse}
\DeclareOptionX{forceshell}{\dtt@ForceShellEscapetrue\dtt@ShellEscapetrue}
\DeclareOptionX{miktex}{} % dummy (for backwards compatability)
% Options for setting output size
\DeclareOptionX{width}[]{\Gin@defaultbp\foo{#1}\def\dtt@width{-w \foo}}
\def\dtt@width{} % default output width
\DeclareOptionX{height}[]{\Gin@defaultbp\foo{#1}\def\dtt@height{-h \foo}}
\def\dtt@height{} % default output height
% Option for setting an output directory
\DeclareOptionX{outputdir}[]{\def\dtt@outputdir{#1}}
\def\dtt@outputdir{diagrams}
\DeclareOptionX{debug}{\dtt@debugtrue}
\newcommand\setoutputdir[1]{\def\dtt@outputdir{#1}}
% Options for setting backend
\DeclareOptionX{backend}[]{\def\dtt@backend{#1}}
\def\dtt@backend{cairo} % use cairo as the default backend
\DeclareOptionX{extension}[]{\def\dtt@extension{#1}}
\newif\ifdtt@input \dtt@inputfalse
\DeclareOptionX{input}{\dtt@inputtrue}
\DeclareOptionX{noinput}{\dtt@inputfalse}
\DeclareOptionX{cmdprefix}[]{\def\dtt@cmdprefix{#1 }}
\def\dtt@cmdprefix{} % default command prefix
\newif\ifdtt@beamer \dtt@beamerfalse
\DeclareOptionX{beamer}{\dtt@beamertrue}
\DeclareOptionX{nobeamer}{\dtt@beamerfalse}
\ExecuteOptionsX{shell}
\ProcessOptionsX\relax
%% Handle option defaults for backends
\ifthenelse{\equal{\dtt@backend}{cairo} \and \isundefined{\dtt@extension}}
{\def\dtt@extension{pdf}}{}
\ifthenelse{\equal{\dtt@backend}{pgf} \and \isundefined{\dtt@extension}}
{\def\dtt@extension{pgf}}{}
\ifthenelse{\equal{\dtt@backend}{ps} \and \isundefined{\dtt@extension}}
{\def\dtt@extension{eps}}{}
\ifthenelse{\equal{\dtt@backend}{pgf}}{\dtt@inputtrue}{}
%% The platform detection code is copied from the ifplatform package
%% avaialable from: http://tug.ctan.org/tex-archive/macros/latex/contrib/ifplatform/
%% Copyright (C) 2007 by Will Robertson & Johannes Große
\newif\ifdtt@ShellEscapeEnabled
\newif\ifwindows
\edef\ip@file{\jobname.w18}
\edef\ip@sig{write18-test-\the\year\the\month\the\day\the\time}
\edef\ip@win{'\ip@sig'}
\def\ip@read@file{%
\newread\instream
\openin\instream=\ip@file
\@tempcnta=\endlinechar
\endlinechar=-1
\read\instream to\@tempa
\endlinechar=\@tempcnta
\closein\instream}
\immediate\write18{echo \ip@win >"\ip@file"}
\IfFileExists{\ip@file}{\dtt@ShellEscapeEnabledtrue}{\dtt@ShellEscapeEnabledfalse}
\ifdtt@ShellEscapeEnabled
\ip@read@file
\ifx\@tempa\ip@sig
\windowsfalse
\else
\ifx\@tempa\ip@win
\windowstrue
\fi
\fi
\immediate\write18{\ifwindows del \else rm -- \fi "\ip@file"}
\fi
\ifdtt@ForceShellEscape
\PackageInfo{diagrams-latex}
{ForceShellEscape enabled}
\fi
\ifdtt@ShellEscapeEnabled
\PackageInfo{diagrams-latex}
{XXX}
\else
\PackageWarningNoLine{diagrams-latex}
{Shell escape not enabled.\MessageBreak
You'll need to compile the diagrams yourself.}
\fi
\newcounter{dtt@fignum}
\def\dtt@figname{\dtt@outputdir/\jobname-diagrams-latex-fig\thedtt@fignum}
%%%%%%%%%%%%%%%%% diagrams-latex code
% Most of the code is from dot2texi.sty
% Options
\define@key{dtt}{width}[]{%
\Gin@defaultbp\foo{#1}
\def\dtt@width{-w \foo}
}
\define@key{dtt}{height}[]{%
\Gin@defaultbp\foo{#1}
\def\dtt@height{-h \foo}
}
\define@key{dtt}{outputdir}[]{%
\def\dtt@outputdir{#1}
}
\define@key{dtt}{file}[]{%
\def\dtt@figname{\dtt@outputdir/#1}
}
\define@key{dtt}{backend}[]{%
\def\dtt@backend{#1}
}
\define@key{dtt}{extension}[]{%
\def\dtt@extension{#1}
}
\define@key{dtt}{shell}[]{\dtt@ShellEscapetrue}
\define@key{dtt}{noshell}[]{\dtt@ShellEscapefalse}
\newif\ifdtt@writetofile \dtt@writetofiletrue
\newwrite\verbatim@out
\def\diagramslatexverbatimwrite#1{%
\def\BeforeStream{
\message{Opening diagrams-latex stream #1
}%
}%
\@bsphack
\immediate\openout \verbatim@out #1
\BeforeStream%
\let\do\@makeother\dospecials
\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\verbatim@out
{\the\verbatim@line}}%
\verbatim@start%
}
\def\enddiagramslatexverbatimwrite{%
\immediate\closeout\verbatim@out
\@esphack
\catcode`\\0
\catcode`\{1
\catcode`\}2
\catcode`\$3
\catcode`\&4
\catcode`\^^M5
\catcode`\#6
\catcode`\^7
\catcode`\_8
\catcode`\~9% Added this one
\catcode`\ 10
\catcode`\%14}
\newenvironment{diagram}[1][]{\stepcounter{dtt@fignum}%
\setkeys{dtt}{#1}
\ifdtt@ForceShellEscape
\dtt@ShellEscapetrue
\fi
\ifwindows
\immediate\write18{if not exist \dtt@outputdir\space mkdir \dtt@outputdir}
\else
\immediate\write18{mkdir -p \dtt@outputdir}
\fi
\xdef\diagramslatexCutFile{\dtt@figname.hs}
\diagramslatexverbatimwrite{\diagramslatexCutFile}
}
{\ifdtt@beamer\ifdefined\beamer@slideinframe
\immediate\write\verbatim@out{overlay = \number\beamer@slideinframe\space :: Int}
\fi\fi
\enddiagramslatexverbatimwrite%
\diagramslatexgraphicsinclude}
\long\gdef\diagramslatexgraphicsprocess{%
\ifdtt@ShellEscape
\IfFileExists{\dtt@figname.hs}{%
\immediate\write18{\dtt@cmdprefix diagrams-builder-\dtt@backend\space -o \dtt@figname.\dtt@extension\space
\dtt@width\space
\dtt@height\space
\dtt@figname.hs\space }%
\IfFileExists{\dtt@figname.\dtt@extension}{%
\PackageInfo{diagrams-latex}{\dtt@figname.hs converted}
}
{\PackageWarningNoLine{diagrams-latex}
{Conversion of \dtt@figname.hs failed}}}{}
\fi
}
\long\gdef\diagramslatexgraphicsinclude{\diagramslatexgraphicsprocess%
\IfFileExists{\dtt@figname.\dtt@extension}{
\ifdtt@input
{\input{\dtt@figname.\dtt@extension}}
\else
{\includegraphics{\dtt@figname.\dtt@extension}}
\fi
}
{\PackageWarningNoLine{diagrams-latex}
{Please convert \dtt@figname.hs manually}}
}
\endinput