% Copyright 2008 by Mark Wibrow
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.


% Common keys for all logic gates.
%
\pgfkeys{/pgf/.cd,%
	logic gate input sep/.initial=0.125cm,
	logic gate inputs/.initial={normal,normal},%
	logic gate inverted radius/.initial=2pt
}


% Internal macro for parsing inputs.
%
\expandafter\ifx\csname pgf@lib@sh@logicgate@parseinputs\endcsname\relax%
\def\pgf@lib@sh@logicgate@parseinputs#1{%
	\edef\pgf@lib@sh@temp{\pgfkeysvalueof{/pgf/logic gate inputs}}%
	\c@pgf@counta#1\relax%
	\c@pgf@countb0\relax%
	\expandafter\pgfutil@in@\expandafter,\expandafter{\pgf@lib@sh@temp}%
	\ifpgfutil@in@%
		\let\pgf@lib@sh@next\pgf@lib@sh@logicgate@parseinputs@long%
	\else%
		\let\pgf@lib@sh@next\pgf@lib@sh@logicgate@parseinputs@short%
	\fi%
	\pgf@lib@sh@next%
}	
\def\pgf@lib@sh@itext{i}
\def\pgf@lib@sh@invertedtext{inverted}
%
%	The `short' version for input specifcation is an extension of
%	ideas due to Juergen Werber and Christoph Bartoschek.
%
\def\pgf@lib@sh@logicgate@parseinputs@short{%
	\expandafter\pgf@lib@sh@logicgate@parseinputs@@short\pgf@lib@sh@temp\pgf@stop%
}
\def\pgf@lib@sh@logicgate@parseinputs@@short#1{%
	\ifx#1\pgf@stop%
		\edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}%
		\let\pgf@lib@sh@next\relax%
	\else%
		\ifnum\c@pgf@countb=\c@pgf@counta%
			\edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}%
			\let\pgf@lib@sh@next\relax%
		\else%
			\advance\c@pgf@countb1\relax%
			\expandafter\ifx\pgf@lib@sh@itext#1%
				\expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{%
					\expandafter\def\csname input-\the\c@pgf@countb\endcsname{i}}%
			\else%
				\expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{%
					\expandafter\def\csname input-\the\c@pgf@countb\endcsname{n}}%
			\fi%		
			\let\pgf@lib@sh@next\pgf@lib@sh@logicgate@parseinputs@@short%
		\fi%
	\fi%
	\pgf@lib@sh@next%
}
\def\pgf@lib@sh@logicgate@parseinputs@long{%
	\expandafter\pgf@lib@sh@logicgate@parseinputs@@long\pgf@lib@sh@temp,\pgf@stop,%
}
\def\pgf@lib@sh@logicgate@parseinputs@@long#1,{%
	\ifx#1\pgf@stop%
		\edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}%
		\let\pgf@lib@sh@next\relax%
	\else%
		\ifnum\c@pgf@countb=\c@pgf@counta%
			\edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}%
			\let\pgf@lib@sh@next\relax%
		\else%
			\advance\c@pgf@countb1\relax%
			\def\pgf@lib@sh@temp{#1}%
			\ifx\pgf@lib@sh@invertedtext\pgf@lib@sh@temp%
				\expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{%
					\expandafter\def\csname input-\the\c@pgf@countb\endcsname{i}}%
			\else%
				\expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{%
					\expandafter\def\csname input-\the\c@pgf@countb\endcsname{n}}%
			\fi%		
			\let\pgf@lib@sh@next\pgf@lib@sh@logicgate@parseinputs@@@long%
		\fi%
	\fi%
	\pgf@lib@sh@next%
}
\def\pgf@lib@sh@logicgate@parseinputs@@@long{%
	\pgfutil@ifnextchar x{\pgf@lib@sh@logicgate@parseinputs@@long}%
		{\pgf@lib@sh@logicgate@parseinputs@@long}%
}
\fi%


