%%
%% This is file `bondgraphs.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% bondgraphs.dtx  (with options: `package')
%% This is a generated file.
%% 
%% Copyright (C) ⟨2014⟩ by ⟨Geert Folkertsma⟩
%% This file may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3 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.3 or later is part of all distributions of
%% LaTeX version 2008/05/04 or later.
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{bondgraphs}[2015/03/23 v1.0.1 TikZ-based Bond graphs formatting package]
\RequirePackage{tikz}[2013/12/13]
\usetikzlibrary{arrows,arrows.meta,decorations.pathreplacing}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes}
\RequirePackage{amsfonts}
\RequirePackage{bm}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=bondgraphs,prefix=bondgraphs@}
\DeclareStringOption[blue]{labelcolour}
\DeclareStringOption[green!50!black]{bondlabelcolour}
\DeclareBoolOption[false]{grey}
\DeclareComplementaryOption{colour}{grey}
\DeclareBoolOption[false]{curly}
\ProcessLocalKeyvalOptions{bondgraphs}
\ifbondgraphs@grey
  \message{Bondgraphs package: greyscale set}
  \colorlet{diff}{black!60!white}
  \colorlet{error}{black!40!white}
  \def\bondgraphs@labelcolour{black!50!white}
  \def\bondgraphs@bondlabelcolour{black!50!white}
  %TODO: would be nice to have this as a style instead of a colour...
\else
  \message{Bondgraphs package: using colour}
  \colorlet{diff}{orange}
  \colorlet{error}{red}
\fi
\tikzset{bond/.style args={#1}{
  decoration={show path construction,
    lineto code={
    \draw[#1,thick]
      \pgfextra{%       +45 i.s.o. -1 for to left or to under, always
        \pgfmathparse{int((\pgfdecoratedangle-1)/90)}
        \ifcase\pgfmathresult
          \ifbondgraphs@curly
            \tikzset{-{Classical TikZ Rightarrow[length=3 2 0.8,right]}}
          \else
            \tikzset{-{Straight Barb[length=3 2 0.8,right]}}
          \fi
        \or
          \ifbondgraphs@curly
            \tikzset{-{Classical TikZ Rightarrow[length=3 2 0.8,left]}}
          \else
            \tikzset{-{Straight Barb[length=3 2 0.8,left]}}
          \fi
        \or
          \ifbondgraphs@curly
            \tikzset{-{Classical TikZ Rightarrow[length=3 2 0.8,left]}}
          \else
            \tikzset{-{Straight Barb[length=3 2 0.8,left]}}
          \fi
        \else
          \ifbondgraphs@curly
            \tikzset{-{Classical TikZ Rightarrow[length=3 2 0.8,right]}}
          \else
            \tikzset{-{Straight Barb[length=3 2 0.8,right]}}
          \fi
        \fi
      }  (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
    }
  },
  postaction=decorate
},
bond/.default={}
}
\tikzset{mbond/.style={bond={double,#1}}}
\tikzset{bonds/.style={every edge/.append style={bond}}}
\tikzset{
  bondlabel/.style={
    font=\small,
    color=\bondgraphs@bondlabelcolour,
    sloped,
  },
  effort/.style args={#1}{
    edge node={node [bondlabel,above]{#1}}
  },
  effort/.default={},
  flow/.style args={#1}{
    edge node={node [bondlabel,below]{#1}}
  },
  flow/.default={}
}
\tikzset{
  e_out/.style args={#1}{
    -{|[line width=1.2pt,width=7pt,#1]}
  },
  e_out/.default={black},
  f_in/.style args={#1}{
    e_out={#1}
  },
  e_in/.style args={#1}{
    {|[line width=1.2pt,width=7pt,#1]}-
  },
  e_in/.default={black},
  f_out/.style args={#1}{
    e_in={#1}
  }
}
\newcommand\bond[1][]{%
  \tikz \draw(0,0) edge[bond,#1] (1,0);
}
\tikzset{
  bgelement/.style={
    font=\bfseries,
    prefix after command= {\pgfextra{
      \tikzset{every label/.style={
        % Element label style
        \bondgraphs@labelcolour,
        font={\mdseries}
      }
    }}}
  }
}
\tikzset{
  multiport/.style={
    execute at begin node=$\mathbb\bgroup,
    execute at end node=\egroup$
  }
}
\tikzset{
  wordbgelement/.style={
    draw,ellipse,minimum size=12pt,thick,font=\mdseries
  }
}
\newif\ifbondgraphs@bgelement@multiport
\newif\ifbondgraphs@bgelement@wordbg
\pgfkeys{
  /bgelement/.is family, %automatically cd to /bgelement when present
  /bgelement/n/.store in=\bondgraphs@bgelement@n,
  /bgelement/n=1,
  %
  /bgelement/multiport/.is if=bondgraphs@bgelement@multiport,
  /bgelement/multiport=false,
  /bgelement/wordbg/.is if=bondgraphs@bgelement@wordbg,
  /bgelement/wordbg=false,
}
\newcommand\bgelement[2][]{%
  \pgfkeys{/bgelement,multiport=false,wordbg=false,#1}%
  \ifbondgraphs@bgelement@wordbg
    \tikz[baseline=(the_elm.base)] \node[wordbgelement] (the_elm) {#2};%
  \else
    \ifbondgraphs@bgelement@multiport
      \ifnum\bondgraphs@bgelement@n=1
        \ensuremath{\mathbb{#2}}%
      \else
        \ensuremath{\mathbb{#2}_{\bondgraphs@bgelement@n}}%
      \fi
    \else
      \ifnum\bondgraphs@bgelement@n=1
        \textrm{\textbf{#2}}%
      \else
        \textrm{\textbf{#2}$_{\bondgraphs@bgelement@n}$}%
      \fi
    \fi
  \fi
}
\newenvironment{bondgraph}[1][]{%
\begin{tikzpicture}%
  [#1,every node/.style={bgelement},every edge/.append style={bond}]%
}{%
\end{tikzpicture}
}
\endinput
%%
%% End of file `bondgraphs.sty'.
