%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
%
% Copyright 2010 by Jakob Voss
% 
% This file is based on works by Till Tantau. It contains additions and/or
% modifications by Jakob Voss and Rouben Rostamian. It may be distributed
% and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Free Documentation License.
%
% See the file LICENSE for more details.

%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pgfmanualstyle}[2010/01/24 v0.1 pgfmanualstyle]
\RequirePackage{tikz}[2009/09/04]

%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
% code from pgfmanual-en-macros.tex
%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8}
\definecolor{codebackground}{rgb}{0.8,0.8,1}

\makeatletter

\begingroup
\catcode`|=0
\catcode`[= 1
\catcode`]=2
\catcode`\{=12
\catcode `\}=12
\catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]]
|endgroup
% 
\begingroup
\catcode`\^=7
\catcode`\^^M=13
\catcode`\ =13%
\gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^M=13\def^^M{}}%
\endgroup
% 
\begingroup
\catcode`\%=13
\catcode`\^^M=13
\gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}}
\gdef\@gobble@till@return#1^^M{}
\gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}}
\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par}
\endgroup
% 
\define@key{codeexample}{width}{\setlength\codeexamplewidth{#1}}
\define@key{codeexample}{graphic}{\colorlet{graphicbackground}{#1}}
\define@key{codeexample}{code}{\colorlet{codebackground}{#1}}
\define@key{codeexample}{execute code}{\csname code@execute#1\endcsname}
\define@key{codeexample}{code only}[]{\code@executefalse}
\define@key{codeexample}{pre}{\def\code@pre{#1}}
\define@key{codeexample}{post}{\def\code@post{#1}}
% 
\def\code@pre{}
\def\code@post{}
% 
\newdimen\finalcodeexamplewidth % XXX
\newdimen\codeexamplewidth
\newif\ifcode@execute
\newbox\codeexamplebox
\def\codeexample[#1]{%
  \code@executetrue
  \setlength\codeexamplewidth{4cm}%
  \addtolength\codeexamplewidth{7pt}%
  \setkeys{codeexample}{#1}%
  \parindent0pt
  \begingroup%
  \par%
  \medskip%
  \let\do\@makeother%
  \dospecials%
  \obeylines%
  \@vobeyspaces%
  \catcode`\%=13%
  \catcode`\^^M=13%
  \find@example}
\def\endofcodeexample#1{%
  \endgroup%
  \ifcode@execute%
    \setbox\codeexamplebox=\hbox{%
      {%
        {%
          \returntospace%
          \commenthandler%
          \xdef\code@temp{#1}% removes returns and comments
        }%
        \colorbox{graphicbackground}{\color{black}\ignorespaces%
          \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}%
      }%
    }%
    \ifdim\wd\codeexamplebox>\codeexamplewidth%
      \def\code@start{\par}%
      \def\code@flushstart{}\def\code@flushend{}%
      \def\code@mid{\parskip2pt\par\noindent}%
      %\def\code@width{\linewidth-6pt}% XXX
      \setlength\finalcodeexamplewidth{\linewidth} % XXX
      \addtolength\finalcodeexamplewidth{-6pt} % XXX
      \def\code@end{}%
    \else%
      \def\code@start{%
        \linewidth=\textwidth%
        \parshape \@ne 0pt \linewidth
        \leavevmode%
        \hbox\bgroup}%
      \def\code@flushstart{\hfill}%
      \def\code@flushend{\hbox{}}%
      \def\code@mid{\hskip6pt}%
      %\def\code@width{\linewidth-12pt-\codeexamplewidth}% XXX
      \setlength\finalcodeexamplewidth{\linewidth} % XXX
      \addtolength\finalcodeexamplewidth{-12pt} % XXX
      \addtolength\finalcodeexamplewidth{-\codeexamplewidth} % XXX
      \def\code@end{\egroup}%
    \fi%
    \code@start%
    \noindent%
    \begin{minipage}[t]{\codeexamplewidth}\raggedright
      \hrule width0pt%
      \footnotesize\vskip-1em%
      \code@flushstart\box\codeexamplebox\code@flushend%
      \vskip-1ex
      \leavevmode%
    \end{minipage}%
  \else%
    \def\code@mid{\par}
    %\def\code@width{\linewidth-6pt}% XXX
    \setlength\finalcodeexamplewidth{\linewidth} % XXX
    \addtolength\finalcodeexamplewidth{-6pt} % XXX
    \def\code@end{}
  \fi%
  \code@mid%  
  \colorbox{codebackground}{%
%    \begin{minipage}[t]{\code@width}% XXX
    \begin{minipage}[t]{\the\finalcodeexamplewidth}%
      {%
        \let\do\@makeother
        \dospecials
        \frenchspacing\@vobeyspaces
        \normalfont\ttfamily\footnotesize
        \typesetcomment%
        \@tempswafalse
        \def\par{%
          \if@tempswa
          \leavevmode \null \@@par\penalty\interlinepenalty
          \else
          \@tempswatrue
          \ifhmode\@@par\penalty\interlinepenalty\fi
          \fi}%
        \obeylines
        \everypar \expandafter{\the\everypar \unpenalty}%
        #1}
    \end{minipage}}%
  \code@end%
  \par%
  \medskip
  \end{codeexample}
}

\def\endcodeexample{}


%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
% code from various pgf/tikz source files and own modifications or additions
%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>

\newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist}
\newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt\item\strut{#1}\par\topsep=0pt}
\newcommand\pgfmanualbody{\parskip3pt}

\definecolor{darkred}{rgb}{0.75,0,0}
\definecolor{green}{rgb}{0,.75,0}

\def\bschar{{\char`\\}}

\newcommand{\stylekeyheadline}[2][\pgfutil@empty]{%
  \pgfmanualentryheadline{\texttt{\color{darkred}/tikz/#2}%
  \def\pgf@test{#1}%
  \ifx\pgf@test\pgfutil@empty%
  \else%
  \texttt{=}#1%
  \fi%
  \index{#2@\texttt{#2} key}}%
}

\newenvironment{stylekey}[2][]{
  \begin{pgfmanualentry}
    \stylekeyheadline[#1]{#2}
    \pgfmanualbody
}{
  \end{pgfmanualentry}
}
\newcommand{\commandentry}[2][]{%
  \texttt{\color{darkred}\textbackslash #2}#1%
  \index{#2@\texttt{\textbackslash #2}}
}
\newenvironment{command}[2][]{
  \begin{pgfmanualentry}
    \pgfmanualentryheadline{\commandentry{#2}{#1}}
    \pgfmanualbody
}{
  \end{pgfmanualentry}
}
\newcommand\arrowtip[1]{
  \texttt{#1}\index{Arrow tips!mandatory@\protect\texttt{mandatory}}%
}

\newcommand{\opt}[1]{\color{green}#1}
\newcommand{\meta}[1]{$\langle$\textit{#1}$\rangle$}
\newcommand{\marg}[1]{\texttt{\textbraceleft}\meta{#1}\texttt{\textbraceright}}
\newcommand{\oarg}[1]{\texttt{\textbraceleft} \texttt{\textbraceright}}

% Global styles:
\tikzset{
  shape example/.style={
    color=black!30,
    draw,
    fill=yellow!30,
    line width=.25cm, % .5
    inner xsep=1.25cm, % 2.5
    inner ysep=0.25cm}  % 0.5
}

\def\tikzname{Ti\emph{k}Z}

\makeatother

%%% Enable '|' to type verbatim

\usepackage{fancyvrb}
\DefineShortVerb{\|}

%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
\endinput
